Difference between revisions of "Aero Glass/de"

From Lazarus wiki
Jump to navigationJump to search
m (Text replace - "delphi>" to "syntaxhighlight>")
Line 7: Line 7:
 
Speichern Sie zuerst den nachfolgenden Code in einer Textdatei namens "glass.pas":
 
Speichern Sie zuerst den nachfolgenden Code in einer Textdatei namens "glass.pas":
  
<delphi>// Aero Glass Effekt für Delphi-Forms
+
<syntaxhighlight>// Aero Glass Effekt für Delphi-Forms
 
//
 
//
 
// Mit der Methode GlassForm kann für eine Form der
 
// Mit der Methode GlassForm kann für eine Form der
Line 124: Line 124:
 
end;
 
end;
 
    
 
    
end.</delphi>
+
end.</syntaxhighlight>
  
 
Kopieren Sie die Datei "glass.pas" in den Hauptordner Ihres Projektes:
 
Kopieren Sie die Datei "glass.pas" in den Hauptordner Ihres Projektes:
Line 132: Line 132:
 
Fügen Sie im Abschnitt "uses" Ihres Projektes das Wort "glass" hinzu:
 
Fügen Sie im Abschnitt "uses" Ihres Projektes das Wort "glass" hinzu:
  
<delphi>unit form1;
+
<syntaxhighlight>unit form1;
 
    
 
    
 
{$mode objfpc}{$H+}
 
{$mode objfpc}{$H+}
Line 140: Line 140:
 
uses
 
uses
 
   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs
 
   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs
   glass; // Dadurch wird die Prozedur 'GlassForm' verfügbar gemacht</delphi>
+
   glass; // Dadurch wird die Prozedur 'GlassForm' verfügbar gemacht</syntaxhighlight>
  
 
Rufen Sie diese Prozedur im 'OnActivate'-Ereignis eines jeden Formulars auf:
 
Rufen Sie diese Prozedur im 'OnActivate'-Ereignis eines jeden Formulars auf:
  
<delphi>procedure TForm1.FormActivate(Sender: TObject);
+
<syntaxhighlight>procedure TForm1.FormActivate(Sender: TObject);
 
begin
 
begin
 
   GlassForm(Form1,clBlue); // Dies wendet den Aero-Glass-Effekt auf Form1 an   
 
   GlassForm(Form1,clBlue); // Dies wendet den Aero-Glass-Effekt auf Form1 an   
end;</delphi>
+
end;</syntaxhighlight>
  
 
Außerdem müssen Sie ''Themen'' aktivieren, um diese Prozedur einsetzen zu können. Gehen Sie dazu zu Projektinspektor > Einstellungen > Projekteinstellungen > und wählen Sie "Themen mit Manifest-Datei einschalten (nur in Windows)".
 
Außerdem müssen Sie ''Themen'' aktivieren, um diese Prozedur einsetzen zu können. Gehen Sie dazu zu Projektinspektor > Einstellungen > Projekteinstellungen > und wählen Sie "Themen mit Manifest-Datei einschalten (nur in Windows)".

Revision as of 14:46, 24 March 2012

Deutsch (de) English (en) español (es) polski (pl)

Der Aero-Glass-Effekt in einem Lazarus-Formular

aero glass lazarus.png

Speichern Sie zuerst den nachfolgenden Code in einer Textdatei namens "glass.pas":

// Aero Glass Effekt für Delphi-Forms
//
// Mit der Methode GlassForm kann für eine Form der
// Aero Glass Effekt unter Vista aktiviert werden.
// Der erste Parameter ist die Form-Klasse, der zweite
// optionale Parameter ist der BlurColorKey. Mit dem
// BlurColorKey wird eine Farbe festgelegt, auf dem
// der Effekt wirken soll, d.h. benutzt eine Komponente,
// auf der Form, für visuelle Darstellungen (Linien, Punkte,
// Bilder, ...), diese Farbe, so wird an dieser Stelle der
// Effekt wirksam. Der Standardwert für BlurColorKey ist
// clFuchsia.
//
// Hinweis: Für die Aktivierung wird zusätzlich TXPManifest
// bzw. eine RES-Datei die die Manifest-Daten
// enthält benötigt.
//
//
// Delphi-Unit von Daniel Mitte (2006)
//
//
// Beispiel:
//
// uses glass;
//
// [...]
//
// procedure TForm1.FormActivate(Sender: TObject);
// begin
// GlassForm(Form1);
// // oder mit anderem BlurColorKey
// // GlassForm(Form1, clBlue)
// end;

unit glass;
  
interface
  
{$mode delphi}
  
uses
  Windows,
  Forms,
  Graphics;
  
procedure GlassForm(frm: TForm; cBlurColorKey: TColor = clFuchsia);
  
implementation
  
