Anklickbares, unsichtbares Fenster
Hi,
Ist es irgendwie möglich ein Fenster zu erstellen, das unsichtbar ist, aber trotzdem die WM_LBUTTONDOWN/WM_LBUTTONUP Message zu empfangen? Ich bräuchte sowas :? Gruß Neutral General |
Re: Anklickbares, unsichtbares Fenster
Die einzige Möglichkeit die mir einfallen würde ist ein Maushook, bei dem du prüfst, ob der Klick in deinem Fenster war.
|
Re: Anklickbares, unsichtbares Fenster
Hi,
Ja an sowas in der Art dachte ich auch schon. Allerdings würde das mein Vorhaben sinnlos machen :mrgreen: Also was ich vorhabe, bzw mal probieren wollte ist folgendes. Nachdem ich diesen Thread verfolgt habe, wollte ich versuchen ob sich das über AllocateHwnd bzw generell unsichtbare Fenster, die über dem Sprite schweben gelöst werden könnte und man dann für ein OnClick nur noch eine Window Message empfangen müsste, statt groß rumzurechnen (und auch GetSpriteAt rechnet ja intern, bzw geht alle (sichtbaren?) Sprites durch). Von daher nutzt es mir nichts wenn ichs jetzt mit nem Hook löse :mrgreen: |
Re: Anklickbares, unsichtbares Fenster
Hey,
das sollte gehen, wenn du das Fenster mit folgender Prozedure Transparent zeichnest:
Delphi-Quellcode:
procedure MakeWindowTransparent(Wnd: HWND; Alpha: Byte);
const WS_EX_LAYERED = $80000; LWA_ALPHA = $02; type TSetLayeredWindowAttributes = function(const hWnd: HWND; crKey: Integer; bAlpha: Byte; dwFlags: Integer) : Integer; stdcall; var SetLayeredWindowAttributes : TSetLayeredWindowAttributes; User32DLL : THandle; begin User32DLL := LoadLibrary('User32.dll'); if User32DLL <> 0 then begin @SetLayeredWindowAttributes := GetProcAddress(User32DLL, 'SetLayeredWindowAttributes'); if @SetLayeredWindowAttributes <> nil then begin SetWindowLong(Wnd, GWL_EXSTYLE, GetWindowLong(Wnd, GWL_EXSTYLE) or WS_EX_LAYERED); SetLayeredWindowAttributes(Wnd, 0, Alpha, LWA_ALPHA); end; end; FreeLibrary(User32DLL); end; und dann auf die Messages reagierst! Aufrufen musst du die Funktion dann so:
Delphi-Quellcode:
MakeWindowTransparent(DeinFensterhandle,1);
//Ob es auch mit 0 geht weiß ich nciht musst du ausprobieren... //das währe dann wirklich unsichtbar |
Re: Anklickbares, unsichtbares Fenster
Klar geht das, AlphaBlend auf Ture und AlphaBlendValue auf 1 (oder sogar null).
|
Re: Anklickbares, unsichtbares Fenster
Zitat:
Und scheinbar funktioniert MakeWindowTransparent nicht mit diesen Fenstern :gruebel:
Delphi-Quellcode:
// Nur eine Test-Methode!
procedure THandleSprite.Apply; begin SetParent(Fhandle,Form1.Handle); SetWindowPos(FHandle,HWND_BOTTOM,0,0,Round(Width),Round(Height),0); ShowWindow(FHandle,SW_SHOW); MakeWindowTransparent(FHandle,1); end; |
Re: Anklickbares, unsichtbares Fenster
@ N.G. Da waren die anderen Beiträge noch nicht da...
Ich würde die Sprides & Mousepos. errechnen, das ist schneller und sauberer als dieses Kuddelmuddel mit unsichtbaren Fenster, Hooks etc. (Gesausogut könnte man flacker TImages verschieben :stupid: :snowball: ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 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