![]() |
Transparentes Fenster vor anderem Fenster
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
verzweifle gleich. Ich will mein Fenster vor das Fenster einer anderen Anwendung setzten. Zudem ist mein Fenster transparent, das funzt mit
Delphi-Quellcode:
ganz gut, dann kann man auch noch auf die Objekte auf meinem Fenster klicken, wenn man an denen vorbeiklickt kommt aber immer das fremde Fenster in den Vordergrund.
procedure TFormTransparent1.DoInvisible;
var AControl : TControl; A, Margin, X, Y, CtlX, CtlY : Integer; begin Margin := ( Width - ClientWidth ) div 2; //First, get form region FullRgn := CreateRectRgn(0, 0, Width, Height); //Find client area region X := Margin; Y := Height - ClientHeight - Margin; ClientRgn := CreateRectRgn( X, Y, X + ClientWidth, Y + ClientHeight ); //'Mask' out all but non-client areas CombineRgn( FullRgn, FullRgn, ClientRgn, RGN_DIFF ); //Now, walk through all the controls on the form and 'OR' them // into the existing Full region. for A := 0 to ControlCount - 1 do begin AControl := Controls[A]; if ( AControl is TWinControl ) or ( AControl is TGraphicControl ) then with AControl do begin if Visible then begin CtlX := X + Left; CtlY := Y + Top; CtlRgn := CreateRectRgn( CtlX, CtlY, CtlX + Width, CtlY + Height ); CombineRgn( FullRgn, FullRgn, CtlRgn, RGN_OR ); end; end; end; //When the region is all ready, put it into effect: SetWindowRgn(Handle, FullRgn, TRUE); end; procedure TFormTransparent1.FormDestroy(Sender: TObject); begin //Clean up the regions we created DeleteObject(ClientRgn); DeleteObject(FullRgn); DeleteObject(CtlRgn); end; procedure TFormTransparent1.DoVisible; begin //To restore complete visibility: FullRgn := CreateRectRgn(0, 0, Width, Height); CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY); SetWindowRgn(Handle, FullRgn, TRUE); end; procedure TFormTransparent1.FormCreate(Sender: TObject); begin //We start out as a transparent form.... DoInvisible; end; Ich möchte gerne, dass mein Fenster immer vor nur diesem einen Fenster ist und man durchklicken kann. Die Objekte auf meinem Fenster sollen also sichtbar bleiben, auh wenn man durchklickt. Hab noch was vergessen: Das Fenster, welches transparent sein soll, ist nicht das Hauptfenster, sondern wird vom Hauptfenster per Button "geshowed". Hab mal ein Beipiel drangehängt. HELP!! |
Re: Transparentes Fenster vor anderem Fenster
Keiner ne Idee?
|
Re: Transparentes Fenster vor anderem Fenster
Hallo,
kann das eine beliebige Anwendung sein wo du dein Fenster davorsetzen möchtest, oder ist das ein bestimmtes Fenster? Über einen Shellhook ![]() |
Re: Transparentes Fenster vor anderem Fenster
Wie wärs mit Formstyle = fsStayontop ?
Ich weiß allerdings nicht ob das auch mit Fenstern von anderen Programmen funktioniert. |
Re: Transparentes Fenster vor anderem Fenster
Hi,
Formstyle = fsStayontop funzt nicht, das geht nur, wenn mein Hauptfenster über dem fremden Fenster liegt, nicht beim Childfenster welches transparent sein soll. Warum das so ist, weiß ich nicht. Mein transparentes Fenster setze ich vor ein bestimmtes Fenster, dessen HWND ich habe. Auf dem Fenster sitzen Objekte, die anklickbar sein sollen, wenn man an denen vorbeiklickt, soll mein transparentes Fenster immer im Vordergrund bleiben und einfach durchgeklickt werden. Hm, bin nicht der versierteste in Delphi, wüsste mit HSHELL_WINDOWACTIVATED jetzt nix anzufangen. Danke für die Tipps. |
Re: Transparentes Fenster vor anderem Fenster
wie wärs mit showModal(); ???
|
Re: Transparentes Fenster vor anderem Fenster
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
mit dem HSHELL_WINDOWACTIVATED habe ich es nun mal versucht. Dazu habe ich mal Notepad mitgestartet, dessen Fenster soll dann im Hintergrund bleiben. Solange man innerhalb des Fensters von Notepad klickt funktioniert auch alles, bloß wenn man oben auf die Titelleiste klickt wird es trotzdem nach vorne geholt. Immerhin bekommt dein Programm es jedoch dann auch mit. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:13 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