Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
Delphi 6 Personal
|
Re: Button in Caption von ToolWin
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
Matti
|
|
Zitat
|