Autor Beitrag
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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 :roll: )

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
oPPi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 66

MS Win 7 Pro, WinXP Pro
D3 Pro, TurboDelhi, Kylix 3 Pro
BeitragVerfasst: Mi 06.08.03 10:58 
Titel: RE: Formbereiche Transparent machen
Hy,

probiers mal hiermit vielleicht meinste ja sowas:
ausblenden 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;

//Fenster schließen
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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:

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
maxk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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



BeitragVerfasst: Mi 06.08.03 14:06 
Das Stichwort heißt Regions.
maxk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Mi 06.08.03 21:45 
Ich hab's. Mit diesem Thread, bin ich auf die Idee gekommen.
ausblenden 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 user profile iconTino: Delphi-Tags hinzugefügt.

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Thunder00
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: 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:
ausblenden 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; 


//für elliptische Formulare: 
procedure TForm1.FormCreate(Sender: TObject); 
var h: THandle; 
begin 
inherited
h := CreateEllipticRgn(Left, Top, Width, Height); 
SetWindowRgn(Handle,h,TRUE); 
end

//für Transparenten Hintergrund: 
procedure TForm1.WMEraseBkGnd(Var Msg: TWMEraseBkGnd); 
begin 
{ kein Hintergrund = Transparent ! } 
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:
ausblenden Delphi-Quelltext
1:
2:
procedure WMNCHitTest(var M: TWMNCHitTest);
  message wm_NCHitTest;

Und hier die eigentliche Implementation der Procedure:
ausblenden 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 user profile iconTino: Delphi-Tags hinzugefügt.

_________________
If you can't make it good, at least make it looks good. (Bill Gates)
maxk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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:

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
oPPi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 66

MS Win 7 Pro, WinXP Pro
D3 Pro, TurboDelhi, Kylix 3 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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:
ausblenden Quelltext
1:
2:
BeginPath()
EndPath()

erstellst du einen Pfad und mit
ausblenden Quelltext
1:
PathToRegion					

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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 17

Win 98 SE, SuSE 8.2 Prof
D5 Prof, D6 Ente, Kylix
BeitragVerfasst: 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!