Automatischer Klick C++

Hallo zusammen,

ich muss für mein Studium z.Zt. ein Programm schreiben und stoße dabei auf 2 Probleme:

  1. Kann ich ein Button bzw. bei mir ein Label aktivieren ohne zur Laufzeit auf es zu Klicken? Wenn ja wie?
    Ich will also quasi das aktive klicken durch einen einfachen Befehl simulieren…

  2. Wie gelange ich zum Konstruktor meiner Form (VCL) zurück?
    Ich bin am Ende meines Spiels (ja, ich programmiere ein Spiel…) angekommen und möchte nun quasi zurück in das Hauptmenü. Dieses bastel ich mir im Konstruktor zurecht und setzte dort auch meine defaultWerte über einen weiteren Konstruktoraufruf… Deshalb die oben genannte Frage…

Würde mich über schnelle Antworten freuen…

Gruß

Johannes

Was ich noch sagen will… (zu Punkt 1)

Ich will ja eigentlich nur eine Funktion aufrufen… Zum Beispiel diese hier…:

void __fastcall TForm1::BtnSpeichernClick(TObject *Sender)

Das mache ich dann ja über

this->BtnSpeichernClick(//JETZT IST DIE FRAGE WAS HIER REIN KOMMT);

das ganze muss vom typ TObject *Sender sein…

nur kann ich damit nichts anfangen…

Bitte helft mir… ich verzweifele…

Sooo…

Problem 1 ist gelöst… man muss für dieses TObject *Sender einfach den Namen der Form hinschreiben… also in meinem Falle muss in die Klammern einfach Form1.

Leider kann ich so nicht/ weiß ich nicht wie den Konstruktor der Form aufrufen…

Da benötige ich immer noch Hilfe…

Hallo Johannes,

  1. Wie gelange ich zum Konstruktor meiner Form (VCL) zurück?
    Ich bin am Ende meines Spiels (ja, ich programmiere ein
    Spiel…) angekommen und möchte nun quasi zurück in das
    Hauptmenü. Dieses bastel ich mir im Konstruktor zurecht und
    setzte dort auch meine defaultWerte über einen weiteren
    Konstruktoraufruf… Deshalb die oben genannte Frage…

Ein Konstruktor ist doch eine Methode, die man später auch nochmals aufrufen kann (normaler Methodenaufruf). Falls das nicht geht, dann lagere die Anweisungen aus dem Konstruktor in eine Methode aus, die du nochmals aufrufen kannst. Irgendwie tue ich mich aber mit dem Gedanken schwer, das wieder aufzurufen… Ich habe meine einfachen Spiele bisher in etwa so gemacht.

fiktiver Code:

//Programmeinstieg
Main(){

bool menu = true;
while(menu){

bool spiel = false;

key eingabe = Read.Key();

switch(eingabe){
case „j“:
spiel = true;
break;
case „n“:
default:
spiel = false;
break;
}

while(spiel){

//es wird gespielt

}
}

}

Grüße Roman

Hallo!
Sender ist eben der Absender, der das Event auslöst. Wird der Event durch tatsächliches Klicken auf den Button ausgelöst, wirst Du eine Referenz auf den Button selbst als Sender bekommen.
Wenn Du den Eventhandler selbst manuell aufrufst, musst Du berücksichtigen, ob im Eventhandler selbst der Sender überhaupt verwendet wird.
Wenn er eh’ nicht verwendet wird, ist es egal, was Du übergibst (auch NULL).
Oft wird aber im Eventhandler-Code davon ausgegangen, dass das Ereignis auch tatsächlich von dem Steuerelement ausgelöst wird und der Sender auf den Typ des Steuerelements gecastet, um weitere Eigenschaften des Steuerelements abzurufen.
Wenn Du dann wie in Deinem Beispiel einen Verweis auf Deine Form übergibst, wird sich das nicht auf Button casten lassen.

Aber wie gesagt - es hängt alles davon ab, ob der Sender überhaupt im Eventhandler verwendet wird.

Für Dein anderes Problem: Lagere die Initialisierung in eine separate Methode aus, die Du dann aus dem Konstruktor aufrufst.
Beim Zurücksetzen am Ende des Spiels kannst Du dann die ausgelagerte Methode auch wieder aufrufen, ohne den Konstruktor nochmal durchlaufen zu müssen.
Der Konstruktor ist eben dazu da, das Objekt erstmalig anzulegen und für nichts anderes.

Gruß,
Martin

Vielen Dank euch allen,

ich habe eure Tipps befolgt und siehe da… es funktioniert!

DANKE DANKE DANKE…

Grüße

Johannes