Difference between revisions of "Aero Glass/de"

From Lazarus wiki
Jump to navigationJump to search
(→‎Bugs: translated)
Line 151: Line 151:
 
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)".
  
== Bugs ==
+
==Fehler==
  
As you can see in the first image Labels aren't displayed fine in Aero Glass, there are links with components and code that show how to make "Glow Label's":
+
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":
  
 
*[http://development.mwcs.de/glowlabel.html GlowLabel for Delphi]
 
*[http://development.mwcs.de/glowlabel.html GlowLabel for Delphi]

Revision as of 20:59, 1 February 2011

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":

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

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:

<delphi>unit form1;

{$mode objfpc}{$H+}

interface

uses

 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs
 glass; // Dadurch wird die Prozedur 'GlassForm' verfügbar gemacht</delphi>

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

<delphi>procedure TForm1.FormActivate(Sender: TObject); begin

 GlassForm(Form1,clBlue); // Dies wendet den Aero-Glass-Effekt auf Form1 an  

end;</delphi>

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":

About

This was converted to Lazarus using "{$mode delphi}" from "Aero Glass Effekt für Delphi-Forms, Delphi-Unit von Daniel Mitte (2006)":