Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Prozedur eines anderen Type aufrufen (https://www.delphipraxis.net/204894-prozedur-eines-anderen-type-aufrufen.html)

juelin 11. Jul 2020 08:13

Prozedur eines anderen Type aufrufen
 
Hallo,
ich habe ein Programm (Delphi XE10.3) /Windows10)
in dem ich eigene Typen deklariert habe.
Nun möchte ich aus der Prozedur TExtShape9.MouseDown
die Prozedur TExtShape10.Paint aufrufen.
Ich weiß aber nicht wie?????????????
Danke für die Hilfe.
Gruß Jürgen

Delphi-Quellcode:
type
  TExtShape9 = class(TShape)
  protected
    procedure Paint; override;
    procedure MouseDown(Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer); override;
  published
    property Caption;
    property Font;
  end;
  TExtShape10 = class(TShape)
  protected
    procedure Paint; override;
    procedure MouseDown(Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer); override;
  published
    property Caption;
    property Font;
  end;

var
  Shcol9: TColor;
  Shcol10: TColor;

procedure TExtShape9.Paint;
begin
  inherited Paint;
.......
  Canvas.Brush.Color:=Shcol9;
  Brush.Color:=Shcol9;
..........
end;
procedure TExtShape10.Paint;
begin
  inherited Paint;
.......
  Canvas.Brush.Color:=Shcol10;
  Brush.Color:=Shcol10;
..........
end;
procedure TExtShape9.MouseDown(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  inherited MouseDown(Button, Shift, X, Y);
.......
  Shcol10:=clYellow;
  TExtShape10.Paint;  // dieser Befehl geht nicht
end;
procedure TExtShape10.MouseDown(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  inherited MouseDown(Button, Shift, X, Y);
.......
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
......
    with TExtShape9.Create(Form1) do
    begin
      parent:=Form1;
      Caption:='Einzahlen';
    end;
    with TExtShape10.Create(Form1) do
    begin
      parent:=Form1;
      Caption:='Auszahlen';
    end;
......
end;

Rollo62 11. Jul 2020 08:29

AW: Prozedur eines anderen Type aufrufen
 
Du kannst nicht von der einen Klasse in der Anderen reinpfuschen, aus gutem Grund.
Ausserdem sind die Paint Funktionen keine "class procedures", die brauchen also ein Object
das Du ändern möchtest.

Entweder Du machst das extern, z.B. im OnMouseDown Event mit MyObjectInstance.Repaint,
oder Du übergibst dem TExShape9 das Object des TExShap10.

Generell weiss ich aber nicht was Du überhaupt erreichen möchtest,
ich denke das geht etwas in die falsche Richtung.

juelin 11. Jul 2020 09:40

AW: Prozedur eines anderen Type aufrufen
 
In der Prozedur Paint setzte ich unter anderem die Farbe des Shape.
Also in TExtShape9 ändere ich die Farbe von TExtShape10.
Nun müsste ich Paint von TExtShape10 aufrufen, damit die Farbänderung wirksam wird.

Rollo62 11. Jul 2020 11:25

AW: Prozedur eines anderen Type aufrufen
 
Farbänderungen zur Farbauswahl sollte man aber eigentlich von aussen machen.
Höchstens das setzen eines Pinsels wäre in Paint Ok.
Das erst beim Malen zu Ändern macht wenig Sinn.
Man setzt den Shapes vorher eine Farbe und dann malen die sich selbst.

Die Farbe eines Objekter beim Malen eines Anderen zu ändern leuchtet mir nicht ein.
Wenn Du das möchtest dann besser einen eigenen OnColorChange Event in die Klasse einbauen,
der die Farbänerung an Andere weiterreicht.

Was genau willst Du erreichen ?

juelin 11. Jul 2020 11:39

AW: Prozedur eines anderen Type aufrufen
 
ich habe das Shape als Button benutzt.
Wenn man nun den Shape9 drückt, so soll sich auch die Farbe von Shape10 ändern.

Rollo62 11. Jul 2020 11:48

AW: Prozedur eines anderen Type aufrufen
 
Vielleicht bist Du da an einer ganz falschen Stelle.
Schau Dir mal Events und Actions an,
wie hier in dem Video von generic schön erklärt.
https://www.delphipraxis.net/204809-...ml#post1469315

Bin gerade nicht am PC, such mal nach den Begriffen zusammen mit Delphi.
Da müsste es genug Info geben.

juelin 11. Jul 2020 19:47

AW: Prozedur eines anderen Type aufrufen
 
OK
ich habe es gefunden.

Anstatt: TExtShape10.Paint;
die Befehle: Form1.Repaint; Form1.Refresh;

Gruß
Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz