Variable oder ähnliches zum Verfielfältigen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
alfredjack
Beiträge: 3
Registriert: Sa 23. Feb 2013, 23:59

Variable oder ähnliches zum Verfielfältigen

Beitrag von alfredjack »

Hi, ich bin wirkloich noch sehr unerfahren und habe folgenden Code, der auch funktioniert:

Code: Alles auswählen

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Shape1.brush.color=clWhite then
  if Spieler=true
           then   begin
                       Shape1.brush.color:=clgreen;
                       Spieler:=false;
                  end
 else             begin
                       Shape1.brush.color:=clred;
                       Spieler:=true;
 
                  end;
 
end;

Allerdings gibt es nicht nur Shape1 , sondern 869 weitere , für die ich nicht jedews einzeln schreiben möchte, sondern möglichst alle auf einmal.Kann mir jemand helfen ,wie das geht?

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Variable oder ähnliches zum Verfielfältigen

Beitrag von Bauer321 »

Ich weiß jetzt nicht ganz genau was du meinst. Aber wenn ich dich richtig verstanden habe würde ich das so machen:

Code: Alles auswählen

procedure TForm1.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Sender.brush.color=clWhite then
  if Spieler=true
           then   begin
                       Sender.brush.color:=clgreen;
                       Spieler:=false;
                  end
 else             begin
                       Sender.brush.color:=clred;
                       Spieler:=true;
 
                  end;
 
end;
und dann allen Shapes diese Prozedur "zuweisen"
Das sollte so gehen:
Shape1.MouseDown := @ShapeMouseDown;
Shape2.MouseDown := @ShapeMouseDown;
usw....
www.mcpatcher.net | www.hoeper.me

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

Re: Variable oder ähnliches zum Verfielfältigen

Beitrag von theo »

Bauer321 hat geschrieben: if Sender.brush.color=clWhite then
Naja, fast. Ein TObject hat aber keinen Brush, also muss man typecasten.

if TShape(Sender).Brush.....

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Variable oder ähnliches zum Verfielfältigen

Beitrag von Bauer321 »

Danke für den Hinweis, ich habs vorher nicht getestet und noch nicht allzu oft verwendet.
www.mcpatcher.net | www.hoeper.me

alfredjack
Beiträge: 3
Registriert: Sa 23. Feb 2013, 23:59

Re: Variable oder ähnliches zum Verfielfältigen

Beitrag von alfredjack »

Vielen lieben Dank, ich glaube ich bin der Sache jetzt schon deutlich näher, aber jetzt habe ich folgendes Problem:
Das hier habe ich bei type , also der Definition oben im Quellcode:

Code: Alles auswählen

 procedure FormCreate(Sender: TObject);
    procedure ShapeMouseDown(Sender: TObject; Button: TMouseButton;
              Shift: TShiftState; X, Y: Integer);

ebenso dies:

Code: Alles auswählen

 
    Shape1: TShape;
    Shape10: TShape;
    Shape100: TShape;
....
....
    Shape98: TShape;
    Shape99: TShape;
Dann kommt unter implementation das :

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  Spieler:=true;
end;
 
procedure TForm1.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if TShape(Sender).brush.color=clWhite then
  if Spieler=true
           then   begin
                       TShape(Sender).brush.color:=clgreen;
                       Spieler:=false;
                  end
 else             begin
                       TShape(Sender).brush.color:=clred;
                       Spieler:=true;
 
                  end;
 
end;
 
    begin
    Shape2.MouseDown:= @ShapeMouseDown ;
    Shape3.MouseDown:= @ShapeMouseDown  ;
    Shape4.MouseDown:= @ShapeMouseDown   ;
    Shape5.MouseDown:= @ShapeMouseDown   ;
    Shape6.MouseDown:= @ShapeMouseDown  ;
    Shape7.MouseDown:= @ShapeMouseDown  ;
    Shape8.MouseDown:= @ShapeMouseDown ;
    Shape9.MouseDown:= @ShapeMouseDown ;
    Shape10.MouseDown:= @ShapeMouseDown  ;
    Shape11.MouseDown:= @ShapeMouseDown ;
    Shape12.MouseDown:= @ShapeMouseDown ;
    Shape13.MouseDown:= @ShapeMouseDown  ;
    Shape14.MouseDown:= @ShapeMouseDown ;
    Shape15.MouseDown:= @ShapeMouseDown ;
    Shape16.MouseDown:= @ShapeMouseDown ;  
