Einzelnen Beitrag anzeigen

ts_abc

Registriert seit: 22. Sep 2003
20 Beiträge
 
Delphi 10 Seattle Professional
 
#1

nonVCL TabControl mit Dialoge aus Ressource unter WinXP

  Alt 22. Apr 2005, 18:16
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
  Mit Zitat antworten Zitat