Autor |
Beitrag |
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Mi 06.08.03 10:08
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  )
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
oPPi
      
Beiträge: 66
MS Win 7 Pro, WinXP Pro
D3 Pro, TurboDelhi, Kylix 3 Pro
|
Verfasst: 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 
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Mi 06.08.03 13:44
Ich wollte gerade schreiben, dass das bei Forms nicht geht. Dann habe ich es ausprobiert
Es funktioniert 
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
maxk 
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: 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
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Zuletzt bearbeitet von maxk am Mi 06.08.03 21:46, insgesamt 1-mal bearbeitet
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 06.08.03 14:06
Das Stichwort heißt Regions.
|
|
maxk 
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: 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.
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
maxk 
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Mi 06.08.03 21:45
Ich hab's. Mit diesem Thread, 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
Moderiert von Tino: Delphi-Tags hinzugefügt.
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
Thunder00
      
Beiträge: 52
|
Verfasst: 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.
_________________ If you can't make it good, at least make it looks good. (Bill Gates)
|
|
maxk 
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: 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.
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: 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 
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
oPPi
      
Beiträge: 66
MS Win 7 Pro, WinXP Pro
D3 Pro, TurboDelhi, Kylix 3 Pro
|
Verfasst: 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 
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: 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.
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: 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
Quelltext
erstellst du aus diesem Pfad eine Region die du dann ganz einfach mit SetWindowRgn deinem Fenster zuweisen kannst!
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
Frase
      
Beiträge: 17
Win 98 SE, SuSE 8.2 Prof
D5 Prof, D6 Ente, Kylix
|
Verfasst: 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.
_________________ LINUX 4 EVER!
|
|