AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Combobox mit tag

Ein Thema von StTüff · begonnen am 30. Aug 2006 · letzter Beitrag vom 31. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
StTüff

Registriert seit: 3. Dez 2002
132 Beiträge
 
Delphi 2006 Enterprise
 
#1

Combobox mit tag

  Alt 30. Aug 2006, 17:14
Hallo zusammen!

Ich würde gerne mit jedem Eintrag in einer Combobox einen Integerwert abspeichern.
Mir ist klar, dass ich jedem Eintrag ein Objekt zuordnen kann. Da ich aber nur einen simplen Integerwert benötige, habe ich mir gedacht: Das Tolle an Objektorientierung ist, dass ich mir meine TaggedKombobox selbst bauen kann.
Ich hab dann mal mit so was
Delphi-Quellcode:
TTaggedStrings = class (TStrings)

end;

TTaggedComboBox = class(TComboBox)
  Items:TTaggedStrings;
  
end;
angefangen, aber leider fehlt mir der Plan, wie ich jetzt jedem String einen Integerwert (tag) anhängen kann.

Natürlich kann ich doch auf die "Objektanhängvariante" ausweichen. Mich würde aber die Lösung auf diese Art interessieren. Kann mir da jemand auf die Sprünge helfen?

Gruß,

StTüff
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Combobox mit tag

  Alt 30. Aug 2006, 17:38
Delphi-Quellcode:
TTaggedStrings = class (TStrings)
  private
    FTag: Integer;
  published
    Tag: Integer read FTag write FTag;
  public
    constructor Create;
end;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Combobox mit tag

  Alt 30. Aug 2006, 17:43
naja ich schätze er will die Strings der ComboBox durch seine Tag-Strings ersetzen so das er dann das ganze so aufrufen kann:

Combobox.Strings[x].Tag Ehm glaube ich zumindest.. Aber das dürfte unmöglich sein so wie ichs verstehe

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Combobox mit tag

  Alt 30. Aug 2006, 17:46
Zitat:
naja ich schätze er will die Strings der ComboBox durch seine Tag-Strings ersetzen
Glaube ich nicht:
Zitat:
wie ich jetzt jedem String einen Integerwert (tag) anhängen kann.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Combobox mit tag

  Alt 30. Aug 2006, 17:47
Genau diese Zeile verstehe ich so wie ich schon gesagt habe
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Combobox mit tag

  Alt 30. Aug 2006, 17:55
Er wird sich sicherlich wieder melden und uns dann aufklären, wie er es gemeint hat
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Combobox mit tag

  Alt 30. Aug 2006, 18:06
Zitat von StTüff:
Mir ist klar, dass ich jedem Eintrag ein Objekt zuordnen kann.
Du könntest es einfach so machen:
Delphi-Quellcode:
  // Schreiben
  Strings.Objects[idx] := Pointer(Wert);
  // Auslesen
  Wert := Integer(Strings.Objects[idx]);
Das Problem bei deiner Idee ist, dass die ComboBox dir zwar ein TStrings-Interface gibt, intern aber eine eigene Implementierung dieser abstrakten Klasse verwendet. Die kannst du so einfach nicht erweitern. Komponenten, bei denen das vorgesehen ist, benutzen eine virtuelle Klassenfunktion zur Ermittlung der eigentlichen Klasse der nehmen ein Ereignis dafür (z.B. TTreeView.OnCreateNodeClass).

// NACHTRAG!!!

Habe gerade gesehen, dass das bei TComboBox sogar schon vorgesehen ist! Du musst dafür GetItemsClass überschreiben:
Delphi-Quellcode:
  protected
    // ...
    function GetItemsClass: TCustomComboBoxStringsClass; virtual; abstract;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Combobox mit tag

  Alt 30. Aug 2006, 20:59
Hallo,

Delphi-Quellcode:
procedure InsertData(const aStr : String; aValue : Integer);
begin
  ComboBox1.Items.AddObject(aStr, TObject(aValue));
end;

function GetValue(aIdx : Integer) : Integer;
begin
  Result := Integer(ComboBox1.Items.Objects[aIdx]);
end;
So würde ich es programmieren.

Gruß,
pszopp
www.pstipp.de | Tippseite zur Formel 1 und Fußball WM/EM - kostenlos und Just-For-Fun
  Mit Zitat antworten Zitat
StTüff

Registriert seit: 3. Dez 2002
132 Beiträge
 
Delphi 2006 Enterprise
 
#9

Re: Combobox mit tag

  Alt 31. Aug 2006, 07:04
Hallo @all!

Erst mal vielen Dank für die vielen Antworten!

Noch mal zur Erklärung:
Ich hatte mir den Zugriff so vorgestellt:
 MyCombobox.Items[X].tag := EinIntegerWert; Da "MyCombobox.Itemx[x]" aber vom Typ TStrings ist, dachte ich, dass ich hier ansetzen und einfach für jeden enthaltenen String noch einen "Tag" hinzufügen kann.

Zunächst ein mal habe ich jetzt aber registriert, dass die meisten es über die "Objektlösung" versuchen würden.
Ich habe es auch so gelöst. Ich würde aber gerne noch mal den Ansatz von Volker weiterverfolgen, da ich so was noch nie gemacht habe und gerne an diesem Beispiel etwas dazulernen möchte.

Volker schreibt:
Zitat:
Komponenten, bei denen das vorgesehen ist, benutzen eine virtuelle Klassenfunktion zur Ermittlung der eigentlichen Klasse der nehmen ein Ereignis dafür (z.B. TTreeView.OnCreateNodeClass).

// NACHTRAG!!!

Habe gerade gesehen, dass das bei TComboBox sogar schon vorgesehen ist! Du musst dafür GetItemsClass überschreiben:
Delphi-Quellcode:
protected
    // ...
    function GetItemsClass: TCustomComboBoxStringsClass; virtual; abstract;
Ich werde das mal versuchen (auch wenn ich noch keinen Plan habe wie das geht) und mich dann noch mal melden.

Wenn mir zwischenzeitlich jemand einen Vorschlag für die Unsetzung machen möchte - Ich höre gerne zu

Gruß und noch mal vielen Dank an alle!

StTüff
  Mit Zitat antworten Zitat
StTüff

Registriert seit: 3. Dez 2002
132 Beiträge
 
Delphi 2006 Enterprise
 
#10

Re: Combobox mit tag

  Alt 31. Aug 2006, 07:43
....so, ich möchte gerne über meine ersten Schritte berichten, damit Ihr mich gleich bremsen könnt, wenn ich was falsch mache.

So weit bin ich bis jetzt gekommen:
Delphi-Quellcode:
unit TaggedCoBo;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, StdCtrls;

type
  TTaggedComboBox = class(TComboBox)
  private
    { Private declarations }
  protected
    { Protected declarations }
    function GetItemsClass: TCustomComboBoxStringsClass; override;
  public
    { Public declarations }
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('My_Components', [TTaggedComboBox]);
end;

function TTaggedComboBox.GetItemsClass: TCustomComboBoxStringsClass;
begin
  //Hier sollte ich jetzt wohl was machen ;-)

  inherited;
end;

end.
OK, da steckt inhaltlich noch nicht viel drin, ich bin mir aber trotzdem schon unsicher, ob das alles so passt.

Gruß,

StTüff
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz