| Autor |
Beitrag |
MisterB
      
Beiträge: 18
Windows XP
Delphi 5 Professional
|
Verfasst: Di 03.05.05 10:27
Hallo an alle!
Habe eine TreeComboBox, die aus einer Combobox und einem Treevwie besteht. Ich hätte gerne das Event OnCompare des Treeviews im Objektinspektor. Habe trotz durchsicht des Forums keine rechte Ahnung wie ich das hinbekomme. Vielleicht kann mir ja einer weiterhelfen. Folgend ein Auszug des Codes der Komponente.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86:
| type TTree = class(TTreeView) private FMouseInControl: Boolean; procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE; procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN; function GetItemHeight: Integer; public protected procedure CreateParams(var Params: TCreateParams); override; procedure CreateWnd; override; published end;
TFlatTreeComboBox = class(TCustomComboBox) Tree : TTree; private ... procedure WMPaint (var Message: TWMPaint); message WM_PAINT; procedure WMNCPaint (var Message: TMessage); message WM_NCPAINT; procedure CMEnabledChanged (var Msg: TMessage); message CM_ENABLEDCHANGED; procedure CMFontChanged (var Message: TMessage); message CM_FONTCHANGED; procedure WMSize (var Message: TWMSize); message WM_Size; function GetAutoExpand: boolean; procedure SetAutoExpand (VAutoExpand: boolean); function GetHotTrack: boolean; procedure SetHotTrack (VHotTrack: boolean); function GetPopupMenu: TPopupMenu; reintroduce; procedure SetPopupMenu(AValue: TPopupMenu); function GetTreeHeight: Integer; procedure SetTreeHeight(VTreeHeight: Integer); function GetShowRoot: boolean; procedure SetShowRoot(RootStatus: boolean); function GetChangeDelay: integer; procedure SetChangeDelay(VChangeDelay: Integer); function GetItems: TTreeNodes; procedure SetItems(VItems: TTreeNodes); function GetImages: TCustomImageList; procedure SetImages(VImages: TCustomImageList); reintroduce; function GetStateImages: TCustomImageList; procedure SetStateImages(VStateImages: TCustomImageList); reintroduce; function GetRightClickSelect: boolean; procedure SetRightClickSelect(VRSelect: boolean); function GetRowSelect: boolean; procedure SetRowSelect(VRowSelect: boolean); function GetShowButtons: boolean; procedure SetShowButtons(VShowButtons: boolean); function GetShowLines: boolean; procedure SetShowLines(VLines: boolean); function GetSortType: TSortType; procedure SetSortType(SortStatus: TSortType); protected procedure WndProc (var Message: TMessage); override; property SolidBorder: Boolean read FSolidBorder; procedure WMLButtonDown(var Message: TWMLButtonDown); reintroduce; message WM_LBUTTONDOWN; public constructor Create (AOwner: TComponent); override; destructor Destroy; override; published property Color default $00E1EAEB; property ColorArrow: TColor index 0 read FArrowColor write SetColors default clBlack; property ColorArrowBackground: TColor index 1 read FArrowBackgroundColor write SetColors default $00C5D6D9; property ColorBorder: TColor index 2 read FBorderColor write SetColors default $008396A0; property TreeHeight: Integer read GetTreeHeight write SetTreeHeight; property ShowRoot: Boolean read GetShowRoot write SetShowRoot; property ChangeDelay: Integer read GetChangeDelay write SetChangeDelay; property Items: TTreeNodes read GetItems write SetItems; property PopupMenu: TPopupMenu read GetPopupMenu write SetPopupMenu; property AutoExpand: boolean read GetAutoExpand write SetAutoExpand; property HotTrack: boolean read GetHotTrack write SetHotTrack; property Images: TCustomImageList read GetImages write SetImages; property RightClickSelect: boolean read GetRightClickSelect write SetRightClickSelect; property RowSelect: boolean read GetRowSelect write SetRowSelect; property ShowButtons: boolean read GetShowButtons write SetShowButtons; property ShowLines: boolean read GetShowLines write SetShowLines; property SortType: TSortType read GetSortType write SetSortType; property StateImages: TCustomImageList read GetStateImages write SetStateImages; property DragMode; property DragCursor; property Enabled; ... end; |
Vielen Dank schon mal im voraus!
MisterB
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 03.05.05 10:43
//edit: Jetzt sollte es stimmen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| interface TFlatTreeComboBox = ... private procedure DoCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); public constructor Create(aOwner: TComponent); end;
constructor TFlatTreeComboBox.Create(aOwner: TComponent); begin Tree.onCompare := Self.DoCompare; end;
procedure TFlatTreeComboBox.DoCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); begin if Assigned(Self.onCompare) then Self.onCompare(Sender, Item1, Item2, Data, Compare) else Compare := CompareText(...); end; |
Zuletzt bearbeitet von jaenicke am Di 03.05.05 11:19, insgesamt 2-mal bearbeitet
|
|
MisterB 
      
Beiträge: 18
Windows XP
Delphi 5 Professional
|
Verfasst: Di 03.05.05 11:03
Hallo und Danke schon einmal,
leider ist die Liste der Parameter unterschiedlich und ich bekomme eine Fehlermeldung. Oder muss ich Deinen Code noch irgendwie anpassen?
Gruß MisterB
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 03.05.05 11:11
Na ja, dann musst du die Parameterliste entsprechend anpassen, falls ich mich falsch erinnert habe. Wie gesagt, ich kann das jetzt nicht ausprobieren. Entscheidend ist, dass alle Parameter auch weitergegeben werden, die in onCompare stehen.
Ach so: Du musst natürlich die Methoden auch unter interface deklarieren, sonst kann's nicht gehen.
//edit: Hab den Quelltext aus Versehen in meinem letzten Post geändert. Der sollte jetzt stimmen, siehe oben...
|
|
MisterB 
      
Beiträge: 18
Windows XP
Delphi 5 Professional
|
Verfasst: Di 03.05.05 11:25
Hallo!
Also Self.OnCompare ist undefiniert. Da gibt es die ganze Zeit eine Fehlermeldung. Wie kann ich übrigens dann die property OnCompare im Interface deklarieren?
MisterB
|
|
MisterB 
      
Beiträge: 18
Windows XP
Delphi 5 Professional
|
Verfasst: Di 03.05.05 11:32
Den Code hatte ich vorher schon so abgeändert. Nur statt Item1, Item2: TListItem habe ich Node1, Node2: TTreeNode eingefügt.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 03.05.05 11:41
Na ja, dass Self.onCompare undefiniert ist, ist doch klar, wenn du es nicht definiert hast.
Delphi-Quelltext 1: 2: 3: 4:
| TOnCompareEvent = procedure (Sender property onCompare: TOnCompareEvent |
|
|
MisterB 
      
Beiträge: 18
Windows XP
Delphi 5 Professional
|
Verfasst: Di 03.05.05 13:04
Hallo nochmal!
Sorry aber ich habe immer noch Probleme.
Das Schreiben von Komponenten vorallem von Ereignissen ist noch neu für mich. Bekomme jetzt immer die Fehlermeldung "'oncompare' kann nicht vom Typ procedure sein". Vielleicht kannst du mir ja noch einmal einen Tip geben.
Thx  MisterB
|
|
MisterB 
      
Beiträge: 18
Windows XP
Delphi 5 Professional
|
Verfasst: Di 03.05.05 14:07
|
|