Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.13;
Скачать: CL | DM;

Вниз

Кнопки в системном меню (Стиль Windows XP)   Найти похожие ветки 

 
DV-Karpov   (2009-07-15 05:41) [0]

Как изменить положение кнопок в системном меню, так чтобы кнопка "Закрыть" была расположена слева, а кнопка "Свернуть" справа (пример программа QIP). При этом необходимо что бы кнопки выглядели в соответствии со стилем, выбранным в операционной системе.
DrawFrameControl не подходит, так как она рисует обычные кнопки, которые не соответствуют стилю.


 
Anatoly Podgoretsky ©   (2009-07-15 07:20) [1]

Вот людям заняться нечем.


 
DV-Karpov   (2009-07-15 07:32) [2]


> Вот людям заняться нечем.

Это не ответ на вопрос. В общем то я задал вопрос не для того чтоб услышать есть мне чем заниматься или не чем. Если вы не в состоянии ответиь по теме, то не надо лесть....


 
brother ©   (2009-07-15 07:39) [3]

1. BorderStyle = bsNone и делай свои кнопки какие тебе угодно.
2. "Таскание" формы придется делать вручную (но гугл тебе поможет)
зы
> При этом необходимо что бы кнопки выглядели в соответствии
> со стилем, выбранным в операционной системе.

там два стиля) картинок кнопок будет 4 шт.


 
brother ©   (2009-07-15 07:40) [4]

> там два стиля) картинок кнопок будет 4 шт.

эээ те 8 (нажата/отжата)


 
DV-Karpov   (2009-07-15 08:01) [5]

А проще варианта нет?


 
DV-Karpov   (2009-07-15 08:05) [6]


> А проще варианта нет?

Получится больше чем 8 картинок. Когда курсор мыши на кнопке она тоже изменяется.


 
brother ©   (2009-07-15 08:06) [7]

> А проще варианта нет?

Qip между прочим, сам свой интерфейс создает)

> [6] DV-Karpov   (15.07.09 08:05)
>
> > А проще варианта нет?
>
> Получится больше чем 8 картинок. Когда курсор мыши на кнопке
> она тоже изменяется.

10 и что?


 
DV-Karpov   (2009-07-15 08:22) [8]

Интересно и где в Qip хранятся этих 10 кнопок? В ресурсе *.exe не чего нет?


 
brother ©   (2009-07-15 08:59) [9]

> Интересно и где в Qip хранятся этих 10 кнопок?

это к разработчикам.


 
DV-Karpov   (2009-07-15 09:33) [10]

Может все-таки существует другой вариант? слишком получается много кода для двух кнопок.


 
brother ©   (2009-07-15 09:36) [11]

ты пойми, то что ты хочешь сделать - не стандарный интерфейс от MS, следовательно, бубен в руки и вперед!

> слишком получается много кода для двух кнопок.

это еще с чего бы вдруг?


 
brother ©   (2009-07-15 09:37) [12]

> это еще с чего бы вдруг?

2 image подожишь на форму, а там только действия на события...


 
brother ©   (2009-07-15 09:40) [13]

кстати...
> (пример программа QIP). При этом необходимо что бы кнопки
> выглядели в соответствии со стилем, выбранным в операционной
> системе.

кип к стилю не привязывается...


 
Anatoly Podgoretsky ©   (2009-07-15 09:54) [14]

> DV-Karpov  (15.07.2009 09:33:10)  [10]

Терпи казак, раз делать нечего.


 
Виктор85   (2009-07-15 09:54) [15]

Вот, выдрал когда-то компонент из Indy и сделал кнопки в xp стиле.

{
  Компонент отображающий панель заголовка в стиле Windows
}

unit isCaptionBarUnit;

interface

uses
 Windows, Forms, SysUtils, Classes, Controls, ExtCtrls, Buttons, Graphics, GraphUtil,
 Types, Themes;

type
 TisCapBtnStyle = (capClose, capMax, capMin, capRestore, capHelp);
 TisCapBtnStyles = set of TisCapBtnStyle;
 TisCapBtnEvent = procedure(Sender: TObject; Button: TisCapBtnStyle) of object;

 TisCaptionBtn = class(TGraphicControl)
 private
   FOwner: TComponent;
   FStyle: TisCapBtnStyle;
   FMouseDown: Boolean;
   FDown: Boolean;
   FFlat: Boolean;
   FOver: Boolean;

   procedure BtnClick;
   procedure PaintThemes;
   procedure PaintClassic;
   procedure SetFlat(Value: Boolean);
   procedure SetStyle(const Value: TisCapBtnStyle);
 protected
   procedure Click; override;
   procedure Paint; override;
   procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
   procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
   procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
 public
   constructor Create(AOwner: TComponent); override;

   property Visible default False;
   property Flat: Boolean read FFlat write SetFlat default False;
   property Style: TisCapBtnStyle read FStyle write SetStyle default capClose;
 end;

implementation

const
 PADDING_TOP = 4;
 PADDING_LEFT = 8;
 PADDING_RIGHT = 4;

{ TisCaptionBtn }

procedure TisCaptionBtn.SetFlat(Value: Boolean);
begin
 if FFlat <> Value then
 begin
   FFlat := Value;
   Invalidate;
 end;
end;

procedure TisCaptionBtn.SetStyle(const Value: TisCapBtnStyle);
begin
 if FStyle <> Value then
 begin
   FStyle := Value;
   Invalidate;
 end;
end;

procedure TisCaptionBtn.BtnClick;
begin
 if FOwner is TisCaptionBar then
   TisCaptionBar(FOwner).ClickButton(Style);
end;

procedure TisCaptionBtn.Click;
begin
 inherited Click;
 BtnClick;
end;

constructor TisCaptionBtn.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FOwner := AOwner;
 Width := GetSystemMetrics(SM_CYCAPTION) - 3;
 Height := Width - 2;
 FStyle := capClose;
 Visible := False;
 FFlat := False;
end;

procedure TisCaptionBtn.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
 Y: Integer);
begin
 if not Enabled then
   Exit;
 inherited MouseDown(Button, Shift, X, Y);
 if not FMouseDown then
 begin
   FMouseDown := True;
   FDown := True;
   Repaint;
 end;
end;

procedure TisCaptionBtn.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
 inherited MouseMove(Shift, X, Y);
 if FMouseDown then
 begin
   FOver := PtInRect(ClientRect, Point(X, Y));
   if not FOver then
   begin
     if FDown then { mouse has slid off, so release }
     begin
       FDown := False;
       Repaint;
     end;
   end
   else
   begin
     if not FDown then { mouse has slid back on, so push }
     begin
       FDown := True;
       Repaint;
     end;
   end;
 end;
end;

procedure TisCaptionBtn.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
 Y: Integer);
begin
 if not Enabled then
   Exit;
 inherited MouseUp(Button, Shift, X, Y);
 if FMouseDown then
 begin
   FMouseDown := False;
   FDown := False;
   Repaint;
 end;
end;

procedure TisCaptionBtn.Paint;
begin
 if not Visible then
   Exit;

 if ThemeServices.ThemesEnabled then
   PaintThemes
 else
   PaintClassic;
end;

procedure TisCaptionBtn.PaintClassic;
var
 R: TRect;
 Flags: Integer;
begin
 Flags := 0;
 case FStyle of
   capClose:
     Flags := DFCS_CAPTIONCLOSE;
   capMax:
     Flags := DFCS_CAPTIONMAX;
   capMin:
     Flags := DFCS_CAPTIONMIN;
   capRestore:
     Flags := DFCS_CAPTIONRESTORE;
   capHelp:
     Flags := DFCS_CAPTIONHELP;
 end;

 if not Enabled then
   Flags := Flags or DFCS_INACTIVE
 else
 if FDown and FMouseDown and Enabled then
   Flags := Flags or DFCS_PUSHED;
 if FFlat then
   Flags := Flags or DFCS_FLAT;

 Canvas.Brush.Color := Color;
   SetBkMode(Canvas.Handle, TRANSPARENT);
   DrawFrameControl(Canvas.Handle, ClientRect, DFC_CAPTION, Flags);
   if FFlat then
   begin
     R := ClientRect;
     if FDown and FMouseDown then
       Frame3D(Canvas, R, clBtnShadow, clBtnHighLight, 1)
     else
     if FOver then
       Frame3D(Canvas, R, clBtnHighLight, clBtnShadow, 1)
     else
       Frame3D(Canvas, R, clBtnFace, clBtnFace, 1);
   end;
