線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1633
推到 Plurk!
推到 Facebook!

Callback function Proc('clGreen')?哪裡可以看到他裡面的代碼?

答題得分者是:mustapha.wang
Leway
一般會員


發表:43
回覆:71
積分:22
註冊:2003-07-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-15 13:48:07 IP:218.80.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-15 14:04:39 IP:218.80.xxx.xxx 未訂閱
这个函数是你自己写好传入的,如:
procedure TForm1.MyGetStr(const S: string);
begin
  Memo1.Lines.Add(S);
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
  GetColorValues(MyGetStr);
end;
久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
Leway
一般會員


發表:43
回覆:71
積分:22
註冊:2003-07-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-15 14:16:58 IP:218.80.xxx.xxx 未訂閱
謝謝先. 這是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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-15 14:22:10 IP:218.160.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-15 14:24:51 IP:218.80.xxx.xxx 未訂閱
仿照TColorProperty重写一个属性编辑器,注册到你的新元件的Color属性上。 那个Proc函数是delphi IDE写的,大概是把得到的str收集起来,放到object inspector的下拉combox里。     久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听 發表人 - mustapha.wang 於 2004/04/15 14:29:36
------
江上何人初见月,江月何年初照人
Leway
一般會員


發表:43
回覆:71
積分:22
註冊:2003-07-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-15 14:30:55 IP:218.80.xxx.xxx 未訂閱
對呀,我就是在仿照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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-15 14:33:47 IP:218.80.xxx.xxx 未訂閱
这样就可以了呀,关键是要把这个属性编辑器注册到你的元件的属性上。     久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-15 14:33:54 IP:218.160.xxx.xxx 未訂閱
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;//實做
我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
系統時間:2024-07-03 13:35:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!