Aber es kommen diese Fehlermeldungen :


unit1.pas(887,47) Hint: Parameter "Button" not used
unit1.pas(888,15) Hint: Parameter "Shift" not used
unit1.pas(888,35) Hint: Parameter "X" not used
unit1.pas(888,38) Hint: Parameter "Y" not used
unit1.pas(938,11) Error: Identifier not found "Shape2"
unit1.pas(938,40) Error: Identifier not found "ShapeMouseDown"
unit1.pas(939,11) Error: Identifier not found "Shape3"
unit1.pas(939,41) Error: Identifier not found "ShapeMouseDown"
unit1.pas(940,11) Error: Identifier not found "Shape4"
unit1.pas(940,42) Error: Identifier not found "ShapeMouseDown"
unit1.pas(941,11) Error: Identifier not found "Shape5"
unit1.pas(941,42) Error: Identifier not found "ShapeMouseDown"
unit1.pas(942,11) Error: Identifier not found "Shape6"
unit1.pas(942,41) Error: Identifier not found "ShapeMouseDown"
unit1.pas(943,11) Error: Identifier not found "Shape7"
unit1.pas(943,41) Error: Identifier not found "ShapeMouseDown"
unit1.pas(944,11) Error: Identifier not found "Shape8"
unit1.pas(944,40) Error: Identifier not found "ShapeMouseDown"
unit1.pas(945,11) Error: Identifier not found "Shape9"
unit1.pas(945,40) Error: Identifier not found "ShapeMouseDown"
unit1.pas(946,12) Error: Identifier not found "Shape10"
unit1.pas(946,42) Error: Identifier not found "ShapeMouseDown"
unit1.pas(947,12) Error: Identifier not found "Shape11"
unit1.pas(947,41) Error: Identifier not found "ShapeMouseDown"
unit1.pas(948,12) Error: Identifier not found "Shape12"
unit1.pas(948,41) Error: Identifier not found "ShapeMouseDown"
unit1.pas(949,12) Error: Identifier not found "Shape13"
unit1.pas(949,42) Error: Identifier not found "ShapeMouseDown"
unit1.pas(950,12) Error: Identifier not found "Shape14"
unit1.pas(950,41) Error: Identifier not found "ShapeMouseDown"
unit1.pas(951,12) Error: Identifier not found "Shape15"
unit1.pas(951,41) Error: Identifier not found "ShapeMouseDown"
unit1.pas(952,12) Error: Identifier not found "Shape16"
unit1.pas(952,41) Error: Identifier not found "ShapeMouseDown"
unit1.pas(964) Fatal: There were 30 errors compiling module, stopping




Ich weiß nicht warum , weil sie ja an sich alle deklariert sind oben, oder?

Es wäre furchtbar nett, wenn mir einer von eich helfen könnte

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

Re: Variable oder ähnliches zum Verfielfältigen

Beitrag von theo »

Der ganze Block muss in TForm1.FormCreate rein

Code: Alles auswählen

 Shape2.MouseDown:= @ShapeMouseDown ;
 Shape3.MouseDown:= @ShapeMouseDown  ;
 Shape4.MouseDown:= @ShapeMouseDown   ;
...
und nicht irgendwo in der Unit herumdümpeln.

alfredjack
Beiträge: 3
Registriert: Sa 23. Feb 2013, 23:59

Re: Variable oder ähnliches zum Verfielfältigen

Beitrag von alfredjack »

Danke für die schnelle Hilfe, aber jetzt kommt folgende Meldung :

unit1.pas(918,12) Error: identifier idents no member "MouseDown"

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

Re: Variable oder ähnliches zum Verfielfältigen

Beitrag von theo »

alfredjack hat geschrieben:Danke für die schnelle Hilfe, aber jetzt kommt folgende Meldung :

unit1.pas(918,12) Error: identifier idents no member "MouseDown"

Ja, ist ein Fehler von Bauer. Sollte OnMouseDown heissen.

Antworten