Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

Уважаемые Мастера, как можно сделать панельки как в Photoshop   Найти похожие ветки 

 
brrrr   (2004-04-11 10:16) [0]

Они ведь никогда не скрываются и у них ведь всегда активные заголовки. А у меня так не получается


 
ПЛОВ   (2004-04-11 10:23) [1]

не было времени расдупляться по-полной, но это древнее мое творение работает

unit Ztlsw;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics,
 Controls;

type
 { TZMoveCaption }

 TZMoveCaption = class(TCustomControl)
 private
   FCaptionHeight: Integer;
   FCaption: TCaption;
   FAnsiVarFont: TFont;
   FMove,FCloseButton, FCloseButtonDown: Boolean;
   procedure SetCaption(Value: TCaption);
   procedure SetCloseButton(Value: Boolean);
   procedure CloseParent;
   procedure MoveParent;
 protected
   procedure Paint; override;
   procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
   procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 published
   property Caption: TCaption read FCaption write SetCaption;
   property CloseButton: Boolean read FCloseButton write SetCloseButton;
   property Align;
 end;

 { TZToolWindow }
 
 TZToolWindow = class(TCustomControl)
 private
   FResizeTWin: Boolean;
   FOnSize: TNotifyEvent;
   procedure WMWindowPosChanged(var Message: TWMWindowPosChanged); message WM_WINDOWPOSCHANGED;
//    procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
   procedure WMSize(var Msg: TWMSize); message WM_SIZE;
   procedure SetResizeTWin(Value: Boolean);
 protected
   procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
   procedure CreateParams(var Params: TCreateParams); override;
   procedure Paint; override;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 published
   property ResizeTWin: Boolean read FResizeTWin write SetResizeTWin;
   property Visible;
   property OnSize: TNotifyEvent read FOnSize write FOnSize;
 end;

procedure Register;

implementation

{ TZMoveCaption }

constructor TZMoveCaption.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FAnsiVarFont:=TFont.Create;
FAnsiVarFont.Handle:=GetStockObject(ANSI_VAR_FONT);
FAnsiVarFont.Color:=clCaptionText;
FMove:=False;
CloseButton:=True;
FCloseButtonDown:=False;
end;

destructor TZMoveCaption.Destroy;
begin
FAnsiVarFont.Free;
inherited Destroy;
end;

procedure TZMoveCaption.SetCaption(Value: TCaption);
begin
FCaption:=Value;
Invalidate;
end;

procedure TZMoveCaption.SetCloseButton(Value: Boolean);
begin
FCloseButton:=Value;
Invalidate;
end;

procedure TZMoveCaption.Paint;
var
 ARect: TRect;

 procedure DrawCloseButton(const State: Boolean);
 begin
 ARect:=Rect(Width-FCaptionHeight+2, 2, Width-2, FCaptionHeight-2);
 if State then DrawFrameControl(Canvas.Handle, ARect, DFC_CAPTION, DFCS_CAPTIONCLOSE or DFCS_PUSHED) else DrawFrameControl(Canvas.Handle, ARect, DFC_CAPTION, DFCS_CAPTIONCLOSE);
 end;

begin
FCaptionHeight:=GetSystemMetrics(SM_CYSMCAPTION);
with Canvas do
begin
Font:=FAnsiVarFont;

Pen.Color:=clActiveCaption;
Brush.Color:=clActiveCaption;
Pen.Style:=psSolid;
Brush.Style:=bsSolid;
Rectangle(0, 0, Width, FCaptionHeight);

TextOut(2, FCaptionHeight div 2-Canvas.TextHeight(FCaption) div 2, FCaption);

if FCloseButton then DrawCloseButton(FCloseButtonDown);

end;
Height:=FCaptionHeight;
end;

procedure TZMoveCaption.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Parent<>nil then Parent.BringToFront;
if (X>Width-FCaptionHeight) and FCloseButton then
begin
FCloseButtonDown:=True;
Invalidate;
end else MoveParent;
end;

