AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Transparentes Fenster vor anderem Fenster

Transparentes Fenster vor anderem Fenster

Ein Thema von simjoh · begonnen am 3. Jul 2007 · letzter Beitrag vom 11. Jul 2007
Antwort Antwort
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#1

Transparentes Fenster vor anderem Fenster

  Alt 3. Jul 2007, 21:08
Hallo,

verzweifle gleich. Ich will mein Fenster vor das Fenster einer anderen Anwendung setzten. Zudem ist mein Fenster transparent, das funzt mit

Delphi-Quellcode:
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;
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.

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!!
Angehängte Dateien
Dateityp: zip trans_101.zip (206,4 KB, 28x aufgerufen)
  Mit Zitat antworten Zitat
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Transparentes Fenster vor anderem Fenster

  Alt 7. Jul 2007, 00:39
Keiner ne Idee?
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Transparentes Fenster vor anderem Fenster

  Alt 7. Jul 2007, 10:08
Hallo,

kann das eine beliebige Anwendung sein wo du dein Fenster davorsetzen möchtest, oder ist das ein bestimmtes Fenster?
Über einen Shellhook Bei Google suchenWH_SHELL könnte man HSHELL_WINDOWACTIVATED abfangen und dann dein Fenster wieder vor das andere davorsetzen. Das Ganze ist natürlich schon etwas aufwendiger.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Transparentes Fenster vor anderem Fenster

  Alt 7. Jul 2007, 10:18
Wie wärs mit Formstyle = fsStayontop ?

Ich weiß allerdings nicht ob das auch mit Fenstern von anderen Programmen funktioniert.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Transparentes Fenster vor anderem Fenster

  Alt 7. Jul 2007, 11:08
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.
  Mit Zitat antworten Zitat
Sascha999999999

Registriert seit: 28. Sep 2006
45 Beiträge
 
#6

Re: Transparentes Fenster vor anderem Fenster

  Alt 7. Jul 2007, 12:12
wie wärs mit showModal(); ???
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Transparentes Fenster vor anderem Fenster

  Alt 11. Jul 2007, 01:35
Zitat von simjoh:
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.
Hi,

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.
Angehängte Dateien
Dateityp: zip trans_547.zip (21,5 KB, 17x aufgerufen)
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf