Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Formbereiche Transparent machen
maxk - Mi 06.08.03 10:08
Titel: Formbereiche Transparent machen
Hi,
ich habe auf meinem Form nur ein Label (Caption='Test'; Transparent=True). Logischer Weise, ist von der Transparenz nicht zu sehen, da das Form nicht durchsichtig ist :schade:. Gerade das soll aber so sein. Ich weiß, dass ich Windows mitteilen muss, dass meine Fensterkoordinaten kein Rechteck bilden. Aber wie sage ich Windows, dass mein Fenster nur die Schrift ist. Ich möchte nicht über Images arbeiten, da sich der Inhalt unter meinem Fenster oft ändert. (Wer jetzt noch weiß, was meine Frage ist, hat einen Award verdient :roll: )
oPPi - Mi 06.08.03 10:58
Titel: RE: Formbereiche Transparent machen
Hy,
probiers mal hiermit vielleicht meinste ja sowas:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.FormCreate(sender: TObject); begin Form1.Brush.Style:=bsClear; Form1.BorderStyle:=bsNone; end;
procedure TForm1.BitBtn1Click(Sender: TObject); begin Application.Terminate; end; |
Mußt nur noch in deinem Label.Transparent := True setzten und schon haste das was du wolltest, so wie ich dich verstanden habe.
Gruß
oPPi
maxk - Mi 06.08.03 13:44
Ich wollte gerade schreiben, dass das bei Forms nicht geht. Dann habe ich es ausprobiert :lol:
Es funktioniert :party:
maxk - Mi 06.08.03 14:01
Mist, es funktioniert doch nicht so, wie ich es wollte. Zwar funktioniert der Trick über Brush.Style:
Bild entfernt
Ändert sich aber das Fenster unter dem Programm:
Bild entfernt
D.h. eigentlich arbeitet auch diese Methode mit Images - nur das Delphi sich darum kümmert. Auffällig ist, dass der Hintergrund aktualisiert wird, wenn Windows das Fenster anweist, sich neu zu zeichnen. Also ist eine folgefrage, was ich machen muss, damit das Fenster neugezeichnet wird (Repaint funktioniert nicht).
maxk
PS: Auch über eine andere Lösung des Transparenzproblems wäre ich dankbar.
Edit: Bilder entfernt
Delete - Mi 06.08.03 14:06
Das Stichwort heißt Regions.
maxk - Mi 06.08.03 21:28
Genau, ich glaube die Funktion heißt SetWindowRegion();. Aber wie bekomme ich diese Region - es handelt sich ja nicht um einfache Formen wie Kreise oder Rechtecke. Sondern Text, der sich im laufe des Progs ändert.
maxk - Mi 06.08.03 21:45
Ich hab's. Mit
diesem Thread [
http://www.delphi-forum.de/viewtopic.php?t=13458], bin ich auf die Idee gekommen.
Delphi-Quelltext
1: 2: 3: 4: 5:
| FormStyle:=fsStayOnTop; BorderStyle:=bsNone; Color:=clWhite; TransparentColor:=True; TransparentColorValue:=clWhite; |
Das Delphi-Forum ist Klasse :D
Moderiert von
Tino: Delphi-Tags hinzugefügt.
Thunder00 - Mi 06.08.03 22:09
Hey Leute.
Ich hab das fette Problem, dass ich bis jetzt mit allen Methoden kein Erfolg hatte.
Diese hier:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure FormCreate(Sender: TObject); procedure WMEraseBkGnd(var Msg: TWMEraseBkGnd); message WM_EraseBkGnd;
procedure TForm1.FormCreate(Sender: TObject); var h: THandle; begin inherited; h := CreateEllipticRgn(Left, Top, Width, Height); SetWindowRgn(Handle,h,TRUE); end;
procedure TForm1.WMEraseBkGnd(Var Msg: TWMEraseBkGnd); begin end; |
und die von oPPi. Ich führe das auf die EasyMove-Funktion zurück, die bei mir noch is.. die sieht so aus:
Diese Procedure musst Du im Private-Abschnitt deklarieren:
Delphi-Quelltext
1: 2:
| procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest; |
Und hier die eigentliche Implementation der Procedure:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.WMNCHitTest (var M: TWMNCHitTest); begin inherited; if M.Result = htClient then M.Result := htCaption; end; |
Ich hab grad noch andere EasyMove-Funktionen gefunden. Ich probier die ma aus, ob es da einbahnfrei funzt... danke schonma...
oPPi's Version is echt genai!
cu
Moderiert von
Tino: Delphi-Tags hinzugefügt.
maxk - Do 07.08.03 15:41
Das Arbeiten mit TransparentColor hat noch einen weiteren Vorteil: Das Form ist nicht nur Transparent, sondern auch (nicht vorhanden). D.h. ein Klick auf die transparente Fläche landet auf dem Fenster unter der App. - Toll!
Mit SetWindowRGN müsste das auch funktionieren.
Delete - Do 07.08.03 15:54
Biutte beachten:
Delphi-Hilfe hat folgendes geschrieben: |
Note:
TransparentColor does not work on all systems. The application must be running under Windows 2000 or better, and the machine must be a P90 or better
|
maxk - Do 07.08.03 15:57
Nein! Das darf doch nicht wahr sein - immer wenn man denkt, dass alles glatt läuft, gibt es doch noch einen Haken. Damit ist die Frage wieder unbeantwortet :cry:
oPPi - Do 07.08.03 19:26
Also ich hab jetzt mal meinen weiter oben geposteten Quelltext unter
1. WinME (@Luckie)
2. W2k
3. WinXP
getestet und da wird die Form transparent angezeigt, wie das unter Win9x aussieht kann ich leider nicht sagen da ich kein Win98 (SE) mehr am laufen hab.
gruß
oPPi
maxk - Fr 08.08.03 22:38
oPPi hat folgendes geschrieben: |
Also ich hab jetzt mal meinen weiter oben geposteten Quelltext unter
1. WinME (@Luckie)
2. W2k
3. WinXP
getestet und da wird die Form transparent angezeigt, wie das unter Win9x aussieht kann ich leider nicht sagen da ich kein Win98 (SE) mehr am laufen hab. |
Das Problem ist ein Anderes. Die Form ist nicht transparent, sondern nur auf einem Bild, dass den Hintergrund enthält.
Motzi - Sa 09.08.03 13:54
Leute... Luckie hat doch bereits gesagt das Stichwort heißt
Regions!!
Damit kann man auch komplexe Regionen wie zB Schriftzüge erstellen (nicht nur einfach Ellipsen etc)!
Mit:
Quelltext
1: 2:
| BeginPath() EndPath() |
erstellst du einen Pfad und mit
erstellst du aus diesem Pfad eine Region die du dann ganz einfach mit SetWindowRgn deinem Fenster zuweisen kannst!
Frase - So 10.08.03 21:14
Luckie hat recht. Beziehungsweise die Delphi-Hilfe.
Die Transparenz funktioniert laut Delphi-Hilfe nur auf XP und 2000.
Ist WinME eigentlich vor oder nach Win2000 rusgekommen? Es heißt ja schließlich Millenium-Edition.
Ich jedenfalls hab noch ein 98 SE und da geht die Transparenz nicht.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!