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

Вниз

WinAPI   Найти похожие ветки 

 
Virgo ©   (2004-12-29 09:18) [0]

Подскажите, пожалуйста,  как правильно реализовать

Есть две формы: fmMain и fmChild
TfmChild = class(TForm)
все остальные формы в проекте наследуются от fmChild

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

Таким образом на fmChild
я рисую на главной форме нужные кнопки с помощью функции
DrawFrameControl(WDc,RMax,DFC_CAPTION, DFCS_CAPTIONMAX);
Создаю четыре собственных сообщения, обработчики сообщений

wm_BtnClkMin = wm_User + 111;
wm_BtnClkMax = wm_User + 112;
wm_BtnClkClose = wm_User + 113;
wm_BtnClkRestore = wm_User + 114;

private
   procedure wmBtnClkMin(var msg: TMessage); message wm_BtnClkMin;
   procedure wmBtnClkMax(var msg: TMessage); message wm_BtnClkMax;
   procedure wmBtnClkClose(var msg: TMessage); message wm_BtnClkClose;
   procedure wmBtnClkRestore(var msg: TMessage); message wm_BtnClkRestore;

 public
   procedure DrawBtnMin;
   procedure DrawBtnMax;
   procedure DrawBtnClose;
   procedure DrawBtnRestore;

Ниже  пример для одной кнопки, для других аналогично
procedure TfmChild.DrawBtnMin;
var
 WDc: HDc;
 Cx,Cy: Integer;
 Row, Col : Integer;
 XFrame, Yframe: Integer;
begin
 WDc := GetWindowDc(fmMain.Handle);
 Cx := GetSystemMetrics(SM_CXSize);
 Cy := GetSystemMetrics(SM_CYSize);
 xFrame := GetSystemMetrics(SM_CXFrame);
 yFrame := GetSystemMetrics(SM_CYFrame);
 RMin := Bounds(fmMain.Width - 3*Cx - 2, yFrame + Cy + 2, Cx - 2, Cy - 4);
 if Press then
   DrawFrameControl(WDc,RMin,DFC_CAPTION, DFCS_CAPTIONMIN or DFCS_PUSHED)
 else
   DrawFrameControl(WDc,RMin,DFC_CAPTION, DFCS_CAPTIONMIN);
 ReleaseDc(fmMain.Handle,WDC);

 fmMain.wmncLButtonUp(wm_NclButtonUp):= wmncLButtonUp(wm_NclButtonUp);
end;

procedure TfmChild.wmBtnClkMin(var msg: TMessage);
begin
ShowWindow(self.WindowHandle,SW_MINIMIZE);
end;

procedure TfmChild.wmncLButtonUp(var msg: TWMncLBUTTONUP);
var
 pt: TPoint;
begin
inherited;

pt := Point(msg.XCursor - Left,msg.YCursor - top);
if PtInRect(RMin,pt) then
begin
 Press := False;
 DrawBtnMin;
 PostMessage(Handle, wm_BtnClkMin, 0,0);
end;
if PtInRect(RMax,pt) then
begin
 Press := False;
  DrawBtnMax;
  PostMessage(Handle, wm_BtnClkMax, 0,0);
end;
if PtInRect(RClose,pt) then
begin
 Press := False;
 DrawBtnClose;
 PostMessage(Handle, wm_BtnClkClose, 0,0);
end;
end;

-------------------------------
Вопрос - как мне на главной форме правильно обработать сообщения
(нажатие на эти кнопки)


 
tradakad   (2004-12-29 09:26) [1]

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


 
Virgo ©   (2004-12-29 09:28) [2]

DrawFrameControl по сути просто рисует кнопочку, а не создает оконный элемент:(


 
Kair ©   (2004-12-29 09:50) [3]

Может обрабатывать момент нажатия мышкой по форме и смотреть не совпали ли координаты нажатия с расположеним кнопки?


 
Virgo ©   (2004-12-29 10:27) [4]

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

procedure TfmMain.wmncLButtonUp(var msg: TWMncLBUTTONUP);
var
 pt: TPoint;
begin
inherited;

SendMessage(Handle, wm_BtnClkMin,0,0);
end;


 
Семен Сорокин ©   (2004-12-29 10:55) [5]

хм, а не подойдет, как вариант:
создавать допустим на панели эти кнопки (именно объекты) в конструкторе TfmChild, там же прописывать св-ва и обработчики (или обработчики, если надо, вытащить в главную форму), а Parent"ом назначить главную форму?


 
msguns ©   (2004-12-29 11:41) [6]

Определи адресат как активную "дочь", ентой форме и посылай из главной нужное сообщение.



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

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

Наверх




Память: 0.48 MB
Время: 0.068 c
1-1104277153
Евгений2
2004-12-29 02:39
2005.01.16
Можно ли ВООБЩЕ данный участок кода сделать проще: без copy, val?


10-1080531030
$hade
2004-03-29 07:30
2005.01.16
COM , IE и Win 2003


14-1104341373
Panom
2004-12-29 20:29
2005.01.16
можно ли создать?


14-1104244124
Cerberus
2004-12-28 17:28
2005.01.16
Игры для сотовых.


1-1104137585
viola
2004-12-27 11:53
2005.01.16
ListBox -текст выделенного элемента