Callback function Proc('clGreen')?哪裡可以看到他裡面的代碼? |
答題得分者是:mustapha.wang
|
Leway
一般會員 發表:43 回覆:71 積分:22 註冊:2003-07-29 發送簡訊給我 |
const Colors: array[0..51] of TIdentMapEntry = ( (Value: clBlack; Name: 'clBlack'), (Value: clMaroon; Name: 'clMaroon'), (Value: clGreen; Name: 'clGreen'), (Value: clOlive; Name: 'clOlive'), (Value: clNavy; Name: 'clNavy'), (Value: clPurple; Name: 'clPurple'), (Value: clTeal; Name: 'clTeal'), (Value: clGray; Name: 'clGray'), (Value: clSilver; Name: 'clSilver'), (Value: clRed; Name: 'clRed'), (Value: clLime; Name: 'clLime'), (Value: clYellow; Name: 'clYellow'), (Value: clBlue; Name: 'clBlue'), (Value: clFuchsia; Name: 'clFuchsia'), (Value: clAqua; Name: 'clAqua'), (Value: clWhite; Name: 'clWhite'), (Value: clMoneyGreen; Name: 'clMoneyGreen'), (Value: clSkyBlue; Name: 'clSkyBlue'), (Value: clCream; Name: 'clCream'), (Value: clMedGray; Name: 'clMedGray'), (Value: clActiveBorder; Name: 'clActiveBorder'), (Value: clActiveCaption; Name: 'clActiveCaption'), (Value: clAppWorkSpace; Name: 'clAppWorkSpace'), (Value: clBackground; Name: 'clBackground'), (Value: clBtnFace; Name: 'clBtnFace'), (Value: clBtnHighlight; Name: 'clBtnHighlight'), (Value: clBtnShadow; Name: 'clBtnShadow'), (Value: clBtnText; Name: 'clBtnText'), (Value: clCaptionText; Name: 'clCaptionText'), (Value: clDefault; Name: 'clDefault'), (Value: clGradientActiveCaption; Name: 'clGradientActiveCaption'), (Value: clGradientInactiveCaption; Name: 'clGradientInactiveCaption'), (Value: clGrayText; Name: 'clGrayText'), (Value: clHighlight; Name: 'clHighlight'), (Value: clHighlightText; Name: 'clHighlightText'), (Value: clHotLight; Name: 'clHotLight'), (Value: clInactiveBorder; Name: 'clInactiveBorder'), (Value: clInactiveCaption; Name: 'clInactiveCaption'), (Value: clInactiveCaptionText; Name: 'clInactiveCaptionText'), (Value: clInfoBk; Name: 'clInfoBk'), (Value: clInfoText; Name: 'clInfoText'), (Value: clMenu; Name: 'clMenu'), (Value: clMenuBar; Name: 'clMenuBar'), (Value: clMenuHighlight; Name: 'clMenuHighlight'), (Value: clMenuText; Name: 'clMenuText'), (Value: clNone; Name: 'clNone'), (Value: clScrollBar; Name: 'clScrollBar'), (Value: cl3DDkShadow; Name: 'cl3DDkShadow'), (Value: cl3DLight; Name: 'cl3DLight'), (Value: clWindow; Name: 'clWindow'), (Value: clWindowFrame; Name: 'clWindowFrame'), (Value: clWindowText; Name: 'clWindowText')); procedure GetColorValues(Proc: TGetStrProc); var I: Integer; begin for I := Low(Colors) to High(Colors) do Proc(Colors[I].Name); end;我想看看 Proc('clGreen') 裡面執行的代碼,請問 哪裡可以看到Callback funtion Proc(Colors[I].Name)裡面的代碼,謝謝! ======================================= 為學日益,為道日損,損之又損,以致於無。為無為,而無不為。 |
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
|
Leway
一般會員 發表:43 回覆:71 積分:22 註冊:2003-07-29 發送簡訊給我 |
謝謝先.
這是TColorProperty的一段代碼.
Proc(Colors[I].Name)是VCL裡面,Standard Callback function,所以是已經寫好的,我想看看裡面寫了寫什麼,如Proc('clGreen')裡面寫的代嗎?
我的目的是將重定義控件的TCOLOR屬性編輯器,達到更換ColorList的目的.
const MyColors: array[0..2] of TIdentMapEntry = ( (Value: $0053C382; Name: 'clGreen'), //'clGreen'不能隨便改,否則執行到Proc(MyColors[I].Name)會Error. (Value: $006DC282; Name: 'clMaroon'), (Value: $00D0CC8F; Name: 'clBlack')); TMyColorProperty = class(TColorProperty) public procedure Edit; override; //function GetAttributes: TPropertyAttributes; override; function GetValue: string; override; procedure GetValues(Proc: TGetStrProc); override; procedure SetValue(const Value: string); override; end; procedure TMyColorProperty.GetValues(Proc: TGetStrProc); var I: Integer; begin for I := Low(MyColors) to High(MyColors) do Proc(MyColors[I].Name); end;======================================= 為學日益,為道日損,損之又損,以致於無。為無為,而無不為。 |
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hi Leway您好:
滑鼠移到TGetStrProc上面按滑鼠右鍵, 選擇第一項Find Declaration, 可以找到他的宣告
TGetStrProc = procedure(const S: string) of object; 所以你必須自己寫一個一樣的Procedure出來
例如:
private { Private declarations } procedure MyProcCallBack(const S : String); ////////////// procedure TForm1.MyProcCallBack(const S: String); begin Label1.Caption := Label1.Caption S; end;如此便可以使用它 GetColorValues(MyProcCallBack); 我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
|
Leway
一般會員 發表:43 回覆:71 積分:22 註冊:2003-07-29 發送簡訊給我 |
對呀,我就是在仿照TColorProperty. 可能問題描述的不太清楚.
procedure GetColorValues(Proc: TGetStrProc); var I: Integer; begin for I := Low(Colors) to High(Colors) do Proc(Colors[I].Name); end; 寫到這裡,我寫不動了,因為我不知道CallBack Proc(Colors[I].Name)裡面寫了什麼東西?所以問哪裡可以看到他的代碼?======================================= 為學日益,為道日損,損之又損,以致於無。為無為,而無不為。 |
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hi Leway 您好:
這是TColorProperty的一段代碼.Proc(Colors[I].Name)是VCL裡面,Standard Callback function,所以是已經寫好的,我想看看裡面寫了寫什麼,如Proc('clGreen')裡面寫的代嗎?
可能有點誤解, Proc(Colors[I].Name)這並非寫好的, proc是你必須傳給他的一個procedure(const S: string) of object, 你必須先自己寫好, 再傳給他, VLC的原碼有一段,
GetColorValues(ColorCallBack);而傳入的ColorCallBack是這樣的 procedure ColorCallBack(const AName: string);//宣告 procedure TCustomColorBox.ColorCallBack(const AName: String); var I, LStart: Integer; LColor: TColor; LName: string; begin LColor := StringToColor(AName); if cbPrettyNames in Style then begin if Copy(AName, 1, 2) = 'cl' then LStart := 3 else LStart := 1; LName := ''; for I := LStart to Length(AName) do begin case AName[I] of 'A'..'Z': if LName <> '' then LName := LName ' '; end; LName := LName AName[I]; end; end else LName := AName; Items.AddObject(LName, TObject(LColor)); end;//實做我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |