Текущий архив: 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.48 MB
Время: 0.035 c