Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Die Position von einem Window auf seinem Parent ermitteln (https://www.delphipraxis.net/83402-die-position-von-einem-window-auf-seinem-parent-ermitteln.html)

rey003 2. Jan 2007 09:42


Die Position von einem Window auf seinem Parent ermitteln
 
Hallo Leute,
zunächst ersteinmmal allen ein gesundes neues Jahr! :party:
Ich habe mal wieder eine Frage für euch! :zwinker:
Ich möchte die Position von einem Window auf einem anderen Window(seinem Parent) ermitteln um das richtige Rect für InvalidateRect zu bekommen!
Da ich das ziemlich oft machen muss, stresst meine jetztige Lösung doch ganz schön die CPU! :gruebel:
Also hier erstmal meine bisherige Lösung:
Delphi-Quellcode:
var
  HKButtons          : array [0..6] of HWND;

...

procedure KButtonsClick(wnd: HWND);
var
  i : integer;
  PRect: TRect;
  Rect: TRect;
  R: TRect;
begin
  for I := 0 to 7 - 1 do
   begin
     if HKButtons[i] = wnd then
      begin
       GetWindowRect(GetParent(HKButtons[i]),PRect);
       GetWindowRect(HKButtons[i],Rect);
       R.Left:= Rect.Left-PRect.Left;
       R.Top:= Rect.Top-PRect.Top;
       R.Right:= R.Left + (Rect.Right - Rect.Left);
       R.Bottom:= R.Top + (Rect.Bottom - Rect.Top);

       SendMessage(HKButtons[i],WM_DSIMAGESETICON ,hIcon2,0);
       InvalidateRect(GetParent(HKButtons[i]),@R,true);
       Break;
      end;
   end;
end;
Ich habe mir für nonVCL eine kleine "Komponente" geschrieben die Bilder anzeigen und der man z.b.: eine onClick Procedure zuweisen kann! Das Oben ist eine OnClick-Procedure für mehrere (aber gleiche) Komponenten! Nun ändere ich beim Click das Bild in der Komponente und zeichne sie neu!
Da ich diese Art von Proceduren auch noch für MouseEnter und MouseLeave habe ist meine CPU-Auslastung, wenn ich schnell über die Komponenten gehe, nicht unter 25%! (bei 2,56 GH)
Nun zu meiner Frage, kann man das Berechnen irgendwie vereinfachen?
In der PSDK hab ich leider nichts gefunden!


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