Toon posts:

[Delphi] Integer toevoegen aan combobox item

Pagina: 1
Acties:
  • 205 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Vereenvoudigd probleem:

Ik heb een dataset met daarin de kolommen id en naam.
Ik wil een combobox vullen met de namen van de dataset en per item ook nog zijn id opslaan.

Ik wil het in deze topic niet hebben over waarom ik deze handmatig vul een geen data-aware component gebruik. Mijn vraag is wat de beste manier is om het id (integer dus) naast de naam op te slaan in de combobox. Ik heb gezien dat je met combobox.items.addObject naast de string ook een object kunt toevoegen. Ik denk dat hier de mogelijkheid in zit om de integer op te slaan. Echter welke child van TObject kan ik hiervoor het beste gebruiken? Of is er een ander alternatief?

  • Schmoove
  • Registratie: Juli 2001
  • Laatst online: 27-05 22:53
code:
1
2
IntToStr(intTest);
Combobox.Items.Add(intTest);

of gewoon zo dus:

code:
1
Combobox.Items.Add(IntToStr(intTest));


Je moet een combobox ook niet zien als een element waar je data in opslaat. Een combobox is een representatie van data. Het beste is om opslag van data en representatie van data altijd gescheiden te houden. Dus bv. de data in een array/linked list/vector en de representatie in een memo/combobox/listview.

[ Voor 70% gewijzigd door Schmoove op 27-01-2004 10:36 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Je slaat die integer idd best op in de Objects collectie van die combobox. Op die manier is dat id niet zichtbaar, maar je kan er wel aan.
Je zult idd met AddObject moeten werken, en je kan die integer naar een object casten.

code:
1
ComboBox.Items.AddObject (TObject(anInteger), "blaat");

Uit de losse pols, ik weet niet of de argumenten enzo in de goeie volgorde staan

https://fgheysels.github.io/


  • JozyDaPozy
  • Registratie: December 2002
  • Laatst online: 13-05 14:00
Schmoove --> lees de vraag nog eens goed..
BigC --> je kan het beste gewoon zelf een object maken dat een dochter is van een TObject, met als enige parameter een integer....

zoiets:
code:
1
2
3
4
  TMijnIndex = class(TObject)
  private
    idx : integer;
   end;

  • Schmoove
  • Registratie: Juli 2001
  • Laatst online: 27-05 22:53
Mijn excuus, je wilt het integer naast de string opslaan.... dan gaat mijn oplossing natuurlijk niet op.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
jozy2002 schreef op 27 januari 2004 @ 10:38:
Schmoove --> lees de vraag nog eens goed..
BigC --> je kan het beste gewoon zelf een object maken dat een dochter is van een TObject, met als enige parameter een integer....

zoiets:
code:
1
2
3
4
  TMijnIndex = class(TObject)
  private
    idx : integer;
   end;
Je kan die integer ook gewoon naar een TObject casten hoor.....
Het is pas als je meerdere gegevens naast die string wilt opslaan, dat het nodig is om een class te maken.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Bedankt voor de snelle en nuttige reacties.
Ik heb er nu voor gekozen om TStrings te gebruiken als object en deze met addObject toe te voegen.

Een integer casten naar een object snap ik trouwens niet. Want waar blijft de integer waarde dan? Aangezien TObject alleen maar methodes heeft en geen properties.

[ Voor 37% gewijzigd door Verwijderd op 27-01-2004 10:44 ]


  • JozyDaPozy
  • Registratie: December 2002
  • Laatst online: 13-05 14:00
Verwijderd schreef op 27 januari 2004 @ 10:43:
Bedankt voor de snelle en nuttige reacties.
Ik heb er nu voor gekozen om TStrings te gebruiken als object en deze met addObject toe te voegen.

Een integer casten naar een object snap ik trouwens niet. Want waar blijft de integer waarde dan? Aangezien TObject alleen maar methodes heeft en geen properties.
Een TObject kan wel properties hebben.. Zie mijn voorbeeld.. Maar die van whoami is natuurlijk het meest efficient..

TStrings gebruiken vind ik wel heel vies (lees: erg inefficient)

Verwijderd

Topicstarter
Ja owk als bij jou voorbeeld wel aangezien je een een subklasse aanmaakt.
Maar als je echt TObject(anInteger) doet, waar blijft de integer waarde dan?

En je hebt idd wel gelijk TStrings gebruiken geeft aardig wat overhead.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Die integer waarde zit dan als een TObject in die Object collectie.

Je kan 'm weer uitlezen door het betreffende TObject terug naar een Integer te casten.

code:
1
myInteger := Integer(MyComboBox.Items.Objects[1]);

oid.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Op die manier.
Bedankt voor het inzicht.

Ik heb wel aardig wat ervaring met "echte" OO talen als C++ en Java. Ik vind het vaak lastig met delphi om te begrijpen wat je echt doet en netjes te programmeren omdat borland delphi 7 als zoveel voor je doet.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Delphi is even OO als C++ hoor. Ik snap niet waarom je denkt dat Delphi minder OO zou zijn dan C++. (Zowel Object Pascal (Delphi) als C++ zijn zogenoemde hybride talen; talen waarin je zowel OO als procedureel in kunt programmeren).

https://fgheysels.github.io/


  • Monga
  • Registratie: Mei 2002
  • Laatst online: 27-05 22:02
Genoemde oplossing werkt omdat (zoals de tekst een beetje suggereert) een integer niet wordt gecast naar een TObject en vice versa, maar omdat het Objects veld een in weze een pointer opslaat. Een pointer kan naar van alles wijzen in het geheugen (niet alleen Objects, maar als je wilt ook records en simple types), maar is "gewoon" een getal met het geheugenadres van waar je naar wijst.
Zolang je niet te gek doet met je integers kan je dus een integer (getalswaarde) in een pointer stoppen (wederom getalswaarde). In delphi zijn ze allebei ook nog 32bit (wat wel fijn is ;) ), alleen is een integer signed.

Zomaar wat korte achtergrondinfo, voordat iedereen lukraak alles naar Objects gaat casten en terug (en vooral naar aanleiding op de vraag: waar blijft mn getal nu?).

  • ProgrammerX
  • Registratie: Juli 2002
  • Laatst online: 26-02-2021
whoami schreef op 27 januari 2004 @ 11:23:
Delphi is even OO als C++ hoor. Ik snap niet waarom je denkt dat Delphi minder OO zou zijn dan C++. (Zowel Object Pascal (Delphi) als C++ zijn zogenoemde hybride talen; talen waarin je zowel OO als procedureel in kunt programmeren).
Als je procedureel in C++ programmeert, wordt het dan niet gewoon C ? :)
Pagina: 1