BGRA Ribbon

Zur Vorstellung von Komponenten und Units für Lazarus

Re: BGRA Ribbon

Beitragvon Soner » 22. Mär 2016, 22:18 Re: BGRA Ribbon

coasting hat geschrieben:...
Ich habe eine neue Version im ersten Post hochgeladen. Die ist nun Resizable und Moveable. Allerdings fehlt noch der Schatten der Form.
..


Deaktiviere dein Code hier:
Code: Alles auswählen
 
procedure TfrmMain.FormActivate(Sender: TObject);
begin
{ von Soner: Nich nötig!
  if not FormStyleModifyDone then
    begin
      SetWindowLong(Handle,GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not WS_CAPTION);
      // Sample instruction to force Redraw (including title area)
      //   There are probably smarter solutions
//      MoveWindow(Handle, Left, Top, Width-1, Height, True);
      FormStyleModifyDone := True;
    end;}

 
end;
 


Und füge hier einige Zeilen:
Code: Alles auswählen
 
procedure TfrmMain.FormCreate(Sender: TObject);
begin
{ TODO : Loading / Saving of configuration -> TXMLConfig}
 
  BorderStyle:=bsNone;
  //Füge die nächsten 3 Zeilen hinzu ------------------------------------
  // vergiß uses LCLIntf; nicht.
  SetWindowLong(Handle,GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) or WS_THICKFRAME);
  ClientHeight:=Height;
  Refresh;
  // ------------------------------------ bis hier
//  Doublebuffered := True;   
 

Dann hast du dein Schatten, aber mit Windowsstandardrahmen.

Ich glaube wenn, man das Professional machen will kommt man nicht um nicht-Client-Bereiche selbst zu zeichnen. Du kannst im Internet nach "wm_ncpaint" und "wm_nccalcsize" suchen.
Soner
 
Beiträge: 411
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

Beitragvon coasting » 22. Mär 2016, 23:05 Re: BGRA Ribbon

Soner hat geschrieben:
Deaktiviere dein Code hier:
Code: Alles auswählen
 
procedure TfrmMain.FormActivate(Sender: TObject);
begin
{ von Soner: Nich nötig!
  if not FormStyleModifyDone then
    begin
      SetWindowLong(Handle,GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not WS_CAPTION);
      // Sample instruction to force Redraw (including title area)
      //   There are probably smarter solutions
//      MoveWindow(Handle, Left, Top, Width-1, Height, True);
      FormStyleModifyDone := True;
    end;}

 
end;
 


Und füge hier einige Zeilen:
Code: Alles auswählen
 
procedure TfrmMain.FormCreate(Sender: TObject);
begin
{ TODO : Loading / Saving of configuration -> TXMLConfig}
 
  BorderStyle:=bsNone;
  //Füge die nächsten 3 Zeilen hinzu ------------------------------------
  // vergiß uses LCLIntf; nicht.
  SetWindowLong(Handle,GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) or WS_THICKFRAME);
  ClientHeight:=Height;
  Refresh;
  // ------------------------------------ bis hier
//  Doublebuffered := True;   
 

Dann hast du dein Schatten, aber mit Windowsstandardrahmen.

Ich glaube wenn, man das Professional machen will kommt man nicht um nicht-Client-Bereiche selbst zu zeichnen. Du kannst im Internet nach "wm_ncpaint" und "wm_nccalcsize" suchen.



Danke für den Tipp!

Welche Windows Version nutzt Du? Ich habe das Problem, das ich in Windows 10 dann einen weißen Rand am oberen Fenster habe und das die Form ein Stück kleiner wird, sobald ich ich die Titelleiste anklicke.

Siehe hier:
Screenshot.png

Gibts dafür eine Erklärung und evtl. eine Lösung?

Habe mittlerweile noch einen anderen Weg gefunden einen Schatten hinzubekommen.

Siehe hier:
Screenshot2.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
coasting
 
Beiträge: 21
Registriert: 30. Apr 2014, 13:32

Beitragvon wp_xyz » 22. Mär 2016, 23:58 Re: BGRA Ribbon

coasting hat geschrieben:Hmm... komisch. Wenn ich auf den Link klicke, wird die Seite angezeigt.

Aaah, geht - es war die Firefox-Erweiterung NoScript...
wp_xyz
 
Beiträge: 2611
Registriert: 8. Apr 2011, 08:01

Beitragvon Soner » 23. Mär 2016, 00:58 Re: BGRA Ribbon

Ich habe Windows 7 hier am Desktop. Beim mir ändert sich der Button Rechts unten, aber ich denke das hat mit dein Code zu tun, hier das Bild vor und nach:
bgraribbon.png

Ich lade mal das Beispiel von mir hoch.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Soner
 
Beiträge: 411
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

Beitragvon Soner » 23. Mär 2016, 01:10 Re: BGRA Ribbon

Bei dieser Vorgehensweise hast du auch das Problem, dass es beim maximieren den Bildschirm ganz verdeckt, deshalb muss man die Position und Größe von Windowstaskleiste bestimmen und des eigene Formular beim Maximieren entsprechend verkleinern.
Für das Position und Größenänderung des eigenen Formular brauchst du die WM_WINDOWPOSCHANGED-Nachricht von Windows.

https://msdn.microsoft.com/en-us/library/bb688195
Soner
 
Beiträge: 411
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

Beitragvon coasting » 23. Mär 2016, 10:31 Re: BGRA Ribbon

