Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Button in Caption von ToolWin (https://www.delphipraxis.net/45937-button-caption-von-toolwin.html)

turboPASCAL 15. Mai 2005 02:15


Button in Caption von ToolWin
 
Hi,
Ich habe Glscene in D2005PE per Package/Komponente ... eingebunden, der GlSceneEditor (ToolWin) verdeckt nun immer die Delphi IDE.
Um das zu verhindern möchte ich ein Minimize Btn einbauen.

(1) Wie bekommt man einen Button (z.B. SpeedBtn) in die Caption einer Form?

(2) Wollte das die Form autom. aufklappt. Bei meiner Lösung flackert die Form wenn ich über die Buttons oder Panels usw. mit der Maus "surfe" ?
Delphi-Quellcode:
 ...
 public
    { Public-Deklarationen }
    Procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    Procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  end;
  ...

procedure TForm1.CMMouseEnter(var Message: TMessage);
begin
  if form1.Height <> 260 then form1.Height := 260;
end;

procedure TForm1.CMMouseLeave(var Message: TMessage);
begin
  if form1.Height <> 1 then form1.Height := 1;
end;
:wall:

mirage228 15. Mai 2005 09:20

Re: Button in Caption von ToolWin
 
Hi,

Du solltest Dir die Delphi-Referenz durchsuchenBorderIcons Eigenschaft des Forms anschauen. Da kannst Du einen MinimizeButton einbauen - aber ob das mit dem "ToolWin" Stil geht, weiss ich nicht.
Zur Größenbegrenzung dürfte für Dich Delphi-Referenz durchsuchenSizeConstraints hilfreich sein.
Dann musst Du die Position nicht beim MouseEnter / MouseLeave abfragen und Delphi übernimmt die Verwaltung automatisch.

mfG
mirage228

turboPASCAL 15. Mai 2005 11:46

Re: Button in Caption von ToolWin
 
Moin, Moin!

@mirage228 danke für Antwort,

Der Minimieze Btn is ja eingebaut und tut auch das was er soll (halt nur nicht in der verflixten
Caption), ebenso läuft ja auch schon das automatische aufklappen / zuklappen des GL-Editorfensters
(Toolpalette wie zB. bei Paint Shop Pro ) problemlos nur das wenn man über den Rand der Buttons,
Splitter oder ToolBar mit der Maus fährt flackert das.
Ist halt ein unschöner Effekt.

turboPASCAL 19. Mai 2005 14:22

Re: Button in Caption von ToolWin
 
Liste der Anhänge anzeigen (Anzahl: 1)
Sodele,
Button in der Caption (mit kleiner Macke bei Mouseover).

Delphi-Quellcode:
...
procedure TForm1.DrawTitleBtnRect(BtnPos: Byte; btnState: TBtnState);
var
  cXFrame, cYFrame, ccBorder: Integer; // Rahmendicke
  cxSize, cySize: Integer;            // Hoehe & Breite der Buttons in der Titelleiste
  Bitmap: TBitmap;                    // Btn Bitmap
  x: TBitmap;                         // *** Bitmap
begin
  if Self.BorderStyle in [bsNone] then Exit; // No Frame no Button

  if Self.BorderStyle in [bsSizeToolWin, bsToolWindow] then
  begin
    // small Button Grösse ermitteln
    cxSize := GetSystemMetrics(SM_CXSMSIZE) - 2; // -2 Btn-Rand
    cySize := GetSystemMetrics(SM_CYSMSIZE) - 2; // -2 Btn-Rand
  end else
  begin
    // Button Grösse ermitteln
    cxSize := GetSystemMetrics(SM_CXSIZE) - 2; // -2 Btn-Rand
    cySize := GetSystemMetrics(SM_CYSIZE) - 2; // -2 Btn-Rand
  end;

  // Rändergrössen der Frame ermitteln
  if Self.BorderStyle in [bsToolWindow]
    then ccBorder := 0 else ccBorder := GetSystemMetrics(SM_CXBORDER);

  if Self.BorderStyle in [bsDialog, bsSingle] then
  begin // normal Frame
    cXFrame := GetSystemMetrics(SM_CXDLGFRAME) + ccBorder;
    cYFrame := GetSystemMetrics(SM_CYDLGFRAME) + ccBorder;
  end else
  begin // sizeable Frame
    cXFrame := GetSystemMetrics(SM_CXSIZEFRAME) + ccBorder;
    cYFrame := GetSystemMetrics(SM_CYSIZEFRAME) + ccBorder;
  end;

  // Button Rect
  BtnCaptionRect := Bounds((Self.Width - cXFrame) - (BtnPos * cxSize), cYFrame,
    cxSize, cySize);

  Canvas.Handle := GetWindowDC(Self.Handle); //Get Device for drawing

  try
    Bitmap := TBitmap.Create;

    // *** Bitmap File laden
    x := TBitmap.Create;
    x.LoadFromFile('btn_up_over_down_XP.bmp');

    Bitmap.Width := cxSize;
    Bitmap.Height:= cxSize;

    // Abfragen des Btn Status / Btn vom x-Bitmap ins Bitmap kopieren
    if btnUp in btnState then
    begin
      Bitmap.Canvas.CopyRect(Rect(0,0,cxSize,cxSize), x.Canvas, Rect(0,0,23,23));
    end else
    if btnDown in btnState then
    begin
      Bitmap.Canvas.CopyRect(Rect(0,0,cxSize,cxSize), x.Canvas, Rect(23+23,0,23+23+23,23));
    end else
    if btnOver in btnState then
    begin
      Bitmap.Canvas.CopyRect(Rect(0,0,cxSize,cxSize), x.Canvas, Rect(23,0,23+23,23));
    end else
    if btnInActive in btnState then
    begin
    end;

    // Btn Transparent ?
    if btnTransparent in btnState then
    begin
      Bitmap.Transparent := True;
      Bitmap.TransParentColor := clFuchsia;
    end;

    // Btn Stretchen ?
    if btnStretch in btnState then
      Canvas.StretchDraw(BtnCaptionRect, Bitmap)
    else
      Canvas.Draw(BtnCaptionRect.Left, BtnCaptionRect.Top, Bitmap);

  finally
    ...
    ...
  end;
end;
...
Source Code im Anhang


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz