Autor Beitrag
sibbl
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 30.08.08 16:15 
Hallo,

scheint ja wirklich gut zu sein, das Forum hier. Deswegen hab ich auch gleich mal ne Frage:

Ich habe eine transparente Main Form und möchte diese auf den Desktop bringen (wenns geht hinter die Icons, davor ist aber auch nicht schlimm). D.h. sie soll dann von jedem Fenster überdeckt werden - eben wie als würde sie zum Hintergrundbild gehören (below all).

Ok hab ich mir gedacht, nimmste FindWindow, suchst den Desktop und setzt die hwnd als parentwindow deiner Form. Hat auch geklappt, nur ist dann die Transparenz weg (und es ist vor den Icons ... aber wie gesagt, nit schlimm).

Habt ihr noch ein paar Tips, wie ich das noch realisieren kann (Delphi 2007)?



Bin für jede Antwort dankbar!

mfG
Sebastian
sibbl Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 01.09.08 16:55 
also habe bereits rausgefunden, dass dieses Problem nur bei Vista Aero-Modus ist. D.h. wenn ich Aero deaktiviere gehts wunderbar.

Hat da jemand Tips?
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 01.09.08 17:23 
Wie hast due es denn gemacht?
sibbl Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 01.09.08 17:35 
Parent.Handle = MainForm.Handle ... :)

ausblenden Delphi-Quelltext
1:
2:
const
  WS_EX_LAYERED = $00080000;


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
FSavedParentExStyle := GetWindowLong(Parent.Handle, GWL_EXSTYLE);
      FSavedParentStyle := GetWindowLong(Parent.Handle, GWL_STYLE);

      if (Parent.ClassType.InheritsFrom(TForm)) then
      begin
         FSavedParentBorderStyle := (Parent as TForm).BorderStyle;
         (Parent as TForm).BorderStyle := bsNone;
      end;

      SetWindowLong(Parent.Handle, GWL_EXSTYLE, FSavedParentExStyle or WS_EX_LAYERED);
      SetWindowLong(Parent.Handle, GWL_STYLE, WS_VISIBLE);
      SetWindowPos(Parent.Handle, 00000, SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER or SWP_FRAMECHANGED);

      // Save current align
      FSavedAlign := Align;
      // Save current position
      FSavedBoundsRect := BoundsRect;

      Left := 0;
      Top := 0;
      Width := Parent.ClientWidth;
      Height := Parent.ClientHeight;

      m_size.cx := 0;
      m_size.cy := 0;
      m_pBitsWhite := nil;
      m_pBitsBlack := nil;

      if (0 <> m_hBmpWhite) then
      begin
         DeleteObject(m_hBmpWhite);
         m_hBmpWhite := 0;
      end;

      if (0 <> m_hBmpBlack) then
      begin
         DeleteObject(m_hBmpBlack);
         m_hBmpBlack := 0;
      end;

      FOldParentWndProc := Parent.WindowProc;
      Parent.WindowProc := NewParentWndProc;
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 01.09.08 17:45 
So hätte ich es auch gemacht :wink:
sibbl Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 01.09.08 17:56 
hm schade :? Doofes Vista ... xD Finds sonst zwar gut aber wenns da schon hängt :x

das hier bringt auch nichts oder?