Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Prism gemeinsam auf ein paintevent zugreifen! (https://www.delphipraxis.net/60122-gemeinsam-auf-ein-paintevent-zugreifen.html)

gordon2001 3. Jan 2006 14:23


gemeinsam auf ein paintevent zugreifen!
 
Hallo hab ein problem das ich einfach nich gelöst bekomme und zwar will ich zur lauf zeit mehrer picturbox's erzeugen die alles auf ein gemeinsames PaintEvent zu greifen sollen.

ich habe also eine procedure geschrieben die das macht was ich will ;)

Delphi-Quellcode:
procedure twinform.grafik(sender: System.Object; e: System.Windows.Forms.PaintEventArgs);
var rec: rectangle;
    rec2: rectangle;


begin
  self.Name := (sender as control).Name;

  e.Graphics.Clear(self.BackColor);
  e.Graphics.ScaleTransform(x,x);

  e.Graphics.TranslateTransform(30,30);
  e.Graphics.RotateTransform(winkel);
  rec := rectangle.Create(-22,-22,43,43);
  rec2 := rectangle.Create(-20,-20,43,43);
  e.Graphics.FillRectangle(solidbrush.Create(color.black),rec2);
  e.Graphics.FillRectangle(solidbrush.Create(color.gray),rec);
  e.Graphics.DrawRectangle(pen.create(color.Black),rec);
  textbox1.Text := e.ToString;
  e.Graphics.DrawImage(self.PictureBox1.Image, -20, -20);
end;
das klappt auch alles.

ich hab probeweiße zur entwurfszeit eine picturebox erschaffen und übergebe den sender so das die procedure weis auf welche picturebox sie das event anwenden soll.

Delphi-Quellcode:
 procedure TWinForm.PictureBox1_Paint(sender: System.Object; e: System.Windows.Forms.PaintEventArgs);
begin
 self.grafik(picturebox1, e);
end;
aber auch nur weil "e" das gleiche event hat wie die prozedure

nun will ich eine neue picturebox erzeugen mittels:

Delphi-Quellcode:
 procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);

begin

 picbox := system.Windows.Forms.PictureBox.Create;
 picbox.Name := 'picturebox2';
 picbox.Bounds := rectangle.Create(80,20,70,70);
 self.Controls.Add(picbox);
 include(self.picbox.Paint, grafik(picbox.Name, {HIER} )));
end;
was muss ich bei "HIER" übergeben damit es funktioniert????
ich komm einfach nicht weiter :wall:

vielen dank für eure hilfe!!!!

jim_raynor 3. Jan 2006 14:32

Re: gemeinsam auf ein paintevent zugreifen!
 
MMh. Unter Win32 hat man Events so zugewiesen:

self.picbox.OnPaint:=grafik;

Da werden doch noch garkeine Parameter übergeben :gruebel:. Hat sich das so grundlegend in Net geändert ... :gruebel:

Vielleicht geht ja auch einfach:

include(self.picbox.Paint, grafik);

Die Parameter für einen Event können doch erst bekannt sein, wenn das Event auftritt ...

gordon2001 3. Jan 2006 14:40

Re: gemeinsam auf ein paintevent zugreifen!
 
Klappt leider beides nicht. aber danke...

Khabarakh 3. Jan 2006 14:55

Re: gemeinsam auf ein paintevent zugreifen!
 
Schau doch einfach in den vom Form-Editor erstellten Code, dort siehst du, wie man in Delphi.NET EventHandler zuweist.
Code:
this.pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.PictureBox1Paint);

gordon2001 4. Jan 2006 06:12

Re: gemeinsam auf ein paintevent zugreifen!
 
leider kann ich mit include dem ganzen keine prozedur zuweißen da kommen dann immer fehler:

[Fehler] WinForm.pas(264): E2010 Inkompatible Typen: 'EventHandler' und 'procedure, untyped pointer or untyped parameter'

was mach ich bloß mit meinem..

Delphi-Quellcode:
procedure TWinForm.MenuItem7_Click(sender: System.Object; e: System.EventArgs);
begin
 picbox := system.Windows.Forms.PictureBox.Create;
 picbox.Name := 'picturebox2';
 picbox.Bounds := rectangle.Create(80,20,70,70);
 self.Controls.Add(picbox);
 Include(Self.Picbox.Paint, Self.grafik);

 Include(Self.Picbox.MouseEnter, maus_rein(x));
 Include(Self.Picbox.MouseLeave, Self.PictureBox1_MouseLeave);
end;

Khabarakh 4. Jan 2006 10:02

Re: gemeinsam auf ein paintevent zugreifen!
 
Ignorierst du eigentlich alle Tipps? jim_raynor hat dir gesagt, dass man unter Win32 keine Parameter angeben muss, das ist auch unter .NET richtig. Also kann
Delphi-Quellcode:
Include(Self.Picbox.MouseEnter, maus_rein(x));
nicht funktionieren. Ich habe dir geraten, dir die von Delphi generierten Sourcen anzuschauen, denn dort muss es ja richtig sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 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