procedure TZMoveCaption.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if FCloseButtonDown and (Parent<>nil) then CloseParent;
end;

procedure TZMoveCaption.CloseParent;
begin
if Parent<>nil then
 begin
 FCloseButtonDown:=False;
 Invalidate;
 Parent.Visible:=False;
 end;
end;

procedure TZMoveCaption.MoveParent;
begin
if Parent<>nil then
 begin
 ReleaseCapture;
 Parent.Perform(WM_SYSCOMMAND, $F012, 0);
 end;
end;

{ TZToolWindow }

constructor TZToolWindow.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle:=[csAcceptsControls, csCaptureMouse, csClickEvents, csOpaque, csReplicatable];
Width:=185;
Height:=41;
FResizeTWin:=True;
end;

destructor TZToolWindow.Destroy;
begin
inherited Destroy;
end;

procedure TZToolWindow.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
if FResizeTWin then
Params.Style:=Params.Style or WS_BORDER or WS_THICKFRAME else
Params.ExStyle:=Params.ExStyle or WS_EX_DLGMODALFRAME or WS_EX_TOOLWINDOW;
end;

procedure TZToolWindow.Paint;
begin
with Canvas do
 begin
 Pen.Color:=clBtnFace;
 Pen.Style:=psSolid;
 Brush.Color:=clBtnFace;
 Brush.Style:=bsSolid;
 Rectangle(ClientRect);
 end;
end;

procedure TZToolWindow.WMWindowPosChanged(var Message: TWMWindowPosChanged);
var
 ARect: TRect;
begin
ARect:=ClientRect;
InvalidateRect(Handle, @ARect, True);
inherited;
end;
{
procedure TZToolWindow.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
begin
inherited;
if not FResizeTWin then
begin
 with Msg.MinMaxInfo^ do
 begin
 ptMinTrackSize.x:=Width;
 ptMaxTrackSize.x:=Width;
 ptMinTrackSize.y:=Height;
 ptMaxTrackSize.y:=Height;
 end;
end;
end;
}
procedure TZToolWindow.WMSize(var Msg: TWMSize);
begin
inherited;
if Assigned(FOnSize) then FOnSize(Self);
end;

procedure TZToolWindow.SetResizeTWin(Value: Boolean);
begin
FResizeTWin:=Value;
RecreateWnd;
end;

procedure TZToolWindow.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
BringToFront;
end;

procedure Register;
begin
 RegisterComponents("ZTOOLS", [TZMoveCaption, TZToolWindow]);
end;

end.

А вообще есть пакет ABC


 
brrrr   (2004-04-11 10:33) [2]

Brrrrr
Я с этим через полгода разберусь. Может че нибудь попроще найдется


 
ПЛОВ   (2004-04-11 10:41) [3]

Чего там полгода!
Это ж 2 компонента, инсталишь их и работай... Берешь панельку, кидаешь на форму, если надо, заголовок на панельку и окно готово! Почти как в фотошопе :)


 
brrrr   (2004-04-11 10:45) [4]

Ну да. Спасибо Плов.


 
brrrr   (2004-04-11 10:52) [5]

слушай плов ты сам такое написал? Ну ты крут.


 
ПЛОВ   (2004-04-11 11:01) [6]

Чесно приятно что хоть что-то мое работает :)
Смотри там еще можно дописать некоторые свойства (типа ограничение мин/макс размера окна и т.п.) вроде что-то из этой лабуды там даже закоментировано... Вообщем, експерементируй



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.035 c
6-1077889647
mr.Tim
2004-02-27 16:47
2004.04.25
чем потестить HTTP- сервер?


6-1077500554
elf_123
2004-02-23 04:42
2004.04.25
Система&amp;Email


1-1081094455
Mishenka
2004-04-04 20:00
2004.04.25
ShortCut у меню.


1-1081518493
still_swamp
2004-04-09 17:48
2004.04.25
Как передать в функцию CallBack процедуру?


7-1077792734
Petrovitch
2004-02-26 13:52
2004.04.25
Установить курсор в нужную позицию Формы (X,Y) ???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский