Einzelnen Beitrag anzeigen

tommie-lie
(Gast)

n/a Beiträge
 
#4

Re: Eigenes globales Andockprogramm - Warum flimmert es?

  Alt 16. Mai 2005, 08:40
Also wenn mir in einem Delphi-vs-C++-Flameware nochmal irgendjemand mit dem Argument "Delphicode ist viel übersichtlicher" ankommen sollte, kriegt er diesen Link hier rechts und links um die Ohren gehauen

So, schau'n mer ma', wat det hier iss. Man nehme an, du willst das Fenster oben links andocken und es befindet sich gerade im Schwellwertbereich.
Delphi-Quellcode:
  hWindow := GetForegroundWindow;
  GetWindowRect(hWindow, r);
{
  Hier ist in r also die Position des Fensters, noch mit kleinem Rand nach oben und nach links.
}


  //Linker Rand
  if (r.Left <= spinedit1.Value) AND (r.Left >= -spinedit1.Value)
    then MoveWindow(hwindow,0,r.Top,
{
  Die neue X-Position ist 0, die Y-Position bleibt so. Erstma nix falsches.
}


  //Oben
  if (r.Top <= spinedit1.Value) AND (r.Top >= -spinedit1.Value)
    then Movewindow(hwindow,r.Left,0
{
  Nanu, r.Left enthält doch nicht 0. Hier setzt du die X-Position also wieder etwas vom Rand weg, dafür aber die Y-Position auf 0.
}
Also ich weiß ja nicht, wie oft dein Timer aufgerufen wird, aber wenn du mehrere Mal pro Sekunde die Position auf zwei völlig verschiedene Werte setzt, meinst du da nicht auch, daß es flackert?

By the way: 'n Hook auf WM_MOVING wäre vielleicht etwas eleganter als ein Timer, der sich jedes Mal das Fenster zu Fuß holt. Ich habe das damals mal für eigene Fenster geschrieben, die an anderen Fenstern der gleichen Anwendung andocken sollten. Dabei habe ich das in lParam enthaltene Rect solange verändert, bis es mir gefiel und dann an die Message zurückgegeben. Windows hat davon also mehr oder weniger gar nichts mitgekriegt, und geflimmert hat's daher auch nicht
  Mit Zitat antworten Zitat