[gelöst] Form.AlphaBlend unter Windows

Rund um die LCL und andere Komponenten
Antworten
Olafr82110
Beiträge: 6
Registriert: Do 25. Okt 2012, 09:16

[gelöst] Form.AlphaBlend unter Windows

Beitrag von Olafr82110 »

Hi,
ich hab da ein kleines Problem. Ich habe ein Formular, das ich, wenn es den Focus verliert gerne durchscheinend machen würde.
Also hat sich klein Olaf gedacht, einfach in application.ondeactivate ein

Code: Alles auswählen

 
form.alphablend:=true; 
form.alphablendvalue:=128;
 
und gut ist. Ists aber genau nicht. Ich schaffe es nicht das Fenster nachträglich transparent zu bekommen. Wenn ich das ganze zur Designtime mache ist alles wunderbar. Also neu zeichen. Aber wie?
Ich hab irgendwo gelesen mit form.invalidate solls angeblich gehen, aber entweder bin ich zu doof dafür oder da passt was nicht.

Hat irgendjemand nen Tip?

Gruß,
Olaf
Zuletzt geändert von Lori am Mo 6. Mai 2013, 16:37, insgesamt 2-mal geändert.
Grund: richtiger Highlighter

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Form.AlphaBlend unter Windows

Beitrag von Socke »

Olafr82110 hat geschrieben:Also hat sich klein Olaf gedacht, einfach in application.ondeactivate ein

Code: Alles auswählen

 
form.alphablend:=true; 
form.alphablendvalue:=128;
 
Application.OnDeactivate hat vermutlich etwas mit der gesamten Anwendung zu tun; Am besten zeigst du etwas mehr Quelltext, damit man sicherstellen kann, dass die Methode auch wirklich aufgerufen wird.

Andereseits könntest du das auch für deine Formulare machen; wähle in der IDE dein Formular aus und suche dir ein passendes Ereignis aus (z.B. OnDeactivate).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Olafr82110
Beiträge: 6
Registriert: Do 25. Okt 2012, 09:16

Re: Form.AlphaBlend unter Windows

Beitrag von Olafr82110 »

Ah, das hätt ich noch schreiben können: Der ondeactivate Teil ist unkritisch. Will sagen, die Anweisungen werden, zumindest laut Debugger, durchlaufen. Nur scheinen sie nichts zu bewirken. Und form.ondeactivate greift nur wenn zu einem anderen Formular der gleichen Applikation gewechselt wird. Wird der Kontext der Applikation "verlassen" greift application.ondeactivate.
Über das Problem bin ich auch schon gestolpert. :wink:

Gruß,
Olaf

Benutzeravatar
theo
Beiträge: 10905
Registriert: Mo 11. Sep 2006, 19:01

Re: Form.AlphaBlend unter Windows

Beitrag von theo »

Hier unter Wine geht das wunderbar mit Lazarus 1.1 r40260:41034M FPC 2.7.1 x86_64-linux-gtk 2

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnDeactivate:=@AppDeactivate;
  Application.OnActivate:=@AppActivate;
end;   
 
procedure TForm1.AppDeactivate(Sender: TObject);
begin
  AlphaBlendValue:=128;
  AlphaBlend:=true;
end;
 
procedure TForm1.AppActivate(Sender: TObject);
begin
  AlphaBlend:=false;
end;
 
Zuletzt geändert von theo am Mo 6. Mai 2013, 14:51, insgesamt 1-mal geändert.

Olafr82110
Beiträge: 6
Registriert: Do 25. Okt 2012, 09:16

Re: Form.AlphaBlend unter Windows

Beitrag von Olafr82110 »

Ach ne... :shock:
Bei mir siehts so aus:

Code: Alles auswählen

 
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Application.OnDeactivate:=@AppDeactivate;
      Application.OnActivate:=@AppActivate;
    end;   
 
    procedure TForm1.AppDeactivate(Sender: TObject);
    begin
      Form1.AlphaBlendValue:=128;
      Form1.AlphaBlend:=true;
    end;
 
    procedure TForm1.AppActivate(Sender: TObject);
      Form1.AlphaBlend:=false;
    end;
 
und da funktionierts nicht. Laß ich das Form1 vor den "Alphas" weg gehts. Hab ich da nen Denkfehler drin?

Gruß,
Olaf
Zuletzt geändert von Lori am Mo 6. Mai 2013, 16:37, insgesamt 1-mal geändert.
Grund: richtiger Highlighter

Benutzeravatar
theo
Beiträge: 10905
Registriert: Mo 11. Sep 2006, 19:01

Re: Form.AlphaBlend unter Windows

Beitrag von theo »

Funktional ist da bei mir kein Unterschied.

Aber es ist natürlich nicht optimal, in einer Methode der Klasse TForm1 "sich selbst" via der globalen Variablen "Form1" zu referenzieren.

Olafr82110
Beiträge: 6
Registriert: Do 25. Okt 2012, 09:16

Re: Form.AlphaBlend unter Windows

Beitrag von Olafr82110 »

Hmmm. Auch wieder klar. Seis drum, jetzt funktionierts. Besten Dank für die Hilfe.

Gruß,
Olaf

Antworten