![]() |
Flackern bei onshow vehindern
Guten tag allerseits,
Ich habe ein Problem ich habe eine Form auf der ich ein paar Rechtecke auf das Canvas gezeichnet habe wenn ich mit der Maus nun über eins dieser Rechtecke komme möchte ich gerne ein popup zeigen dass informationen zu diesem Rechteck enthält die Koordinaten des Rectecks habe ich in einem Array gespeichert. klappt auch alles bestens. als popup zeige ich eine zweite form an (show) jetzt ergibt sich bei meinem quellcode folgendes Problem das Fenster beginnt zu flackern weil ich hiermit sowas wie eine endlosschleife konstruiert hab. Wuie kann ich das lösen?
Delphi-Quellcode:
Danke im Vorraus!
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); var i:integer; begin for i:=0 to max-1 do if (x>PosArray[i,1]) and (x<PosArray[i,3]) and (y>PosArray[i,2]) and (y<PosArray[i,4]) then begin hintid:=PosArray[i,0]; if not Form4.Showing=true then Form4.Show; Form4.Left:=X+200; if Y<150 then Form4.Top:=Y+150 else if clientheight-Y<170 then Form4.top:=Y-170 else Form4.top:=Y; end else Form4.Hide; end; |
Re: Flackern bei onshow vehindern
Hallo,
ich würde das Form immer "zentriert" zum Rechteck anzeigen, also immer an der gleichen Stelle für das betreffende Rechteck. Dann muss das Rechteck nur einmal angezeigt und plaziert werden. Ausserdem solltest du mal probieren, bei deinem Rechteck-Form DoubleBuffered auf True zu setzen (z.B. im FormCreate). Heiko |
Re: Flackern bei onshow vehindern
...
Hier werden im MouseMove Ereignis immer alle Rechtecke durchgerödelt. Ich würde zum Zeichnen der Rechtecke eine geeignete Kompo mit Rand und MouseMove Ereignis nehmen. Vorteil: Sender ist gleich ohne Rödeln das richtige Rechteck. Weiter: Top und Left des Popups erst richtig einstellen, dann anzeigen. Gruß |
Re: Flackern bei onshow vehindern
hmm das problem ist aber das das popup mit der maus "wandern" soll. deshalb ist das
Zitat:
Zitat:
|
Re: Flackern bei onshow vehindern
Hallo,
tja, dann kannst du das wohl nur selber malen auf dem Rechteck-Form selber. Heiko |
Re: Flackern bei onshow vehindern
:'(
|
Re: Flackern bei onshow vehindern
Oder du merkst dir die letzte Position des Forms und änderst sie
nur, wenn die Maus z.B. mindestens 3 Punkte weiterbewegt wurde. Heiko |
Re: Flackern bei onshow vehindern
ne bringt leider auch nichts weil wenn ich ja die popup form zeige dann bin ich ja nicht mehr auf meiner normalen form also zählt da mouseover auch nicht mehr
|
Re: Flackern bei onshow vehindern
Hallo,
[/delphi] Pseudo-Code type TForm1 // das sind Form-Variablen iCurLeft: Integer; iCurTop: Integer; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var i:integer; iLeft, iTop: Integer; bPosChanged: Boolean; begin bPosChanged:= Fklse; for i:=0 to max-1 do if (x>PosArray[i,1]) and (x<PosArray[i,3]) and (y>PosArray[i,2]) and (y<PosArray[i,4]) then begin hintid:=PosArray[i,0]; if not Form4.Showing=true then Form4.Show; iLeft:= X+200; iTop:= Y+150; // 3 ist ein Beispiel // Diff mussu mal selber coden // iLeft kann groesser werden (Maus nach rechts) oder kleiner) // Diff:= Abs(iLeft,iCurLeft) // habe gerade keine Lust mehr zum guggern if Diff(iLeft, iCurLeft)>3 then begin iCurLeft:= iLeft; bPosChanged:= True; end; // mit Top das gleiche und dann if bPosChanged then begin Form.Left:= iCurLeft; Form.Top := ... end; end; [delphi] Damit wird das Neupositionieren nur dann gemacht, wenn die Maus sich ein bissel mehr bewegt hat. Heiko insert hoika into bett delete hoika from arbeitsplatz |
Re: Flackern bei onshow vehindern
Hallo,
vielleicht genügen bereits kleine Änderungen an deinem Code:
Delphi-Quellcode:
Gruß Hawkeye
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); var i:integer; begin for i:=0 to max-1 do if (x>PosArray[i,1]) and (x<PosArray[i,3]) and (y>PosArray[i,2]) and (y<PosArray[i,4]) then begin hintid:=PosArray[i,0]; Form4.Left:=X+200; if Y<150 then Form4.Top:=Y+150 else if clientheight-Y<170 then Form4.top:=Y-170 else Form4.top:=Y; Form4.Show; Exit; end; Form4.Hide; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:34 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 by Thomas Breitkreuz