Entwickler-Ecke

Sonstiges (Delphi) - Shape erstellen + OnClick Prozedure ????


FaFu - Do 20.11.08 16:30
Titel: Shape erstellen + OnClick Prozedure ????
Hallo,

Ich würde gerne ein Shape erstellen und diesem Shape eine OnClickProzedur zuweisen oder OnMouseDown , halt was womit man was auslösen kann, wenn ich daraufklicke.

Und zwar hab ich um die 20 Shapes die mit der Laufzeit über BlaShape[i] := TShape.Create(Self) gemacht werden usw. was auch funktioniert. Nun will ich, dass jedem dieser Shapes für i := 1 to 20 eine Prozedur zugewiesen wird die nur ausgelöst wird wenn ich auf das Shape klicke. Ich würde das ganze gerne ohne Hook machen also nur mit bereits in Delphi vorhandenen Befehlen.
Kann einer helfen?

mfG


FaFu - Do 20.11.08 16:32
Titel: Re: Shape erstellen + OnClick Prozedure ????
Eigentlich ist die procedure ja schon vorhanden, nur weiß ich nicht wie ich sie ändern kann. . .


JayEff - Do 20.11.08 16:34


Delphi-Quelltext
1:
BlaShape[i].onMouseDown := SomeProcedure                    


Hierbei muss SomeProcedure auch mit onMouseDown kompatibel sein, sprich den gleichen Kopf haben.

PS: Doppelposts bitte durch den Editbutton vermeiden :)

Edit: Ausserdem muss die Prozedur eine Methode sein, das erreichst du ganz einfach indem du sie z.B. deiner Form gibst:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Shape1: TShape;
    procedure Button1Click(Sender: TObject);
    procedure test(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
{.......}

procedure TForm1.test (Blah wie oben);
begin
//...
end;


FaFu - Do 20.11.08 16:56

Na ja das Problem ist, dass wenn ich Array benutze ich ja [] benutze und das funktioniert dann nicht, wenn ich BlaShape[i]OnMouseDown benutze . . .


JayEff - Do 20.11.08 16:59

user profile iconFaFu hat folgendes geschrieben Zum zitierten Posting springen:
Na ja das Problem ist, dass wenn ich Array benutze ich ja [] benutze und das funktioniert dann nicht, wenn ich BlaShape[i]OnMouseDown benutze . . .

hast du den Punkt zwischen ] und O nun auf Grund eines Tippfehlers vergessen? Falls ja, sag bitte, was *genau* nicht funktioniert (Fehlermeldung?). Falls nein, Punkt rein und das geht :)

Edit: Falls ja: bitte auch Code posten zwecks fehleranalyse.


FaFu - Do 20.11.08 17:47


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
type
  TForm1 = class(TForm)
    WeissBtn: TButton;
    Timer1: TTimer;
    SchwarzBtn: TButton;
    Timer2: TTimer;
    BotBtn: TButton;
    SpielerBtn: TButton;
    Image1: TImage;
    Timer3: TTimer;
    procedure WeissBtnClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure SchwarzBtnClick(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure SpielerBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
     procedure test(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i, k, xy: Integer;
  p: TPoint;
  Weiss: Array [0..899of TShape;
  Schwarz: Array [0..899of TShape;
implementation

{$R *.dfm}

procedure TForm1.WeissBtnClick(Sender: TObject);
begin
    GetCursorPos(p);
    SetCursorPos(200,200);
    i := i + 1;
    Weiss[i] := TShape.Create(Self);
    Weiss[i].Parent := Self;
    Weiss[i].Left := 205;
    Weiss[i].Top :=  185;
    Weiss[i].Width := 33;
    Weiss[i].Height := 33;
    Weiss[i].Shape := stCircle;
    Weiss[i].Brush.Color := clWhite;
    Weiss[i].Brush.Style := bssolid;
    Weiss[i].OnMouseDown := Test;
    Timer1.Enabled := true;
    WeissBtn.Hide;
end;
procedure Form1.Test(Sender: TObject; Button: TMouseButton;  // Hier ist der erste Error, nach Form1.
      Shift: TShiftState; X, Y: Integer);
begin
  Close;                                                          //Hier ist der 2. Error nach Close;
end;



Das ganze sieht nun so Aus ^^

Das funktioniert nicht ^^ also beim starten kommt folgende Fehlermeldung:
[Error] Informatik.pas(60): Identifier redeclared: 'Form1'
[Error] Informatik.pas(63): '(' expected but ';' found


JayEff - Do 20.11.08 18:01

user profile iconFaFu hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Test(Sender: TObject; Button: TMouseButton;  // Hier ist der erste Error, nach Form1.
      Shift: TShiftState; X, Y: Integer);
begin
  Close;                                                          //Hier ist der 2. Error nach Close;
end;


TForm, nicht Form :)


FaFu - Do 20.11.08 18:04

Danke ! ! ! ! ! ! ! ! !

Oh man bin ich schusselig ^^ Vielen Dank für die Zeit, die du dir genommen hast :P


MfG


JayEff - Do 20.11.08 18:09

Kein problem, immer gerne ;)