Soner hat geschrieben:Bei dieser Vorgehensweise hast du auch das Problem, dass es beim maximieren den Bildschirm ganz verdeckt, deshalb muss man die Position und Größe von Windowstaskleiste bestimmen und des eigene Formular beim Maximieren entsprechend verkleinern.
Für das Position und Größenänderung des eigenen Formular brauchst du die WM_WINDOWPOSCHANGED-Nachricht von Windows.

https://msdn.microsoft.com/en-us/library/bb688195


Habe nun folgenden Code für den Maximize Button. Damit wird ein Überzeichnen der Taskbar verhindert:

Code: Alles auswählen
  if frmMain.WindowState=wsNormal then
  begin
    frmMain.WindowState:=wsMaximized;
    { Set Form size to fit on screen and not to hide the taskbar}
    with Screen.WorkAreaRect do
      frmMain.SetBounds(Left, Top, Right - Left, Bottom - Top);
  end
  else
  begin
    frmMain.WindowState:=wsNormal;
  end;
 
coasting
 
Beiträge: 21
Registriert: 30. Apr 2014, 13:32

Beitragvon coasting » 23. Mär 2016, 10:52 Re: BGRA Ribbon

Soner hat geschrieben:Ich lade mal das Beispiel von mir hoch.

Vielen Dank!
Habe jedoch auch mit Deinem Beispiel das gleiche Problem in Windows 10. Oben ist ein weißer Rand, rechts und unten wird die Form beschnitten. Irgendwo hatte ich mal gelesen, das ab Windows 8 andere Fenstergeometrien benutzt werden. Werde mal schauen ob ich den Artikel wiederfinde.

coasting
coasting
 
Beiträge: 21
Registriert: 30. Apr 2014, 13:32

Beitragvon coasting » 23. Mär 2016, 17:30 Re: BGRA Ribbon

coasting hat geschrieben:
Soner hat geschrieben:Ich lade mal das Beispiel von mir hoch.

Vielen Dank!
Habe jedoch auch mit Deinem Beispiel das gleiche Problem in Windows 10. Oben ist ein weißer Rand, rechts und unten wird die Form beschnitten. Irgendwo hatte ich mal gelesen, das ab Windows 8 andere Fenstergeometrien benutzt werden. Werde mal schauen ob ich den Artikel wiederfinde.

coasting


Habe den Artikel noch nicht gefunden. Daher verwende ich erstmal CS_DROPSHADOW. Ein Update inkl. Sourcecode liegt im ersten Post.

coasting
coasting
 
Beiträge: 21
Registriert: 30. Apr 2014, 13:32

Beitragvon Soner » 23. Mär 2016, 19:49 Re: BGRA Ribbon

Das Problem mit Windows 10 habe ich auch (hab eben getestet).
Sieht gut aus. Ich glaube dein Weg ist vernünftiger und ist besser für Crossplatform. Bei meinem Vorgehen hat man standard Windowsrahmen. Wenn man anderen Style will, dann kann man schon gleich neue Rahmen haben.

Ich würde die Funktion streichen:
Code: Alles auswählen
 
function DropShadow(const Handle: THandle): boolean;
 
  function IsXP: boolean;
  begin
    Result := (Win32Platform = VER_PLATFORM_WIN32_NT) and
      ((Win32MajorVersion > 5) or ((Win32MajorVersion = 5) and
      (Win32MinorVersion >= 1)));
  end;
 
const
  SPI_SETDROPSHADOW = $1025;
  CS_DROPSHADOW = $00020000;
begin
  Result := IsXP and SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(True), 0) and
    (SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or
    CS_DROPSHADOW) <> 0);
end;
 


Und gleich nur das verwenden:
Code: Alles auswählen
SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or  CS_DROPSHADOW);

Die Wahrscheinlichkeit dass irgend jemand Windows 98 nutzt ist gleich Null.
CS_DROPSHADOW ist in Lazarus definiert.

Danke für den Tipp mit Screen.WorkAreaRect, denn hatte ich vergessen.
Soner
 
Beiträge: 411
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

Beitragvon coasting » 25. Mär 2016, 00:43 Re: BGRA Ribbon

Soner hat geschrieben:...
Und gleich nur das verwenden:
Code: Alles auswählen
SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or  CS_DROPSHADOW);

Die Wahrscheinlichkeit dass irgend jemand Windows 98 nutzt ist gleich Null.
CS_DROPSHADOW ist in Lazarus definiert.
...

Danke! Ist damit auch um Einiges kürzer ;)

Neue Version im ersten Post. Jetzt auch mit Dekoration ;) Habe zudem versucht Linux zu berücksichtigen. Bin mir aber nicht sicher ob die Icons gezeichnet werden. Bitte einmal überprüfen, wenn möglich.

coasting
coasting
 
Beiträge: 21
Registriert: 30. Apr 2014, 13:32

Beitragvon coasting » 6. Apr 2016, 20:53 Re: BGRA Ribbon

Update 06.04.2016

+ Fenster ist Resizeable und Moveable ohne Titelleiste
+ Fenster hat einen Schatten (CS_DROPSHADOW)
+ Maximize / Minimize des Fensters, inkl. Doppelklick der Titelleiste
+ Slide-in / Slide-out Effekt der Menus
+ XML Storage zum Abspeichern der Farbe, Größe und Position
+ Fokusstatus des Fensters wird berücksichtigt
+ Systemmenu
+ "Quick Access" Buttons
+ Fensterdeko in der Titelleiste
+ Cross Platform (so hoffe ich)
+ Diverse kleine Verbesserungen

Neue Version liegt im ersten Post.

coasting
coasting
 
Beiträge: 21
Registriert: 30. Apr 2014, 13:32

• Themenende •
Vorherige

Zurück zu Units/Komponenten



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried