AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Flackern bei onshow vehindern

Ein Thema von wfs12 · begonnen am 26. Apr 2007 · letzter Beitrag vom 27. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
wfs12

Registriert seit: 15. Nov 2006
60 Beiträge
 
Delphi 7 Personal
 
#1

Flackern bei onshow vehindern

  Alt 26. Apr 2007, 18:38
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:
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;
Danke im Vorraus!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Flackern bei onshow vehindern

  Alt 26. Apr 2007, 20:36
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
Heiko
  Mit Zitat antworten Zitat
Geronimo

Registriert seit: 19. Dez 2006
Ort: Hamburg
38 Beiträge
 
#3

Re: Flackern bei onshow vehindern

  Alt 26. Apr 2007, 21:07
...
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ß
Die Welt ist rechteckig, linear und Gauss-verteilt!
  Mit Zitat antworten Zitat
wfs12

Registriert seit: 15. Nov 2006
60 Beiträge
 
Delphi 7 Personal
 
#4

Re: Flackern bei onshow vehindern

  Alt 26. Apr 2007, 21:25
hmm das problem ist aber das das popup mit der maus "wandern" soll. deshalb ist das
Zitat:
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.
und das
Zitat:
Weiter: Top und Left des Popups erst richtig einstellen, dann anzeigen.
schlecht machbar für mich. Double Buffered hab ich auf true gesetz ist zwar schon nen bisschen besser aber die endlosschleife ist ja logischerweise immernoch da
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Flackern bei onshow vehindern

  Alt 26. Apr 2007, 21:45
Hallo,

tja,

dann kannst du das wohl nur selber malen
auf dem Rechteck-Form selber.


Heiko
Heiko
  Mit Zitat antworten Zitat
wfs12

Registriert seit: 15. Nov 2006
60 Beiträge
 
Delphi 7 Personal
 
#6

Re: Flackern bei onshow vehindern

  Alt 26. Apr 2007, 21:51
:'(
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Flackern bei onshow vehindern

  Alt 26. Apr 2007, 21:58
Oder du merkst dir die letzte Position des Forms und änderst sie
nur, wenn die Maus z.B. mindestens 3 Punkte weiterbewegt wurde.


Heiko
Heiko
  Mit Zitat antworten Zitat
wfs12

Registriert seit: 15. Nov 2006
60 Beiträge
 
Delphi 7 Personal
 
#8

Re: Flackern bei onshow vehindern

  Alt 26. Apr 2007, 22:13
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Flackern bei onshow vehindern

  Alt 26. Apr 2007, 22:40
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
Heiko
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Flackern bei onshow vehindern

  Alt 26. Apr 2007, 23:03
Hallo,

vielleicht genügen bereits kleine Änderungen an deinem Code:

Delphi-Quellcode:
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;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:34 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