Toon posts:

[C++/BCB] Objecten dynamisch aanroepen *

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

Verwijderd

Topicstarter
Neem de volgende PHP code:

PHP:
1
2
3
4
$test1 = "Fisico!";
$q = 1;

echo ${"test". $q};      // Fisico!


In C++ heb ik nu 12 images op mijn Form staan met de namen p1, p2, ... p12. Deze objecten wil ik op een soortgelijke manieren benaderen, maar hoe doe je dat?

[ Voor 6% gewijzigd door Verwijderd op 05-11-2003 22:32 ]


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op de zelfde manier als het eigenlijk in PHP zou moeten: met arrays. Bij jouw voorbeeld:
PHP:
1
2
3
4
$test = array("Fisico!", "...", "etc");
$q = 0; // zero-based

echo $array[$q];

Hoe het in C++ moet moet je zelf maar ff opzoeken, maar het is nogal basiskennis.

[ Voor 11% gewijzigd door marcusk op 05-11-2003 22:46 ]


  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 30-07 16:33
Borland VCL vraag dus. Volgens mij zoiets als FindComponent, zie de help

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Als je bedoelt met Form dat je bezig bent met Borland's TForm's in C++ Builder, dan zou je inderdaad kunnen werken met FindComponent:
code:
1
TComponent* __fastcall FindComponent(const AnsiString AName);


Echter het is ordelijker om gewoon gelijkende componenten te groeperen, zodat je ze kunt itererend kunt benaderen. Dit is bijvoorbeeld mogelijk met een std::Vector, waarbij je de elementen opslaat op een array achtige wijze.
Je kunt ook kiezen voor een std::Map, waarbij je de waardes opslaat als key-value pair

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Je kan ook door de Controls collection van je Form kunnen loopen, en dan iedere keer checken of de huidige Control een TImage is, en zoja, dan test je op de naam.

Maar de oplossing van Glimi met de Vector (TObjectList) of de array is toch netter.

Je kan ook de controls dynamisch aanmaken, maar of dat geschikt is voor jouw oplossing weet ik niet, aangezien je toch een beetje te weinig info geeft daarover.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Glimi schreef op 06 november 2003 @ 08:28:
Als je bedoelt met Form dat je bezig bent met Borland's TForm's in C++ Builder, dan zou je inderdaad kunnen werken met FindComponent:
code:
1
TComponent* __fastcall FindComponent(const AnsiString AName);


Echter het is ordelijker om gewoon gelijkende componenten te groeperen, zodat je ze kunt itererend kunt benaderen. Dit is bijvoorbeeld mogelijk met een std::Vector, waarbij je de elementen opslaat op een array achtige wijze.
Je kunt ook kiezen voor een std::Map, waarbij je de waardes opslaat als key-value pair
Inderdaad een TForm. Op zich een prima oplossing, maar kan het niet sneller? Ik weet de naam, maar ik weet alleen niet hoe ik deze op het scherm tover.

Verwijderd

Topicstarter
marcusk schreef op 05 november 2003 @ 22:44:
Op de zelfde manier als het eigenlijk in PHP zou moeten: met arrays. Bij jouw voorbeeld:
PHP:
1
2
3
4
$test = array("Fisico!", "...", "etc");
$q = 0; // zero-based

echo $array[$q];

Hoe het in C++ moet moet je zelf maar ff opzoeken, maar het is nogal basiskennis.
Aan deze oplossing heb ik ook gedacht en kwam net zo ver als jij hierboven aangeeft. Hoe de variabele hierna te 'evaluaten' zodat ik het bedoelde object benader? Sorry, maar ik kan het nergens vinden.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 06 november 2003 @ 11:11:
[...]


Aan deze oplossing heb ik ook gedacht en kwam net zo ver als jij hierboven aangeeft. Hoe de variabele hierna te 'evaluaten' zodat ik het bedoelde object benader? Sorry, maar ik kan het nergens vinden.
Je maakt een array aan, van de classe van je object. array[0] geeft dus een daadwerkelijke instantie van die classe aan. Array[0].MethodHier o.i.d. zal dan gewoon werken.

Maar beter zou zijn, zoals al gezegd, om een Vector<> of een TObjectList hiervoor te gebruiken.

offtopic:
Is dit niet een heel erg klein beetje basic? ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1