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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.032 c
11-1062913336
=Sniper=
2003-09-07 09:42
2004.04.18
Чё-то форум показываться нормально не хочет....


3-1080151581
diww
2004-03-24 21:06
2004.04.18
Как в DBGridEh запретить добавление строк в таблицу?


1-1081007953
Mefodiy
2004-04-03 19:59
2004.04.18
Разница реакций Windows 98 и Windows X на Sleep и Delay


3-1079976637
RDA
2004-03-22 20:30
2004.04.18
Tdbf - проблемы с украинской буквой "і"


14-1079972900
Обитатель
2004-03-22 19:28
2004.04.18
Что с моей виндой-2000 ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский