![]() |
Prozedur in einer Prozedur starten
Hey :P
ich habe noch nicht so viel Ahnung von Delphi (3 Wochen), deswegen möcht ich gerne wissen wie ich eine Prozedur aus einer anderen heraus starten kann.
Delphi-Quellcode:
procedure TForm1.onkeypress(Sender: TObject; var Key: Char);
begin if not (key in[#8,#13,#49..#58]) then key := #0; //Eingabe auf Ziffern beschränken if key in [#13] then begin // hier soll die Prozedur: procedure TForm1.StrButtonClick(Sender: TObject); gestartet werden end; end; Danke! :D |
Re: Prozedur in einer Prozedur starten
So:
Delphi-Quellcode:
Aber ich würde empfehlen den Code in eine separate Prozedur / Methode auszulagern und diese von beiden Methode aus aufrufen.
procedure TForm1.Button2Click(Sender: TObject);
begin ShowMessage(''); end; procedure TForm1.Button1Click(Sender: TObject); begin Button2.Click; end; |
Re: Prozedur in einer Prozedur starten
aloha in der dp
probiers mal so, so sollte es gehen wenn ich gerade keinen denkfehler gemacht hab ;)
Delphi-Quellcode:
edit:
procedure TForm1.onkeypress(Sender: TObject; var Key: Char);
begin if not (key in[#8,#13,#49..#58]) then key := #0; //Eingabe auf Ziffern beschränken if key in [#13] then begin StrButton.Click(Sender: TObject); end; end; mist luckie war mal wieder schneller und ich hatte nen punkt vergessen :drunken: |
Re: Prozedur in einer Prozedur starten
Zitat:
[Fehler]Projekt.pas(63):Zu viele Parameter Was mach ich falsch? :gruebel: |
Re: Prozedur in einer Prozedur starten
Zitat:
Bei einem Prozeduraufruf werden die Werte der Paramter übergeben und nicht die Paramter mit Datentyp deklariert. Sollte man aber eigentlich sofort sehen - auch als Anfänger. |
Re: Prozedur in einer Prozedur starten
Zitat:
|
Re: Prozedur in einer Prozedur starten
wie mach ich das, wenn ich die FormCreate-Prozedur aufrufen will? Ich möchte das genauso machen wie der Threadstarter es haben will!
|
Re: Prozedur in einer Prozedur starten
Delphi-Quellcode:
FormCreate(Self);
|
Re: Prozedur in einer Prozedur starten
da bekomme ich leider die Fehlermeldung
--------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project1.exe ist eine Exception der Klasse EInvalidOperation aufgetreten. Meldung: 'Ein deaktiviertes oder unsichtbares Fenster kann nicht den Fokus erhalten'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. --------------------------- OK Hilfe --------------------------- :gruebel: :gruebel: |
Re: Prozedur in einer Prozedur starten
Steht doch da, woran es liegt:
Zitat:
|
Re: Prozedur in einer Prozedur starten
leider komme ich mit dieser Antwort nicht zur Lösung meines Problems... :cry:
|
Re: Prozedur in einer Prozedur starten
Du wirst wohl in FormCreate irgendeiner Komponente den Fokus geben wollen, wobei die Komponente in FormCreate noch nicht sichtbar ist.
Irgendetwas in der Art wird es wohl sein, aber ohne Code kann ich dir auch nicht mehr sagen... |
Re: Prozedur in einer Prozedur starten
Delphi-Quellcode:
Wäre nett wenn mir jemand sagen könnte was ich falsch mache :oops: :cry:
var
Form1: TForm1; a, b, c, richtig, falsch : integer; clo : boolean; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Form1.ActiveControl := Produkt; Label1.Caption := '00:00:05'; //hier scheint der Fehler zu sein, da Delphi hierhin springt, nachdem ich bei der Fehlermeldung auf Okay geklickt habe a := random (10); b := random (10); Faktor1.Text := inttostr(a); Faktor2.Text := inttostr(b); clo := false; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Caption := TimeToStr(StrToTime(Label1.Caption)-0.000001); if Label1.Caption = '00:00:00' then begin Edit3.Text := 'Game Over'; Produkt.Visible := false; Button2.Visible := true; Button1.Visible := false; end; end; procedure TForm1.Button1Click(Sender: TObject); begin c := strtoint(Produkt.Text); if a * b = c then begin Edit3.Text := 'Richtig'; Application.ProcessMessages; sleep(1000); Edit3.Clear; a := random (10); b := random (10); Faktor1.Text := inttostr(a); Faktor2.Text := inttostr(b); Produkt.Clear; Label1.Caption := '00:00:05'; Form1.ActiveControl := Produkt; inc(richtig); Edit4.Text:=inttostr(richtig); end else begin Edit3.Text := 'Falsch'; Application.ProcessMessages; sleep(1000); Edit3.Clear; a := random (10); b := random (10); Faktor1.Text := inttostr(a); Faktor2.Text := inttostr(b); Produkt.Clear; Label1.Caption := '00:00:05'; Form1.ActiveControl := Produkt; inc(falsch); Edit5.Text:=inttostr(falsch); end; end; procedure TForm1.Button3Click(Sender: TObject); begin if clo = false then begin Timer1.Enabled := false; Faktor1.Clear; Faktor2.Clear; Produkt.Visible := false; Button2.Visible := true; Button1.Visible := false; clo := true; Button3.Caption := 'Schliessen'; end else begin close; end; end; procedure TForm1.Button2Click(Sender: TObject); //nachdem diese Prozedur aufgerufen wurde, erscheint der Fehler begin FormCreate(Self); end; end. |
Re: Prozedur in einer Prozedur starten
Delphi-Quellcode:
Das verursacht den Fehler, da das Formular in FormCreate (beim ersten Aufruf) nicht sichtbar ist.
Form1.ActiveControl := Produkt;
[Falls du an einer eleganten Methode für deinen 5-Sekunden Timeout interessiert bist, zieh dir mal die Dokumentation vom Typ TDateTime rein ;)] |
Re: Prozedur in einer Prozedur starten
okay vielen dank :-D ...
nochmal ne grundsätzlichere frage: wenn ich einer variablen einen zufälligen wert zuweise
Delphi-Quellcode:
warum ist es dann so, dass die "zufälligen" Zahlen immer die gleiche Reihenfolge haben, nach Programmstart? Bei meinem Programm wo ich den Code geposted habe, wird der variablen z.b. immer eine 0 zugefügt, als nächstes eine 5, dann eine 2 etc...
a := random [10];
woran liegt das? |
Re: Prozedur in einer Prozedur starten
Du musst den Zufallsgenerator initialisieren mit Randomize() (aber nur genau einmal)
|
Re: Prozedur in einer Prozedur starten
an welcher stelle und wie sieht diese prozedur aus??
|
Re: Prozedur in einer Prozedur starten
![]() |
Re: Prozedur in einer Prozedur starten
vielen Dank :-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz