Hallo Sebastian,
erstmal vorweg: herzlichen Gw zum Entscheid, Borland zu benutzen. Ich kenn sehr viele Borlander, die hochzufriedn mit der ganzen Produktserie sind. Hab erst letzte Woche so knapp 400 Stück davon getroffen…
Hallo zusammen,
ich möchte in einem Fenster zur Laufzeit ein Image platzieren
und dies später auch als Reaktion auf ein Klicken auf dieses
Image das Selbige verschieben. Ich weiß aber leider nicht wie
ich das anstellen soll. Hier meine Probleme im Detail:
1.) Deklaration des TImage
Ursprünglich hatte ich vor das Image wie folgt anzulegen:
void LegeImageAn()
{
TImage* ImageName=New TImage;
//Positionierung usw. des Fensters
};
Problem : Erstens: Der Compiler gibt mir eine Fehlermeldung
Zweitens:smiley:er angelegte Zeiger ist lokal, d.h.nach
Verlassen
der Funktion nicht mehr verfügbar
Ich habe mir überlegt, einen Vektor vom Variablentyp TImage
anzulegen. Was haltet Ihr davon???
HS: Gut ! Wenn Du die Fkt LegeImageAn() zur Methode in der Form machst, und dann ImageName ebenfalls als Varaible der Form , hat diese neue Image Gülitigkeit in allen Methoden der Form. Also in der Header Datei der Form (zb. Form1.hpp), in der Klassendeklaration, im private Teil reinschreiben:
TImage\* ImageName;
void LegeImageAn();
Deine Funktion heisst dann
void TForm1::LegeIamgeAn() //wird zur Methode in Form1
{
ImageName = new TImage(this);//der Konstruktor von TImage
//braucht this als Owner
}
2.) ImageEreignisse
Alle anzulegenden Images haben die selben Ereignissfunktionen,
d.h. wenn ich ein Image neu anlegen würde hätte dies ja zur
Folge, dass es nicht die selben Ereignisse hat. Theoretisch
müsste man also alle neu anzulegenden Images von einer
gemeinsamen Basisklasse vererben.
Jedoch legt die Entwicklungsumebung ja lediglich eine Instanz
von TImage innerhalb des Formulars an, d.h. das
OnImageClick-Ereigniss ist nicht eine Memberfunktion einer
Imageklasse, sondern die des entsprechenden Formulars.
HS:mmmhhhh. ich grübel noch, was du damit meinst. Entweder legst Du nur ein Image an, wie oben beschrieben. Dann kannst DU natürlich auch nur zu jedem Ereignis eine Funktion hinterlegen.
Wenns aber eine Art CAD werden soll, wirst Du wahrscheinlich mehrere Images gleichzeitig auf deinem Zeichenblatt haben wollen. Dann kannst Du natürlich jedem Image eine eigene Ereignisfunktion zuweisen, oder aber Du kannst in der Ereignisfunktion erkennen, welches Image gerade das Ereignis ausgelöst hat, und wendest die Funktion nur auf dieses an.
Beispiel:
- Du willst mit einem Click auf EIN Image die Farbe aller Images ändern - dann muss das OnClick Ereignis des geclickten Image alle anderen Images kennen
- Du willst per MouseDown-MouseMove-MouseUp ein einzelnes Image verschieben - Dann dürfen die 3 Funktionen der Ereignisse OnMouseDown,OnMouseMove,OnMouseUp nur auf das geclickte Iamge angewandt werden
Das Ganze soll mit BCB6 realisiert werden. Ich wäre sehr
dankbar, wenn Ihr eure Lösungsmöglichkeit an einem Beispiel
erläutern könntet, da die Fachsprach des ein oder anderen
Profies für mich oft ein Mysterium darstellst:smile:
HS: Wenn Du einverstaden bist, kann ich DIrs per email schicken. Gib Bescheid.
Danke im Voraus
Sebastian