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

Вниз

как создать кнопку   Найти похожие ветки 

 
3879546211   (2004-04-03 21:48) [0]

как создать кнопку на заголовке окна (свернуть закрыть..)
чтобы она была в любом окне любого приложения?


 
YurikGl ©   (2004-04-03 21:58) [1]

за это отвечает множество BorderIcons=[biSystemMenu,biMinimize,biMaximize,biHelp]


 
Anatoly Podgoretsky ©   (2004-04-03 22:05) [2]

Изничтожу такую программу не задумываясь не секунды, а если это постаявят пользователи в сети, то они долго будут разбираться с руководством, по поводу откуда они такую гадость взяли.


 
riko   (2004-04-03 22:38) [3]

А на кой она там?Лучше придерживаться стандарта.Юзверя
очень злятся если чего то изучать надо.Всё должно быть привычно.


 
Rouse_ ©   (2004-04-03 23:07) [4]

Хотя могу поспорить - кнопка скидывания в трей в Bat-е довольно удобна...
Я бы не отказался от программы которая, мало того, что добавляла данную кнопку, но и реализовывала бы верную функциональность...


 
Diamond Cat ©   (2004-04-04 00:59) [5]

> YurikGl ©   (03.04.04 21:58) [1]
> за это отвечает множество BorderIcons=[biSystemMenu,biMinimize,biMaximize,biHelp]
Если вы имеете в виду vcl дельфей то вы правы :о)

DrawFrameControl создает кнопки в неклиентской части окна, тольк к сожалению вам придется еще побороться с глобальными хуками, дабы нормально отрисовывать и принимать сообщения от этих кнопочек


 
Игорь Шевченко ©   (2004-04-04 01:03) [6]


> DrawFrameControl создает кнопки в неклиентской части окна


А примерчик ? :))
(только, если не трудно, работающий)

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

Не надо желать странного.


 
Diamond Cat ©   (2004-04-04 01:15) [7]

public
   procedure ButtonClicked;
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ButtonClicked;
begin
if height>height-clientheight then height:=height-clientheight else height:=171;
end;

function TForm1.DrawButton(State: Cardinal): boolean;
var
 P: TPoint;
 R: TRect;
 DC: hDC;
begin
 GetCursorPos(P);
 Dec(P.X, Left);
 Dec(P.Y, Top);
 R.Left := GetSystemMetrics(SM_CxFrame)+45 + Canvas.TextWidth(Caption);
 R.Right := Width - GetSystemMetrics(SM_CxFrame) - 20;
 R.Top := GetSystemMetrics(SM_CyFrame)+GetSystemMetrics(SM_CYEDGE);
 R.Bottom := GetSystemMetrics(SM_CYSIZE)+GetSystemMetrics(SM_CYEDGE);
 Result := (State = 0) or PtInRect(R, P);
 if Result
    then begin
           DC := GetWindowDC(Handle);
           try
             if  height=height-clientheight then DrawFrameControl(DC, R, DFC_SCROLL , DFCS_SCROLLDOWN or State) else
              DrawFrameControl(DC, R, DFC_SCROLL , DFCS_SCROLLUP or State)
           finally
             ReleaseDC(Handle, DC)
           end
         end;
end;

procedure TForm1.WMNCLButtonDown(var Message: TWMNCLButtonDown);
begin
 if not DrawButton(DFCS_Pushed) then inherited
end;

procedure TForm1.WMNCLButtonUp(var Message: TWMNCLButtonUp);
begin
 if DrawButton(0) then ButtonClicked else inherited
end;

procedure TForm1.WndProc(var Message: TMessage);
begin
 inherited WndProc(Message);
 case Message.Msg of
  wm_ncactivate,WM_NCCALCSIZE,wm_setfocus,wm_killfocus, WM_Activate, WM_ncPaint,  WM_WindowPosChanging: DrawButton(0)
 end { of case };
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
BorderIcons := BorderIcons - [biminimize];
BorderIcons := BorderIcons - [bimaximize];
borderStyle:=bssizeable;
height:=171;
width:=400;
end;

end.


 
Rouse_ ©   (2004-04-04 01:41) [8]

Да примерчиков то привести можно туча, хоть через DrawFrameControl, хоть через DrawButtonFace хоть линиями рисовать... вот загвоздка с чужими окнами (верно Игорь указал) действительно есть не для первого класса :)


 
Diamond Cat ©   (2004-04-04 01:54) [9]


> Rouse_ ©

ктобы спорил


 
Игорь Шевченко ©   (2004-04-04 14:24) [10]

Diamond Cat ©   (04.04.04 01:15) [7]

Глючит при изменении размеров формы мышкой.
Вместо кнопки Close появляется часть рисунка твоей кнопки.
Или изображения от разных рамеров твоей кнопки накладыватся друг на друга.


 
DVM ©   (2004-04-04 14:41) [11]

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


 
Diamond Cat ©   (2004-04-04 15:19) [12]


> Игорь Шевченко ©  

Игорь, вот только не надо грязи, ты просил пример , ты его получил, я даже спорить не буду что он далек от идеала, это лишний раз доказывает, что человек взялся за очень тяжелую задачу. Хотя чесно говоря я таких глюков не замечал, вобщем у меня кнопка нормально отрисовывается, попробуй убрать с формы кнопки минимизирования и восстановления окна, собственно надо было сразу предупредить , но забыл.


 
Игорь Шевченко ©   (2004-04-04 17:51) [13]

Diamond Cat ©   (04.04.04 15:19)

Я к тому, что вот так вот запросто добавить кнопку в неклиентскую область окна - не такое простое дело, и зря ты обижаешься. На свете есть довольно немного примеров в исходных текстах по безглючному добавлению кнопки в заголовок онка.

Твой код скопирован один в один, кнопки максимизации и восстановления убраны.


> Хотя чесно говоря я таких глюков не замечал


Попробуй быстро поменять размеры формы мышкой. В ряде случаев
кнопка рисуется неверно.



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

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

Наверх




Память: 0.5 MB
Время: 0.034 c
1-1080682818
uncoder
2004-03-31 01:40
2004.04.18
Delphi + Winamp skin


1-1080713247
tivispider
2004-03-31 10:07
2004.04.18
Компиляция проекта в командной строке


14-1080111601
Goida
2004-03-24 10:00
2004.04.18
Черный Тюльпан...


4-1076572782
Дёма
2004-02-12 10:59
2004.04.18
Версия Windows


3-1080047576
Aleksandr
2004-03-23 16:12
2004.04.18
Какой командой из триггера MS SQL можно запустить файл?