combobox 如何載入系統的style |
尚未結案
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
uses TypInfo procedure TForm1.Button1Click(Sender: TObject);; var a: integer; pInfo: PTypeInfo; pEnum: PTypeData; begin ComboBox1.Items.Clear; pInfo := PTypeInfo(TypeInfo(TBrushStyle)); pEnum := GetTypeData(pInfo); with pEnum^ do begin for a := MinValue to MaxValue do ComboBox1.Items.Add(GetEnumName(pInfo, a)); end; end;取出, 例: Image1.Canvas.Brush.Style := TBrushStyle(ComboBox1.ItemIndex); -- He just never quits. 發表人 - hagar 於 2004/04/09 12:10:45 |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
seaturn99
版主 發表:69 回覆:427 積分:214 註冊:2003-08-25 發送簡訊給我 |
引言: 這program 取出的東西 似乎不夠 我要的東西 有字型、線條、及圖型的框內格式seedbcc 您好 : TComboBox -> Properties 頁面設定 Style -> csOwnerDrawFixed or csOwnerDrawVariable 在 OnDrawItem 內利用 (Control as TComboBox).Canvas 便可以畫出您想要輸出的結果.. 或者,找到 □■ 的對應字型字體,類似上面的方法輸出.. ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ---- |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
s8556026
一般會員 發表:10 回覆:43 積分:15 註冊:2003-07-26 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
s8556026
一般會員 發表:10 回覆:43 積分:15 註冊:2003-07-26 發送簡訊給我 |
^^|| class="code">
ComboBox1.OnDrawItem := ComboBox1DrawItem; procedure TForm1.ComboBox1DrawItem(Control: TWinControl;Index:Integer;
Rect:TRect;State:TOwnerDrawState);
var
Rc:TRect;
begin
Rc.Top:=0;
Rc.Left:=0;
Rc.Right := Rect.Height;
Rc.Bottom := Rect.Height;
ComboBox1.Canvas.FillRect(Rc);
ComboBox1.Canvas.TextOut( Rect.Height ,0 , (Control as TComboBox).Items[Index]); end;
引言: ComboBox1.Canvas.FillRect [Error] frm_FileLikelySet.pas(335): Not enough actual parameters發表人 - s8556026 於 2004/04/21 09:50:29 |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
s8556026
一般會員 發表:10 回覆:43 積分:15 註冊:2003-07-26 發送簡訊給我 |
引言: [Error] frm_StatNumShowSet.pas(72): Undeclared identifier: 'Height' 順便問一下 ComboBox1.Canvas.Font.Name ComboBox1.Canvas.TextOut 要變更上述程式的哪個部分SORRY 打錯了…height-->bottom 變更程式的部份…不懂… Font Name 就是字型… 你試試吧…加油… ComboBox1.OnDrawItem := ComboBox1DrawItem; procedure TForm1.ComboBox1DrawItem(Control: TWinControl;Index:Integer; Rect:TRect;State:TOwnerDrawState); var Rc:TRect; begin Rc.Top:=0; Rc.Left:=0; Rc.Right := Rect.Bottom; Rc.Bottom := Rect.Bottom; ComboBox1.Canvas.FillRect(Rc); ComboBox1.Canvas.TextOut( Rect.Bottom,0 , (Control as TComboBox).Items[Index]); end; |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
s8556026
一般會員 發表:10 回覆:43 積分:15 註冊:2003-07-26 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
s8556026
一般會員 發表:10 回覆:43 積分:15 註冊:2003-07-26 發送簡訊給我 |
引言: sorry,還是不太懂mm… 版主貼的元件來源 http://www.geocities.com/ctlibcomps/other.htm 下載後有三種使用方式 1.看他的 .PAS 是怎麼寫的…然後抄過來 2.在 DELPHI 中 Add 一個 component 使用下載的 dcu、pas 新增完成後(記得 compiler)可以直接從 component list 中用 mouse 拉出來 3.直接 uses 這一個 .pas ,用程式碼 create 一個出來(記得設位置和大小) 如果看完還不會就建議你買本 delphi 的書來看… |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
items加入了
Square
Circle
Triangle
Down Triangle
Cross
Diagonal Cross
Star
Diamond
Small Dot
Nothing
Left Triangle
Right Triangle 使用的元件為Tcomboflat 這是我drawitem的部分
{$IFNDEF CLX}
procedure TSeriesPointerEditor.CBStyleDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
{$ELSE}
procedure TSeriesPointerEditor.CBStyleDrawItem(Sender:TObject; Index: Integer;
Rect: TRect; State: TOwnerDrawState; Var Handled:Boolean);
{$ENDIF}
var tmp : TColor;
Old : TColor;
ACanvas: TTeeCanvas3D;
{$IFDEF CLX}
Var QC : QColorH;
{$ENDIF}
begin
Old:=CBStyle.Canvas.Brush.Color;
{$IFNDEF CLX}
// background
CBStyle.Canvas.FillRect(Rect);
{$ENDIF} // pointer shape
With {$IFNDEF CLR}TPointerAccess{$ENDIF}(ThePointer) do
begin
ACanvas:=TTeeCanvas3D.Create;
try
ACanvas.ReferenceCanvas:=CBStyle.Canvas; tmp:=Brush.Color;
if (tmp=clTeeColor) and Assigned(ParentSeries) then
tmp:=ParentSeries.SeriesColor; PrepareCanvas(ACanvas,tmp); case TSeriesPointerStyle(Index) of
psCross,
psDiagCross,
psStar,
psSmallDot:
if not Pen.Visible then
with ACanvas.Pen do
begin
Style:=psSolid;
Width:=1;
Color:=tmp;
end;
end; DrawPointer(ACanvas,False,Rect.Left 6,Rect.Top 6 2,4,4,tmp,TSeriesPointerStyle(Index));
finally
ACanvas.Free;
end;
end; // text
With CBStyle,Canvas do
begin
{$IFNDEF CLX}
Brush.Style:=bsClear;
{$ENDIF}
Brush.Color:=Old;
{$IFNDEF CLX}
TControlCanvas(CBStyle.Canvas).UpdateTextFlags;
{$ELSE}
QC:=QColor(Old);
Start(True);
QPainter_setBackgroundColor(Handle,QC);
Stop;
QColor_destroy(QC);
{$ENDIF}
TextOut(Rect.Left 14,Rect.Top 2,Items[Index]);
end;
end; 上面是我套用teechart裡面的一支程式的一小部分 {**********************************************}
{ TSeriesPointer Component Editor Dialog }
{ Copyright (c) 1996-2004 by David Berneda }
{**********************************************}
unit TeePoEdi;
{$I TeeDefs.inc} interface uses {$IFNDEF LINUX}
Windows, Messages,
{$ENDIF}
SysUtils, Classes,
{$IFDEF CLX}
QGraphics, QControls, QForms, QDialogs, QStdCtrls, QExtCtrls, QComCtrls,
Types, Qt,
{$ELSE}
Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls,
{$ENDIF}
TeeProcs, Chart, TeEngine, TeCanvas, TeePenDlg; type
TSeriesPointerEditor = class(TForm)
GPPoint: TGroupBox;
CBDrawPoint: TCheckBox;
CB3dPoint: TCheckBox;
CBInflate: TCheckBox;
Label1: TLabel;
Label2: TLabel;
SEPointHorizSize: TEdit;
SEPointVertSize: TEdit;
CBStyle: TComboFlat;
Label3: TLabel;
UDPointHorizSize: TUpDown;
UDPointVertSize: TUpDown;
CBPoDark: TCheckBox;
GroupBox1: TGroupBox;
BPointFillColor: TButton;
CBDefBrushColor: TCheckBox;
CBColorEach: TCheckBox;
BGradient: TButton;
BPoinPenCol: TButtonPen;
procedure FormShow(Sender: TObject);
procedure CBDrawPointClick(Sender: TObject);
procedure CB3dPointClick(Sender: TObject);
procedure SEPointHorizSizeChange(Sender: TObject);
procedure BPointFillColorClick(Sender: TObject);
procedure CBStyleChange(Sender: TObject);
procedure SEPointVertSizeChange(Sender: TObject);
procedure CBInflateClick(Sender: TObject);
procedure CBPoDarkClick(Sender: TObject);
procedure CBDefBrushColorClick(Sender: TObject);
{$IFNDEF CLX}
procedure CBStyleDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
{$ELSE}
procedure CBStyleDrawItem(Sender:TObject; Index: Integer;
Rect: TRect; State: TOwnerDrawState; Var Handled:Boolean);
{$ENDIF}
procedure CBColorEachClick(Sender: TObject);
procedure BPoinPenColClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BGradientClick(Sender: TObject);
private
{ Private declarations }
Procedure CheckDefColor;
Procedure Enable3DPoint;
procedure SetPointerVisible(Value:Boolean);
protected
ThePointer : TSeriesPointer;
public
{ Public declarations }
procedure HideSizeOptions;
end; // Modally show the Pointer editor dialog
Procedure EditSeriesPointer(AOwner:TComponent; APointer:TSeriesPointer); { Adds a new sub-tab Form into the Series tab at EditChart dialog }
Function TeeInsertPointerForm( AParent:TControl;
APointer:TSeriesPointer;
Const Title:String):TCustomForm; implementation {$IFNDEF CLX}
{$R *.DFM}
{$ELSE}
{$R *.xfm}
{$ENDIF} uses {$IFNDEF CLR}
TypInfo,
{$ELSE}
Variants,
{$ENDIF}
TeeBrushDlg, Series, TeeConst, TeeEdiSeri, TeeEdiGrad;
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
1.看一下 http://delphi.ktop.com.tw/pop_forum_code.asp 裏有關 code 的部份, 不然大家看沒排過的程式碼很累
2.
TSeriesPointerStyle = (psRectangle, psCircle, psTriangle, psDownTriangle, psCross, psDiagCross, psStar, psDiamond, psSmallDot);
所以 items 的內容也得照這個順序,
看您的 items 內容沒照這個順序, 而且數目也超過了
您所說的錯誤訊息應該是這個吧
還是有其它的錯誤訊息?
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
引言: hagar兄 可否將 線條 加入你回答的第一個答案? 不就 TBrushStyle 改成 TPenStyle 就好了? uses TypInfo; procedure TForm1.Button1Click(Sender: TObject);; var a: integer; pInfo: PTypeInfo; pEnum: PTypeData; begin ComboBox2.Items.Clear; pInfo := PTypeInfo(TypeInfo(TPenStyle)); pEnum := GetTypeData(pInfo); with pEnum^ do begin for a := MinValue to MaxValue do ComboBox2.Items.Add(GetEnumName(pInfo, a)); end; end; 取出: Image1.Canvas.Pen.Style := TPenStyle(ComboBox2.ItemIndex); |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
// 將 TPenStyle 各個值加入 ComboBox1 的 Item procedure TForm1.Button1Click(Sender: TObject); var a: integer; pInfo: PTypeInfo; pEnum: PTypeData; begin ComboBox1.Items.Clear; pInfo := PTypeInfo(TypeInfo(TPenStyle)); pEnum := GetTypeData(pInfo); with pEnum^ do begin for a := MinValue to MaxValue do ComboBox1.Items.Add(GetEnumName(pInfo, a)); end; ComboBOx1.ItemIndex := 0; end; // 將 ComboBox1 內各個 Item 畫出來(記得將 ComboBox1 的 Style 設為 csOwnerDrawFixed) procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var cs: TCanvas; iTextWidth: integer; R: TRect; begin R := Rect; cs := TComboBox(Control).Canvas; cs.FillRect(R); cs.Font.Color := clBlack; cs.TextOut(R.Left, R.Top, TComboBox(Control).Items[Index]); // 畫出字 iTextWidth := cs.TextWidth(TComboBox(Control).Items[Index]); // 取得畫出的字的寬度值, 待會要畫線時, 要畫在這個寬度之後 cs.Pen.Color := clBlack; cs.Pen.Style := TPenStyle(Index); // 得到 PenStyle 的值 // 以下這兩行畫出各個 PenStyle 的線, 即要用到 TCanvas.MoveTo 與 TCanvas.LineTo 這兩個函式 cs.MoveTo(R.Left iTextWidth 2, R.Top (R.Bottom - R.Top) div 2); cs.LineTo(R.Right, R.Top (R.Bottom - R.Top) div 2); cs.FrameRect(R); end;如果要畫出 Circle 的話, 得用到 TCanvas.Ellipse 函式 以此類推. |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
引言: 感恩喔! 但是try了又try 還是try不出啦procedure Ellipse(X1, Y1, X2, Y2: Integer); overload; 這個是給兩個座標, (X1, Y1) 是指左上方點的座標, (X2, Y2) 是給左下方點的座標, 它會依這兩個座標來畫圓 procedure Ellipse(const Rect: TRect); overload; 這個則是給一個型態為 TRect 的值 所謂 TRect 是指一個矩形區域 TRect.Left 指矩形區域的左上方點的 x 軸的值 TRect.Top 指矩形區域的左上方點的 y 軸的值 TRect.Right 指矩形區域的長度 TRect.Bottom 指矩形區域的高度 由此可以得到矩形區域的四個點的座標值 在 ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); 時 有個 Rect 參數, 它是指每個 Item 所佔的矩形區域 cs.TextOut(R.Left, R.Top, TComboBox(Control).Items[Index]); 是指在矩形區域的最左邊(x 軸)最上邊(y 軸)畫出字 此時並算出所畫出的字佔的寬度, 用 iTextWidth 變數表示 接著以下兩行畫線 cs.MoveTo(R.Left iTextWidth 2, R.Top (R.Bottom - R.Top) div 2); cs.LineTo(R.Right, R.Top (R.Bottom - R.Top) div 2); 畫線可以想像有一支筆(Pen)先移到(也就是 MoveTo 函式)第一點座標 然後一直畫到第二點座標的位置(也就是 LineTo 函式) 同理, 用 Rect 參數來決定要畫的圓的位置 至於那個正方形填滿顏色的方塊可以用 FillRect 函式來達到 (Brush.Color 設定要填的顏色) |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |