Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Nur Stringgrid transparent ? (https://www.delphipraxis.net/207471-nur-stringgrid-transparent.html)

oldman62 27. Mär 2021 19:58

Nur Stringgrid transparent ?
 
Hallo,
gibt es eine Möglichkeit nur ein Stringgrid transparent zu machen und nicht die ganze Form?
Ich habe z.B. auf meiner Form ein TImage und darüber ein Stringgrid. Nun hätte ich es gern das die Einträge des Stringgrids sozusagen auf dem TImage zu liegen scheinen. Hat jemand eine Idee? Danke.

mmw 28. Mär 2021 10:38

AW: Nur Stringgrid transparent ?
 
Hallo,

https://stackoverflow.com/questions/...-in-stringgrid

Gruß

himitsu 28. Mär 2021 12:32

AW: Nur Stringgrid transparent ?
 
Die TransparentColor bringt doch nur den Background des Fensters durch, aber nicht das hinterm Fenster.

Es gibt überall Erklärungen, wie man "Bereiche" eines Fenters transparent macht.
* entweder 100% eine bestimmte Farbe irgendwo im Fenster (die muß man dann nur als Hintergrund im gewünschten Control verwenden)
* oder mit einer Maske, welche man dann so festlegt, dass sie über dem Control liegt

Der schöne Günther 28. Mär 2021 12:39

AW: Nur Stringgrid transparent ?
 
Anstatt die Durchsichtigkeit des Stringgrids zu "simulieren" könnte man ihn auch als "Layered Window" wirklich transparent machen:

https://docs.microsoft.com/en-us/win...ayered-windows

Von der Delphi VCL gibt es da aber nichts "out of the box", das muss man sich dann wohl selbst über die WinApi machen.

himitsu 28. Mär 2021 12:51

AW: Nur Stringgrid transparent ?
 
FMX und VCL kennen WS_EX_LAYERED.

FMXForm.Transparency bzw. VCLForm.AlphaBlend oder VCLForm.TransparentColor.
Es war damals in den What's New DAS supercoole Feature, weswegen man das neue Delphi kaufen sollte. :zwinker:

Der schöne Günther 28. Mär 2021 13:00

AW: Nur Stringgrid transparent ?
 
Ja, für Formulare, aber nicht für einzelne Komponenten, in diesem Fall den Stringgrid.

Nur mal so runtergetippt, Beispielvideo hier:
Delphi-Quellcode:
procedure TForm1.CheckBox1Click(Sender: TObject);
var
   isTransparent: Boolean;
begin
   isTransparent := (Sender as TCheckBox).Checked;
   setIsStringGridTransparent(isTransparent);
end;

procedure TForm1.setIsStringGridTransparent(const isTransparent: Boolean);
var
   exStyle: DWORD;
begin
   exStyle := GetWindowLongPtr(StringGrid1.Handle, GWL_EXSTYLE);
   Win32Check(exStyle <> 0);

   if(isTransparent) then
      begin
         exStyle := (exStyle or WS_EX_LAYERED);
         Win32Check(
            SetWindowLongPtr(StringGrid1.Handle, GWL_EXSTYLE, exStyle)
            <>
            0
         );

         Win32Check( SetLayeredWindowAttributes(
            StringGrid1.Handle,
            0,
            127, // 50 % von 255
            LWA_ALPHA
         ) );
      end
   else
      begin
         exStyle := (exStyle xor WS_EX_LAYERED);
         SetWindowLong(StringGrid1.Handle, GWL_EXSTYLE, exStyle);
        end;
end;

oldman62 28. Mär 2021 16:42

AW: Nur Stringgrid transparent ?
 
Danke Euch für die rege Unterstützung. Das Beispielvideo von Der schöne Günther kommt genau an das heran was ich möchte. Also gleich mal den Code ausprobiert, aber leider bekomme ich beim ausführen die Fehlermeldung "Ein Aufruf einer Betriebssystemfunktion ist fehlgeschlagen". Beim debuggen läuft alles glatt durch.

Der schöne Günther 28. Mär 2021 18:23

AW: Nur Stringgrid transparent ?
 
Dann musst du ein paar mehr Informationen liefern, welche Delphi-Version?

Bei meinem Delphi 10 Seattle musste ich z.B. auch erst von Hand das ".exe-Manifest" bearbeiten denn darin muss man angeben dass man explizit Windows 8 (2012) unterstützt, und davon hatte man bei Embarcadero im Jahr 2015 wohl noch nichts gehört, neuere Delphi-Versionen habe ich nicht getestet ob die Handarbeit da noch nötig ist.

himitsu 28. Mär 2021 18:26

AW: Nur Stringgrid transparent ?
 
Seit mindestens Delphi 10.irgendwas ist das im Standardmanifest mit drin. (man kann da sogar Admin und HighDPI aktivieren)

Der schöne Günther 28. Mär 2021 19:27

AW: Nur Stringgrid transparent ?
 
Ja, das gibt es in 10.0 Seattle auch, aber im Manifest war anscheinend noch nicht explizit enthalten, dass man schon mal etwas von Windows 8 gehört hat. Jedenfalls hatte ich genau diesen Fehler auch, und nachdem ich von Hand einfach mal folgendes Beispiel-Manifest in den Projektoptionen eingebunden habe ging alles.

https://docs.microsoft.com/en-us/win...at-windows-8-1


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 Uhr.
Seite 1 von 2  1 2      

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