![]() |
EventArgs
Hallo,
ich möchte gerne aus einem ereigniss das so ausschaut:
Delphi-Quellcode:
eine prozedure aufrufen die so aussieht:
procedure twinform.maus_rein(sender: System.Object; e: System.EventArgs);
begin grafik_maus(sender, [b][i]{HIER}[/i][/b] ); end;
Delphi-Quellcode:
wie übergeb ich das "e" bei "{HIER}" richtig!?!?
procedure twinform.grafik_maus(sender: System.Object; e: System.Windows.Forms.PaintEventArgs);
begin ...bla... end; vielen dank.... |
Re: EventArgs
Hallo
Bei deinem Problem gibts gibt 2 Möglichkeiten:
Mike PS: Ich sitz leider nich an meinem rechner, und mit mit Delphi.NET nicht allzugut bewandt, und kann deswegen nich für Syntax ect. garantieren, dürfte aber schon mehr oder weniger stimmen ;) |
Re: EventArgs
danke das hat mir sehr geholfen! :-D
|
Re: EventArgs
@gordon: Du willst also einen Eventhandler aufrufen, ohne dass ein entsprechendes Event gefeuert wurde? Dafür gibt es keine gute Lösung, denn schon die Idee ist falsch :wink: . Wenn die Funktionalität deines Eventhandlers auch anderswo benötigt wird, solltest du ihn stattdessen in eine seperate Methode auszweigen. Beispiel:
Delphi-Quellcode:
@Chimaira: Die ganzen Event-Klassen implementieren kein IDisposable, also würde ich einfach gar nichts schreiben :wink: .
procedure DrawSomething(g: Graphics);
begin [...] end; procedure TWinForm.grafik_maus(sender: System.Object; e: System.Windows.Forms.PaintEventArgs); begin DrawSomething(e.Graphics); end; procedure TWinForm.maus_rein(sender: System.Object; e: System.EventArgs); begin DrawSomething(...); end; |
Re: EventArgs
hm... ja das ist besser, aber ganz geht meine strategie nicht aus, leider. Also ich sag einfach mal was ich vor hatte.
Ich möchte zur lauf zeit mehre pictureboxes erzeugen die mit einer grundform gefüllt sind. nun möchte ich aber das wenn die maus über eine picturebox geht das sie gekippt wird. Mein quelltext sieht so aus, bisher...
Delphi-Quellcode:
komischer weiße wenn eine neue picturebox erzeugt wird drehen sich beide wenn man mit der maus über eines geht. Ich glaube weil ich mit dem include beim erzeugen das mit dem sender nicht übergeben habe???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, self.maus_rein); Include(Self.Picbox.MouseLeave, Self.maus_raus); end; procedure TWinForm.PictureBox1_MouseLeave(sender: System.Object; e: System.EventArgs); begin self.maus_raus(sender, e); end; procedure TWinForm.PictureBox1_MouseEnter(sender: System.Object; e: System.EventArgs); begin self.maus_rein(sender, e); end; procedure TWinForm.PictureBox1_Paint(sender: System.Object; e: System.Windows.Forms.PaintEventArgs); begin self.grafik(sender, e); end; procedure twinform.maus_raus(sender: System.Object; e: System.EventArgs); begin self.Name := (sender as control).Name; winkel := 0; self.Refresh; self.Invalidate; end; procedure twinform.maus_rein(sender: System.Object; e: System.EventArgs); begin self.Name := (sender as control).Name; winkel := -15; self.Refresh; self.Invalidate; end; procedure twinform.grafik(sender: System.Object; e: System.Windows.Forms.PaintEventArgs); var rec: rectangle; rec2: rectangle; begin e.Graphics.TranslateTransform(0,0); e.Graphics.Clear(self.BackColor); 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); end; thx bis hier, find ich echt cool hier... :-D :-D |
Re: EventArgs
Zitat:
bloß: Wenn die Maus auf eine PictureBox gesetzt wird, zeichnest du das ganze Form neu (durch das Refresh). Dadurch werden auch die PictureBoxes neu gezeichnet, d.h. es wird Grafik(...) für jede PictureBox aufgerufen. Dort wird somit auch jede PictureBox gedreht gezeichnet. Deswegen drehen sich beide, wenn du mit der Maus über eine fährst. mögliche Lösung des Problems: Im Maus_Rein speicherst du ab, welche PictureBox gedreht werden soll. (Steht ja in 'sender' drinnen). In der Grafik-Methode überprüfst du dann, ob die zu zeichnende PictureBox auch die zu drehende PictureBox ist, und springst andernfalls aus der Methode einfach raus. Damit dürfts dann klappen, und ich hoff, dass die kurze Beschreibung reicht, zu mehr is mein Kopf so früh am Morgen noch nicht fähig ;) greetz Mike |
Re: EventArgs
hm... ja aber dabei ist ja das problem das das paint ereigniss andauert von selbst ausgelöst wird ich kan ja nicht bestimmen wann! oder hab ich dich falsch verstanden? :gruebel:
aber danke für die mühe schon mal von mir! :-D |
Re: EventArgs
Zitat:
Im Maus_rein-ereignis setzt du die Variable auf den inhalt von 'sender'. Darin steht ja jene Picturebox, über dem sich die Maus befindet, also jene, die sich drehen soll. und im Maus_raus-Ereignis setzt du sie auf null. Jetzt musst du in der Grafik-Methode noch abfragen: zeichnest du grad die PictureBox, die gedreht werden soll (Die steht übrigens im 'sender' ;) ): ja? dreh sie. nein? dreh sie nich... in Quellcode ausgedrückt siehts noch einfacher aus:
Delphi-Quellcode:
greetz
type
twinform = class(...) //irgendwo, ws unter Private: DiePictureBoxDieIchDrehenMuss: System.Object; end; procedure twinform.maus_rein(sender: System.Object; e: System.EventArgs); begin DiePictureBoxDieIchDrehenMuss := sender; //... end; //im twinform.maus_raus die Var auf null setzen überlass ich dir ;) procedure twinform.grafik(sender: System.Object; e: System.Windows.Forms.PaintEventArgs); //... if DiePictureBoxDieIchDrehenMuss = sender then begin //so, hier kommt der Code rein, den du brauchst, um die PictureBox gedreht zu zeichnen end; //... Mike |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz