Procedure zum verwenden der Button

Für Fragen rund um die Ide und zum Debugger
Antworten
JonathanH3
Beiträge: 5
Registriert: Mi 23. Jun 2010, 11:07

Procedure zum verwenden der Button

Beitrag von JonathanH3 »

Hey Leute, bin ganz neu hier in Lazarus, und irgendwie fehlt mir gerade wieder mal der Durchblick ... . Ich möchte eine procedure schreiben, die sich auf die buttons aus dem oben declarierten type beziehen ..., allerdings weiß ich nicht so die hin soll und was man noch an sie ran hängen muss ...

Hier mal ein Teil des Codes ...

unit Unit1;



{$mode objfpc}{$H+}



interface



uses

Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,

StdCtrls;



type



{ TForm1 }



TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

Button6: TButton;

Button7: TButton;

Button8: TButton;

Button9: TButton;

Label1: TLabel;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure Button8Click(Sender: TObject);

procedure Button9Click(Sender: TObject);

procedure Label1Click(Sender: TObject);

private

{ private declarations }

public

{ public declarations }

end;

var

Form1: TForm1;

i : integer;
a : char;

implementation

procedure spielen;

begin
if i mod 2 = 0 then

begin
a := '0';
end
else
begin
a := 'X';
end;
i := i+1;
end;

{ TForm1 }


procedure TForm1.Button1Click(Sender: TObject);

begin
spielen;
button1.caption := a;
button1.font.size := 50;
if (button1.caption = button2.caption) and (button2.caption = button3.caption) or
(button4.caption = button5.caption) and (button5.caption = button6.caption) or
(button7.caption = button8.caption) and (button8.caption = button9.caption) or
(button1.caption = button4.caption) and (button4.caption = button7.caption) or
(button2.caption = button5.caption) and (button5.caption = button8.caption) or
(button3.caption = button6.caption) and (button6.caption = button9.caption) or
(button1.caption = button5.caption) and (button5.caption = button9.caption) or
(button3.caption = button5.caption) and (button5.caption = button7.caption) then

begin

if i mod 2 = 1 then

begin

showmessage('Spieler 0 hat gewonnen, Herzlichen Glückwunsch!');
end
else
begin
showmessage('Spieler X hat gewonnen, Herzichen Glückwunsch!');
end;
halt;
end;
end;



procedure TForm1.Button2Click(Sender: TObject);

begin
spielen;
button2.caption := a;
button2.font.size := 50;
if (button1.caption = button2.caption) and (button2.caption = button3.caption) or
(button4.caption = button5.caption) and (button5.caption = button6.caption) or
(button7.caption = button8.caption) and (button8.caption = button9.caption) or
(button1.caption = button4.caption) and (button4.caption = button7.caption) or
(button2.caption = button5.caption) and (button5.caption = button8.caption) or
(button3.caption = button6.caption) and (button6.caption = button9.caption) or
(button1.caption = button5.caption) and (button5.caption = button9.caption) or
(button3.caption = button5.caption) and (button5.caption = button7.caption) then
begin

if i mod 2 = 1 then

begin
showmessage('Spieler 0 hat gewonnen, Herzlichen Glückwunsch!');
end
else
begin
showmessage('Spieler X hat gewonnen, Herzichen Glückwunsch!');
end;
halt;
end;
end;



Wie schon gleich auffält habe ich zwei mal den gleichen code in zwei verschiedenen proceduren verwendet ..., ich möchte eine procedure schreiben, wo der reinkommt...

Über eine hilfreiche Antwort würde ich mich sehr freuen :)

Jonathan

Benutzeravatar
theo
Beiträge: 10998
Registriert: Mo 11. Sep 2006, 19:01

Re: Procedure zum verwenden der Button

Beitrag von theo »

Im Prinzip brauchst du nur eine Methode. Du kannst dann den auslösenden Button über den Sender Parameter indentifizieren.

TButton(Sender).Caption:=a;

Du kannst im Objekt-Inspektor die bereits vorhandene Methode für alle Buttons auswählen.

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Procedure zum verwenden der Button

Beitrag von Hitman »

Weis doch einfach beiden Buttons die selbe OnClick Methode zu - dafür hat man dort ja die Drop-Down Auswahl ;-)

JonathanH3
Beiträge: 5
Registriert: Mi 23. Jun 2010, 11:07

Re: Procedure zum verwenden der Button

Beitrag von JonathanH3 »

Vielen Dank für die schnelle Antwort, probiere ich gleich mal aus ...

JonathanH3
Beiträge: 5
Registriert: Mi 23. Jun 2010, 11:07

Re: Procedure zum verwenden der Button

Beitrag von JonathanH3 »

Noch ne kleine frage :D

Wie heißt denn dann die procedure, die bei jedem Button aufgerufen wird ?

procedure Buttonclick(Sender:TObject);

?
Das wird es wohl nicht sein, oder?

Benutzeravatar
theo
Beiträge: 10998
Registriert: Mo 11. Sep 2006, 19:01

Re: Procedure zum verwenden der Button

Beitrag von theo »

?
Nimm einfach die erste die erstellt wird für alle anderen auch. Also z.B.
procedure TForm1.Button1Click(Sender: TObject);

JonathanH3
Beiträge: 5
Registriert: Mi 23. Jun 2010, 11:07

Re: Procedure zum verwenden der Button

Beitrag von JonathanH3 »

aber die wird doch nur gestartet, wenn ich auf button1 klicke ..., aber ich habe (im endefekt) sogar 9 buttons ...

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Procedure zum verwenden der Button

Beitrag von Hitman »

Darum sollst du ja im Object Inspector der anderen Buttons, unter Events ihnen jeweils das gleiche OnClick Event zuweisen ;)

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Procedure zum verwenden der Button

Beitrag von Teekeks »

Nur damit du es weißt:
Der name einer Procedure sagt nicht zwangläufig welchem Knopf diese dann auch angehört.
Die kann also auch "procedure Form1.Hallo(Sender:TObject);" heißen...

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Procedure zum verwenden der Button

Beitrag von pluto »

Kleiner Tipp: Wenn du einen Code Postest umfasse ihn bitte mit den dafür vorgesenden BB-Code-Tags. Dann können wir ihn besser lesen und es sieht schöner aus.

Wenn du nicht weiß was ich meine:
Wenn du einen Beitrag schreibst, siehst du oberhalb des "Beitrags-Editors" eine leiste. Dort solltest du eine ComboBox finden, die den "Text" Highligter hat. Da wählst du in deinem Fall FreePascal/Lazarus aus.
MFG
Michael Springwald

JonathanH3
Beiträge: 5
Registriert: Mi 23. Jun 2010, 11:07

Re: Procedure zum verwenden der Button

Beitrag von JonathanH3 »

auf jedenfall funktioniert es jetzt einwandfrei ;D

vielen Dank für eure Bemühungen ...

Antworten