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/)
-   -   Transparent und TopMost Problem (https://www.delphipraxis.net/166874-transparent-und-topmost-problem.html)

Popov 3. Mär 2012 16:50

Transparent und TopMost Problem
 
Was stimmt daran nicht? Mal funktioniert es, mal funktioniert es nicht. Und wenn es nicht funktioniert, dann richtig. Nicht nur, dass es dann nicht TopMost ist, das Ding ist so weit Bottom-Most, dass es sogar unter den Desktopicons verschwindet.

Delphi-Quellcode:
procedure MakeWndTransparent(AHandle: HWND; Value: Boolean);
var
  curWinStyle: Integer;
begin
  curWinStyle := GetWindowLong(AHandle, GWL_EXSTYLE);
  if Value then
    SetWindowLong(AHandle, GWL_EXSTYLE, curWinStyle or WS_EX_TRANSPARENT)
  else
    SetWindowLong(AHandle, GWL_EXSTYLE, curWinStyle and (not WS_EX_TRANSPARENT));
end;

procedure MakeWndTopMost(AHandle: HWND; Value: Boolean);
const
  WndInsertAfter: array[Boolean] of HWnd = (HWND_TOPMOST, HWND_NOTOPMOST);
begin
  SetWindowPos(AHandle, WndInsertAfter[Value], 0, 0, 0, 0,
    SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;

procedure MakeWndTransparentAndTopMost(AHandle: HWND; Value: Boolean);
begin
  MakeWndTransparent(AHandle, Value);
  MakeWndTopMost(AHandle, Value);
end;

Popov 3. Mär 2012 16:59

AW: Transparent und TopMost Problem
 
Ok, ich hab es, aber auch nur zufällig. In den Tiefen des Programms wird beim AlphaBlendValue von 255 AlphaBlend auf False geschaltet, sonst True. Ich weiß zwar noch nicht warum, aber anscheinend bringt es das Ding komplett aus dem Konzept. Mein Programm unter den Icons habe ich auch noch nicht gesehen.

Frage gelöst.

himitsu 3. Mär 2012 17:09

AW: Transparent und TopMost Problem
 
AlphaBlend = WS_EX_TRANSPARENT
und
WS_EX_TOPMOST steckt im GWL_EXSTYLE

Daß sich dabei nun etwas gegenseitig beeinflußt, wäre also selbstverständlich.

Popov 3. Mär 2012 18:53

AW: Transparent und TopMost Problem
 
Zitat:

Zitat von himitsu (Beitrag 1154315)
Daß sich dabei nun etwas gegenseitig beeinflußt, wäre also selbstverständlich.

Na, wir wollen nicht gleich übermütig werden. Ein mal vorne und noch mal vorne ergibt immer noch vorne. Wo du ein selbstverständlich siehst, würde ich gerne wissen.

himitsu 3. Mär 2012 19:13

AW: Transparent und TopMost Problem
 
Zitat:

Zitat von Popov (Beitrag 1154314)
In den Tiefen des Programms wird beim AlphaBlendValue von 255 AlphaBlend auf False geschaltet, sonst True.

Wenn man an WS_EX_TRANSPARENT rumspielt, dann hat das natürlich eine Auswirkung auf AlphaBlend, was ich einfach mal als selbstverstädlich hinstellen würde.

Popov 3. Mär 2012 19:21

AW: Transparent und TopMost Problem
 
Deine erste Bemerkung liest sich aber anders.

himitsu 3. Mär 2012 19:32

AW: Transparent und TopMost Problem
 
Zitat:

AlphaBlend = WS_EX_TRANSPARENT
und
WS_EX_TOPMOST steckt im GWL_EXSTYLE
Vielleicht hab ich micht so gut ausgedrückt.

Spielt man an WS_EX_TRANSPARENT rum, hat es einen Einfluß auf AlphaBlend.
und
Wird an SetWindowPos+HWND_NOTOPMOST/HWND_TOPMOST rumgemacht, dann hat es einen Einfluß auf GWL_EXSTYLE+WS_EX_TOPMOST.

Es beeinflußt sich alles alles irgendwie gegenseitig,
da kann es eventuell auch gewisse Nebenwirkungen Wechselwirkungen geben.

Popov 4. Mär 2012 22:59

AW: Transparent und TopMost Problem
 
Eine Beobachtung: unabhängig dessen ob WS_EX_TOPMOST im GWL_EXSTYLE steckt und mit HWND_TOPMOST gewisse Wechselwirkungen eingeht, das oben beschriebene Problem liegt nicht daran.

Der Grund liegt wie bereits vermutet bei AlphaBlend gleich False. Ist AlphaBlend gleich False, spinnt die obere Funktion total. Hab zufällig wieder den Fehler gemacht und fand mein Programm plötzlich wieder unter den Icons. Und dieses mal spielte HWND_TOPMOST keine Rolle.


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