Transparente Form
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Re: Transparente Form
Hi Kuster Peter,
Ich habe etwas ähnliches vor... ^^
Ich habe etwas ähnliches vor... ^^
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: Transparente Form
Der Code ist nur, um die Windows-Version zu ermitteln, damit es keine Fehler unter Win98 gibt.Kuster Peter hat geschrieben:Ich habe Windows und der Compiler reklamiert schon bei folender Zeile:
Info: TOSVersionInfo;
Folgender Code hat diese Überprüfung nicht:
Code: Alles auswählen
procedure MakeTransparent(AHandle: THandle; AValue: byte = 0);
var
SetLayeredWindowAttributes: TSetLayeredWindowAttributes;
var i: Integer;BValue:Byte;
begin
SetLayeredWindowAttributes := GetProcAddress(GetModulehandle(user32),'SetLayeredWindowAttributes');
if Assigned(SetLayeredWindowAttributes) then
begin
SetWindowLong(AHandle, GWL_EXSTYLE, GetWindowLong(AHandle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(AHandle, 0, AValue, LWA_ALPHA);
end;
end;
-
- Beiträge: 205
- Registriert: So 2. Dez 2007, 20:47
- OS, Lazarus, FPC: Windows XP Lazarus immer neueste Version
- CPU-Target: xxBit
- Wohnort: Schweiz
Re: Transparente Form
Nun reklamiert der Compiler bei dieser Zeile:
var SetLayeredWindowAttributes: TSetLayeredWindowAttributes;
Ich habe da eine Idee, kann man als Hintergrund anstelle einer Farbe nicht einfach ein GIF Laden, das einen Transparenten Hintergrund hat?
Peter
var SetLayeredWindowAttributes: TSetLayeredWindowAttributes;
Ich habe da eine Idee, kann man als Hintergrund anstelle einer Farbe nicht einfach ein GIF Laden, das einen Transparenten Hintergrund hat?
Peter
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Transparente Form
Wohl kaum, hast du auch alle notwendigen Units eingebunden ?
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 205
- Registriert: So 2. Dez 2007, 20:47
- OS, Lazarus, FPC: Windows XP Lazarus immer neueste Version
- CPU-Target: xxBit
- Wohnort: Schweiz
Re: Transparente Form
Hallo Pluto
Das scheint das Problem zu sein. Kannst Du mir sagen, welche Units ich noch einbinden muss.
Dann habe ich den Code gleich unter Implementation eingefügt.
Gruss
Peter
Das scheint das Problem zu sein. Kannst Du mir sagen, welche Units ich noch einbinden muss.
Dann habe ich den Code gleich unter Implementation eingefügt.
Gruss
Peter
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Transparente Form
Da kann ich dir leider nicht weiter helfen, du müsstest mal im Lazarus Verzeichnis nach diesem Datentypen suchen: TSetLayeredWindowAttributes vielleicht findest du so etwas. Aber API Funktionen verbergen sich häufig auch in diesen Dateien: LCLProc, LCLInft, LCLType, Window(s)?
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: Transparente Form
Das Objekt scheint es nicht zu geben... Da müsste man eventuell den Delphi-Code dazu übersetzen, oder es direkt importieren. Was passiert, wenn du
definierst?
Code: Alles auswählen
TSetLayeredWindowAttributes = Pointer;
-
- Beiträge: 205
- Registriert: So 2. Dez 2007, 20:47
- OS, Lazarus, FPC: Windows XP Lazarus immer neueste Version
- CPU-Target: xxBit
- Wohnort: Schweiz
Re: Transparente Form
In Uses Windows, LCLType, LCLProc erfasst, die selbe Fehlermeldung.
TSetLayeredWindowAttributes = Pointer; Will er nicht akzeptieren.
Egal, geht es halt unter Windows nicht.
Peter
TSetLayeredWindowAttributes = Pointer; Will er nicht akzeptieren.
Egal, geht es halt unter Windows nicht.
Peter
-
- Beiträge: 205
- Registriert: So 2. Dez 2007, 20:47
- OS, Lazarus, FPC: Windows XP Lazarus immer neueste Version
- CPU-Target: xxBit
- Wohnort: Schweiz
Re: Transparente Form
Habe folgenden Post zum selben Thema gelesen:
http://www.delphipraxis.net/topic167749 ... t+100.html" onclick="window.open(this.href);return false;
Leider wird nun der Hintergrund anstatt durchsichtig, schwarz angezeigt.
Peter
http://www.delphipraxis.net/topic167749 ... t+100.html" onclick="window.open(this.href);return false;
Leider wird nun der Hintergrund anstatt durchsichtig, schwarz angezeigt.
Peter
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Transparente Form
Leider habe ich bei mir kein Windows, aber hast du schon mal in allen Dateien geschaut ? Unter Windows müsstest du es über die F3 Taste regeln können.Egal, geht es halt unter Windows nicht.
Dort einfach das Lazarus Verzeichnis oder das FPC Verzeichnis angeben und los suchen, wenn es sie noch nicht gibt könntest du sie Versuchen zu Importieren, hier dürfte glaube ich Theo ein Experte sein oder ?
Weißt du wie ich meine ? Einfach mal auf msn(hieß das so?) schauen, in welcher DLL diese Struktur / Funktionen zu finden sind, mit etwas Glück kannst du dir einen Header erstellen.
Lazarus ist OpenSoruce, das ist ein Großer Vorteil in sehr vielen fällen, genau wie hier.
Windows sollte es doch an sich unterstützen oder ?
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 1
- Registriert: Mi 29. Sep 2010, 17:16
Re: Transparente Form
The following Code works for Windows (7) (thx to everybody who has contributed to what I 'borrowed' from here!):
Der folgende Code funktioniert bei mir unter Windoof (habe ich mir von hier zusammengeklaut, danke an alle Poster!):
Dont forget:
Uses: Windows nicht vergessen.
Es wird nicht nur die Form transparent, sondern auch das als ressource eingebundenen png.
Achtung: Der Hintergrund der Form muss die oben angegebene Farbe bekommen (hier: clNavy)
The code does not only render the form transparent, but also the png image on Image1 (included via *.res file)
The Form1.Color attribute has to be clNavy for the example to work, or change the code accordingly.
Gruss: Johnny
Bye: Johnny
Der folgende Code funktioniert bei mir unter Windoof (habe ich mir von hier zusammengeklaut, danke an alle Poster!):
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var
Rgn : HRGN;
begin
Image1.Picture.LoadFromLazarusResource('StdPlan201011');
Image2.Picture.LoadFromLazarusResource('hide');
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle,clNavy,255,LWA_COLORKEY);
Form1.Image1.Transparent:=True;
Form1.Image1.Picture.Bitmap.TransparentColor:=clNavy;
//clNavy is the color that will be transparent. clNavy wird transparent
end;
Uses: Windows nicht vergessen.
Es wird nicht nur die Form transparent, sondern auch das als ressource eingebundenen png.
Achtung: Der Hintergrund der Form muss die oben angegebene Farbe bekommen (hier: clNavy)
The code does not only render the form transparent, but also the png image on Image1 (included via *.res file)
The Form1.Color attribute has to be clNavy for the example to work, or change the code accordingly.
Gruss: Johnny
Bye: Johnny
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: Transparente Form
In /examples/shapedcontrols steht ein Beispiel wie transparente Bereiche plattformübergreifend festgelegt werden können (wohl sogar für beliebige Controls).
Ist aber möglich, dass in 0.9.28 das ganze nur bei Komponenten ohne Parent funktioniert. In der SVN ist meines Wissens der Fehler behoben (war zumindest mal).
Evtl könnte noch ein Hinzufügen folgender Zeile wichtig sein:
Ist aber möglich, dass in 0.9.28 das ganze nur bei Komponenten ohne Parent funktioniert. In der SVN ist meines Wissens der Fehler behoben (war zumindest mal).
Evtl könnte noch ein Hinzufügen folgender Zeile wichtig sein:
Code: Alles auswählen
ABitmap.PixelFormat := pf1bit;
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)