![]() |
Re: Combobox mit tag
Zitat:
Allerdings solltest du bedenken, dass TComboBox nur eine objektorientierte Kapselung für die normale Windows-ComboBox ist und ein TCustomComboBoxStrings-Objekt die Elemente nicht beinhaltet sondern nur verwaltet. Dazu gehört auch ein 32-Bit-Wert mit anwendungsspezifischen Daten je Eintrag, und der wird von Delphi eben für die Eigenschaft Objects "missbraucht". |
Re: Combobox mit tag
Hallo Volker!
Ich habe eben schon den StdCtrls durchsucht. Das mit dem Erweitern von TComboBoxStrings war nun der entscheidende Hinweis. Ich glaube jetzt komme ich weiter. Vielen Dank! StTüff |
Re: Combobox mit tag
Was meint Ihr dazu:
Delphi-Quellcode:
Mal abgesehen davon, dass "Insert" noch nicht berücksichtigt ist, könnte es doch in der Art gehen, oder?
unit TaggedCoBo;
interface uses Windows, Messages, SysUtils, Consts, Classes, Controls, StdCtrls; type TTaggedComboBox = class(TComboBox) private { Private declarations } protected { Protected declarations } function GetItemsClass: TCustomComboBoxStringsClass; override; public { Public declarations } published { Published declarations } end; TTaggedComboBoxStrings = class (TCustomComboBoxStrings) public function Addnew(const S: string; tag: integer): Integer; //Insert ist noch nicht berücksichtigt.... procedure Insert(Index: Integer; const S: string); override; function GetTag (idx: integer): integer; private TagArray: array of integer; function Add(const S: string): Integer; override; end; procedure Register; implementation procedure Register; begin RegisterComponents('MyComponents', [TTaggedComboBox]); end; function TTaggedComboBox.GetItemsClass: TCustomComboBoxStringsClass; begin //Hier die Modifizierte Stringklasse zurückgeben Result := TTaggedComboBoxStrings; //inherited; end; function TTaggedComboBoxStrings.Addnew(const S: string; tag: integer): Integer; begin //Den Tag verwalten //String in das Array an der letzten Position einfügen SetLength(TagArray, high(TagArray)+1); TagArray[high(TagArray)]; //Das eigentliche Add aufrufen Result:=Add(S); end; function TTaggedComboBoxStrings.GetTag (idx: integer): integer; begin if idx <= high(TagArray) then Result:=TagArray[idx]; end; function TTaggedComboBoxStrings.Add(const S: string): Integer; begin Result := SendMessage(ComboBox.Handle, CB_ADDSTRING, 0, Longint(PChar(S))); if Result < 0 then raise EOutOfResources.Create(SInsertLineError); end; procedure TTaggedComboBoxStrings.Insert(Index: Integer; const S: string); begin if SendMessage(ComboBox.Handle, CB_INSERTSTRING, Index, Longint(PChar(S))) < 0 then raise EOutOfResources.Create(SInsertLineError); end; end. (Ist noch nicht getestet...) Gruß, StTüff |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz