Hallo Leute,
zunächst ersteinmmal allen ein gesundes neues Jahr!
Ich habe mal wieder eine Frage für euch!
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!
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!
Daniel S.