AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Button in Caption von ToolWin

Ein Thema von turboPASCAL · begonnen am 15. Mai 2005 · letzter Beitrag vom 19. Mai 2005
Antwort Antwort
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#1

Button in Caption von ToolWin

  Alt 15. Mai 2005, 02:15
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;
Matti
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Button in Caption von ToolWin

  Alt 15. Mai 2005, 09:20
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: Button in Caption von ToolWin

  Alt 15. Mai 2005, 11:46
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.
Matti
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: Button in Caption von ToolWin

  Alt 19. Mai 2005, 14:22
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
Angehängte Dateien
Dateityp: zip btnincaption_203.zip (13,9 KB, 35x aufgerufen)
Matti
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz