Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Prozedur in einer Prozedur starten (https://www.delphipraxis.net/85548-prozedur-einer-prozedur-starten.html)

KesseK 1. Feb 2007 12:36


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

Luckie 1. Feb 2007 12:40

Re: Prozedur in einer Prozedur starten
 
So:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  ShowMessage('');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button2.Click;
end;
Aber ich würde empfehlen den Code in eine separate Prozedur / Methode auszulagern und diese von beiden Methode aus aufrufen.

Andidreas 1. Feb 2007 12:41

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:
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;
edit:
mist luckie war mal wieder schneller und ich hatte nen punkt vergessen :drunken:

KesseK 1. Feb 2007 12:50

Re: Prozedur in einer Prozedur starten
 
Zitat:

Zitat von Andidreas
aloha in der dp

probiers mal so, so sollte es gehen wenn ich gerade keinen denkfehler gemacht hab ;)

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
      StrButton.Click(Sender: TObject);
    end;
end;
edit:
mist luckie war mal wieder schneller und ich hatte nen punkt vergessen :drunken:

Wenn ich das "StrButton.Click(Sender: TObject);" einsetz dann bekomme ich folgenden Fehler:
[Fehler]Projekt.pas(63):Zu viele Parameter

Was mach ich falsch? :gruebel:

Luckie 1. Feb 2007 12:52

Re: Prozedur in einer Prozedur starten
 
Zitat:

Zitat von KesseK
Was mach ich falsch? :gruebel:

Du benutzt nicht meine Lösung. :zwinker: :mrgreen:

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.

KesseK 1. Feb 2007 12:54

Re: Prozedur in einer Prozedur starten
 
Zitat:

Zitat von Luckie
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.

Ah ich hab mal wieder alles übersehen, kommt von der Hektik. Danke Luckie, klappt alles :D :thumb:

mo_greene 10. Feb 2007 14:42

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!

Die Muhkuh 10. Feb 2007 14:48

Re: Prozedur in einer Prozedur starten
 
Delphi-Quellcode:
FormCreate(Self);

mo_greene 10. Feb 2007 14:50

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:

Martin K 10. Feb 2007 15:02

Re: Prozedur in einer Prozedur starten
 
Steht doch da, woran es liegt:
Zitat:

'Ein deaktiviertes oder unsichtbares Fenster kann nicht den Fokus erhalten'.
:roll:

mo_greene 10. Feb 2007 15:09

Re: Prozedur in einer Prozedur starten
 
leider komme ich mit dieser Antwort nicht zur Lösung meines Problems... :cry:

Martin K 10. Feb 2007 15:16

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...

mo_greene 10. Feb 2007 15:20

Re: Prozedur in einer Prozedur starten
 
Delphi-Quellcode:
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.
Wäre nett wenn mir jemand sagen könnte was ich falsch mache :oops: :cry:

Dani 10. Feb 2007 15:29

Re: Prozedur in einer Prozedur starten
 
Delphi-Quellcode:
Form1.ActiveControl := Produkt;
Das verursacht den Fehler, da das Formular in FormCreate (beim ersten Aufruf) nicht sichtbar ist.
[Falls du an einer eleganten Methode für deinen 5-Sekunden Timeout interessiert bist, zieh dir mal die Dokumentation vom Typ TDateTime rein ;)]

mo_greene 10. Feb 2007 15:38

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:
a := random [10];
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...

woran liegt das?

Dani 10. Feb 2007 15:40

Re: Prozedur in einer Prozedur starten
 
Du musst den Zufallsgenerator initialisieren mit Randomize() (aber nur genau einmal)

mo_greene 10. Feb 2007 15:46

Re: Prozedur in einer Prozedur starten
 
an welcher stelle und wie sieht diese prozedur aus??

Die Muhkuh 10. Feb 2007 15:51

Re: Prozedur in einer Prozedur starten
 
Hier im Forum suchenRandomize << guckst Du ;)

mo_greene 10. Feb 2007 15:54

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