end;

procedure TisCaptionBtn.PaintThemes;
var
 R: TRect;
 Elenment: TThemedWindow;
 Details: TThemedElementDetails;
begin
 R := ClientRect;

 with ThemeServices do
 begin
   //В зависимости от параметров получаем элемент
   case FStyle of
     capClose:
       begin
         Elenment := twCloseButtonNormal;

         if not Enabled then
           Elenment := twCloseButtonDisabled;

         if FDown and FMouseDown and Enabled then
           Elenment := twCloseButtonPushed;
       end;
     capMax:
       begin
         Elenment := twMaxButtonNormal;

         if not Enabled then
           Elenment := twMaxButtonDisabled;

         if FDown and FMouseDown and Enabled then
           Elenment := twMaxButtonPushed;
       end;
     capMin:
       begin
         Elenment := twMinButtonNormal;

         if not Enabled then
           Elenment := twMinButtonDisabled;

         if FDown and FMouseDown and Enabled then
           Elenment := twMinButtonPushed;
       end;
     capRestore:
       begin
         Elenment := twRestoreButtonNormal;

         if not Enabled then
           Elenment := twRestoreButtonDisabled;

         if FDown and FMouseDown and Enabled then
           Elenment := twRestoreButtonPushed;
       end;
     capHelp:
       begin
         Elenment := twHelpButtonNormal;

         if not Enabled then
           Elenment := twHelpButtonNormal;

         if FDown and FMouseDown and Enabled then
           Elenment := twHelpButtonNormal;
       end;
   end;

   Details := GetElementDetails(Elenment);
   DrawElement(Canvas.Handle, Details, R);
 end;

end;


 
DV-Karpov   (2009-07-15 10:13) [16]


> кип к стилю не привязывается...

Да действительно....
Попробуй открыть Qip и поменять при этом стиль окон в операционной системе. Окно сразу изменится.
Да и сами кнопки, как и у остальных окон.... Причем кнопки в точности такие же, как у остальных окон. и меняются так же (активное окно, кнопка нажата, курсор, на кнопке)
Или попробуй тот же Qip на Vista. положение кнопок не меняется.


 
DV-Karpov   (2009-07-15 10:23) [17]


> Виктор85  


А что такое TisCaptionBar ?


 
brother ©   (2009-07-15 10:33) [18]

> Попробуй открыть Qip и поменять при этом стиль окон в операционной
> системе. Окно сразу изменится.
> Да и сами кнопки, как и у остальных окон.... Причем кнопки
> в точности такие же, как у остальных окон. и меняются так
> же (активное окно, кнопка нажата, курсор, на кнопке)
> Или попробуй тот же Qip на Vista. положение кнопок не меняется.

сколько ты готов заплатить за эти эксперименты?


 
DV-Karpov   (2009-07-15 10:37) [19]


> сколько ты готов заплатить за эти эксперименты?

Заплатить?
А ты представь себя на субботнике ))))


 
brother ©   (2009-07-15 10:39) [20]

> А ты представь себя на субботнике ))))

Тогда узнать, как это делает кип твое домашнее задание, вариант тебе я подсказал... дальше сам...


 
DV-Karpov   (2009-07-15 10:51) [21]


> Тогда узнать, как это делает кип твое домашнее задание,
> вариант тебе я подсказал... дальше сам...

Очень смешно...


 
brother ©   (2009-07-15 11:06) [22]