procedure GlassForm(frm: TForm; cBlurColorKey: TColor = clFuchsia);
const
  WS_EX_LAYERED = $80000;
  LWA_COLORKEY = 1;
  
type
  _MARGINS = packed record
    cxLeftWidth: Integer;
    cxRightWidth: Integer;
    cyTopHeight: Integer;
    cyBottomHeight: Integer;
  end;
  PMargins = ^_MARGINS;
  TMargins = _MARGINS;
  
  DwmIsCompositionEnabledFunc = function(pfEnabled: PBoolean): HRESULT; stdcall;
  DwmExtendFrameIntoClientAreaFunc = function(destWnd: HWND; const pMarInset: PMargins): HRESULT; stdcall;
  SetLayeredWindowAttributesFunc = function(destWnd: HWND; cKey: TColor; bAlpha: Byte; dwFlags: DWord): BOOL; stdcall;
  
var
  hDWMDLL: Cardinal;
  osVinfo: TOSVERSIONINFO;
  fDwmIsCompositionEnabled: DwmIsCompositionEnabledFunc;
  fDwmExtendFrameIntoClientArea: DwmExtendFrameIntoClientAreaFunc;
  fSetLayeredWindowAttributesFunc: SetLayeredWindowAttributesFunc;
  bCmpEnable: Boolean;
  mgn: TMargins;
  
begin
  ZeroMemory(@osVinfo, SizeOf(osVinfo));
  OsVinfo.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFO);
  
  if ((GetVersionEx(osVInfo) = True) and (osVinfo.dwPlatformId = VER_PLATFORM_WIN32_NT) and (osVinfo.dwMajorVersion >= 6)) then
  begin
    hDWMDLL := LoadLibrary('dwmapi.dll');
  
    if hDWMDLL <> 0 then
    begin
      @fDwmIsCompositionEnabled := GetProcAddress(hDWMDLL, 'DwmIsCompositionEnabled');
      @fDwmExtendFrameIntoClientArea := GetProcAddress(hDWMDLL, 'DwmExtendFrameIntoClientArea');
      @fSetLayeredWindowAttributesFunc := GetProcAddress(GetModulehandle(user32), 'SetLayeredWindowAttributes');
  
      if ((@fDwmIsCompositionEnabled <> nil) and (@fDwmExtendFrameIntoClientArea <> nil) and (@fSetLayeredWindowAttributesFunc <> nil)) then
      begin
        fDwmIsCompositionEnabled(@bCmpEnable);
  
        if bCmpEnable = True then
        begin
          frm.Color := cBlurColorKey;
  
          SetWindowLong(frm.Handle, GWL_EXSTYLE, GetWindowLong(frm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
          fSetLayeredWindowAttributesFunc(frm.Handle, cBlurColorKey, 0, LWA_COLORKEY);
  
          ZeroMemory(@mgn, SizeOf(mgn));
          mgn.cxLeftWidth := -1;
          mgn.cxRightWidth := -1;
          mgn.cyTopHeight := -1;
          mgn.cyBottomHeight := -1;
  
          fDwmExtendFrameIntoClientArea(frm.Handle, @mgn);
        end;
      end;
  
      FreeLibrary(hDWMDLL);
    end;
  end;
end;
  
end.

Kopieren Sie die Datei "glass.pas" in den Hauptordner Ihres Projektes:

 MeinProjekt\glass.pas
 

Fügen Sie im Abschnitt "uses" Ihres Projektes das Wort "glass" hinzu:

unit form1;
  
{$mode objfpc}{$H+}
  
interface
  
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs
  glass; // Dadurch wird die Prozedur 'GlassForm' verfügbar gemacht

Rufen Sie diese Prozedur im 'OnActivate'-Ereignis eines jeden Formulars auf:

procedure TForm1.FormActivate(Sender: TObject);
begin
  GlassForm(Form1,clBlue); // Dies wendet den Aero-Glass-Effekt auf Form1 an  
end;

Außerdem müssen Sie Themen aktivieren, um diese Prozedur einsetzen zu können. Gehen Sie dazu zu Projektinspektor > Einstellungen > Projekteinstellungen > und wählen Sie "Themen mit Manifest-Datei einschalten (nur in Windows)".

Fehler

Wie Sie sehen können, werden die Labels im ersten Bild nicht sehr schön dargestellt in Aero Glass. Es folgen einige Links zu Komponenten und Code die zeigen, wie man "Labels zum Leuchten bringt":

Über

Diese Komponente wurde zu Lazarus konvertiert mit "{$mode delphi}". Sie stammt her von "Aero Glass Effekt für Delphi-Forms, Delphi-Unit von Daniel Mitte (2006)":

Es gibt eine Delphi-Komponente (die nach Lazarus portiert werden könnte) hier: