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/)
-   -   Delphi nonVCL TabControl mit Dialoge aus Ressource unter WinXP (https://www.delphipraxis.net/44675-nonvcl-tabcontrol-mit-dialoge-aus-ressource-unter-winxp.html)

ts_abc 22. Apr 2005 17:16


nonVCL TabControl mit Dialoge aus Ressource unter WinXP
 
Hallo,

ich habe folgendes Problem. Ich lade aus den Ressourcen der Anwendung die Dialoge für ein Tabcontrol, dabei habe ich das Problem den Grauen Hintergrund des Formulars durchsichtig erscheinen zu lassen. Da bei Verwendung des Manifest unter WinXP dies relativ unschön aussieht. Habe schon folgendes versucht.

Delphi-Quellcode:
...
begin
  ...
  for i := 0 to length(hTabDlgs) - 1 do begin
    SetWindowLong(hTabDlgs[i], GWL_STYLE, DS_CONTROL or WS_CHILD );
    SetParent(hTabDlgs[i], Wnd);
    SetWindowLong(hTabDlgs[i], GWL_EXSTYLE, GetWindowLong(hTabDlgs[i], GWL_EXSTYLE) or WS_EX_LAYERED);
    SetLayeredWindowAttributes(hTabDlgs[i], GetSysColor(COLOR_BTNFACE), 255, LWA_COLORKEY);
  end;
end;
Hierbei wird das Formular nur Durchsichtig wenn es kein Parent vergeben wird, also sieht es immer noch so aus.
http://img.photobucket.com/albums/v1...lphi/Bild1.jpg

Delphi-Quellcode:
var
  FullRgn, ClientRgn, CtlRgn: THandle;

procedure MakeTransparent(Handle: HWND);
var
  NextChild: HWND; CtlX, CtlY: Integer; R: TRect;
begin
  GetWindowRect(Handle, R);
  MapWindowPoints(HWND_DESKTOP, Handle, R, 2);
  with R do begin
    FullRgn  := CreateRectRgn(Left, Top, Right, Bottom);
    ClientRgn := CreateRectRgn(Left, Top, Right, Bottom);
    CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF);
  end;
  NextChild := GetTopWindow(Handle);
  while NextChild > 0 do
  begin
    GetWindowRect(NextChild, R);
    MapWindowPoints(HWND_DESKTOP, Handle, R, 2);
    if NextChild > 0 then with R do
    begin
      CtlX  := Left;
      CtlY  := Top;
      CtlRgn := CreateRectRgn(CtlX, CtlY, CtlX + (Right-Left), CtlY + (Bottom-Top));
      CombineRgn(FullRgn, FullRgn, CtlRgn, RGN_OR);
      NextChild := GetNextWindow(NextChild, GW_HWNDNEXT);
    end;
  end;
  SetWindowRgn(Handle, FullRgn, True);
end;

...
begin
  ...
  for i := 0 to length(hTabDlgs) - 1 do begin
    SetWindowLong(hTabDlgs[i], GWL_STYLE, DS_CONTROL or WS_CHILD);
    SetParent(hTabDlgs[i], Wnd);
    MakeTransparent(hTabDlgs[i]);
    ...
  end;
end;
...
Hierbei wird alles Durchsichtig nur natürlich nicht die Controls. :(
http://img.photobucket.com/albums/v1...lphi/Bild2.jpg

Kann man es auf irgendeinen weg erreichen das alles was grau ist verschwindet?

Gruß Thomas

Mephistopheles 24. Apr 2005 15:54

Re: nonVCL TabControl mit Dialoge aus Ressource unter WinXP
 
Wie wäres es denn einfach die Client-Dialoge in ihrer Größe an den Clientbereich des Tabcontrols anzupassen. Das ist zumindest der übliche Weg. Dann wäre alles in diesem beige, siehe oben.


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