> Очень смешно...


> А ты представь себя на субботнике ))))

Видимо тебе да...


 
Виктор85   (2009-07-15 11:35) [23]


> А что такое TisCaptionBar ?


Это немного переделанный компонент из Jedi.

Вот ссылка, попробуй под себя перепиши расположив кнопки в нужном месте, а заголовок чтоб выводился по центру.

http://narod.ru/disk/10939367000/isCaptionBarUnit.rar.html


 
Игорь Шевченко ©   (2009-07-15 11:40) [24]

Еще один экземпляр с непомерно развитым чувством долга


 
DV-Karpov   (2009-07-15 11:55) [25]


> Еще один экземпляр с непомерно развитым чувством долга

Вы сейчас про что?


 
DV-Karpov   (2009-07-15 11:56) [26]


> Виктор85

Спасибо за ссылку это то что нужно.


 
Кто б сомневался ©   (2009-07-15 15:07) [27]

А зачем это все нужно? Для того чтобы не было дискриминации левшей?


 
axis_of_evil ©   (2009-07-15 15:24) [28]

для дискриминации правшей %>


 
Palladin ©   (2009-07-15 15:35) [29]

Скорее это все для "крутой гламурности". )


 
Anatoly Podgoretsky ©   (2009-07-15 15:43) [30]

> Palladin  (15.07.2009 15:35:29)  [29]

Наверно, чтобы не работать.


 
Дмитрий   (2009-07-16 07:03) [31]


> Anatoly

Тожно чтобы не работать....)))


 
TIF ©   (2009-07-16 07:40) [32]

Сразу скажу - тему не читал, только пробежался по ней глазами. Жаждущим попинать - пните меня к решению )

У меня вопрос по той же части, насчёт заголовка окна и кнопочек.
Как вообще убрать кнопку "развернуть"? Не просто деактивировать, но и вообще убрать её с глаз долой, оставив только "крестик" и "Свернуть"?


 
oldman ©   (2009-07-16 12:08) [33]


> Как изменить положение кнопок в системном меню, так чтобы
> кнопка "Закрыть" была расположена слева, а кнопка "Свернуть"
> справа


Руки бы оторвал!!!


 
brother ©   (2009-07-16 12:12) [34]

ну не любят люди стиль от M$, ну бывает...


 
oldman ©   (2009-07-16 12:25) [35]


> brother ©   (16.07.09 12:12) [34]
> ну не любят люди стиль от M$, ну бывает...


особенно веселит иногда кнопка "Close" на главной форме при полном отсутствии кода в OnClose...


 
brother ©   (2009-07-16 12:26) [36]

> особенно веселит иногда кнопка "Close" на главной форме
> при полном отсутствии кода в OnClose...

О_о я не понял? те?


 
Anatoly Podgoretsky ©   (2009-07-16 13:22) [37]

> oldman  (16.07.2009 12:08:33)  [33]

Добренький ты!


 
Anatoly Podgoretsky ©   (2009-07-16 13:23) [38]

> oldman  (16.07.2009 12:25:35)  [35]

У меня обычное дело, когда код не нужен.


 
oldman ©   (2009-07-16 13:26) [39]


> Anatoly Podgoretsky ©   (16.07.09 13:23) [38]
> > oldman  (16.07.2009 12:25:35)  [35]


А на крестик пользователю нажать лень?
А вставить опцию "Выход" в MainMenu лень?



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

Текущий архив: 2009.09.13;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.015 c
4-1215512670
AlexKung
2008-07-08 14:24
2009.09.13
MAPI: висяк при обрыве соединения


4-1217576481
kyn66
2008-08-01 11:41
2009.09.13
Какой установлен принтер ?


15-1247249008
AlexDan
2009-07-10 22:03
2009.09.13
textarea и Java


1-1214477815
yaric
2008-06-26 14:56
2009.09.13
выгрузка chartobject-а в html


15-1247513346
Тима
2009-07-13 23:29
2009.09.13
Требуется помощь в написании программы