Transparente Form

Teekeks
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

Beitrag von Teekeks »

Hi Kuster Peter,
Ich habe etwas ähnliches vor... ^^

Targion
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

Beitrag von Targion »

Kuster Peter hat geschrieben:Ich habe Windows und der Compiler reklamiert schon bei folender Zeile:
Info: TOSVersionInfo;

Der Code ist nur, um die Windows-Version zu ermitteln, damit es keine Fehler unter Win98 gibt.
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;

Kuster 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

Beitrag von Kuster Peter »

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

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Transparente Form

Beitrag von pluto »

Wohl kaum, hast du auch alle notwendigen Units eingebunden ?
MFG
Michael Springwald

Kuster 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

Beitrag von Kuster Peter »

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

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Transparente Form

Beitrag von pluto »

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

Targion
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

Beitrag von Targion »

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

Code: Alles auswählen

TSetLayeredWindowAttributes = Pointer;
definierst?

Kuster 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

Beitrag von Kuster Peter »

In Uses Windows, LCLType, LCLProc erfasst, die selbe Fehlermeldung.

TSetLayeredWindowAttributes = Pointer; Will er nicht akzeptieren.

Egal, geht es halt unter Windows nicht.

Peter

Kuster 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

Beitrag von Kuster Peter »

Habe folgenden Post zum selben Thema gelesen:

http://www.delphipraxis.net/topic167749 ... t+100.html

Leider wird nun der Hintergrund anstatt durchsichtig, schwarz angezeigt.

Peter

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Transparente Form

Beitrag von pluto »

Egal, geht es halt unter Windows nicht.

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.
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

johnnysinzig
Beiträge: 1
Registriert: Mi 29. Sep 2010, 17:16

Re: Transparente Form

Beitrag von johnnysinzig »

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!):

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;


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

u-boot
Beiträge: 306
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

Beitrag von u-boot »

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:

Code: Alles auswählen

ABitmap.PixelFormat := pf1bit;
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Antworten