![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Посоветуйте, как реализовать
Darvin © (2007-09-18 11:53:00)Здравствуйте!
В Ворде, в режиме предварительного просмотра есть кнопочка [Несколько страниц], позволяющая выбрать кол-во страниц по горизонтали и по вертикали. По нажатии выпадает окошко с гридом из страниц. Если НЕ БРОСАЕШЬ КНОПКУ МЫШКИ ПОСЛЕ НАЖАТИЯ НА КНОПКУ и двигаешь курсор по гриду, выделяются ячейки этого грида и меняется его размер. При отпускании кнопки мыши окошко прячется и запоминается количество ячеек (страниц) по горизонтали и вертикали.
Я хочу в своем проекте сделать такой-же диалог выбора. Для этого сделал форму с BorderStyle = bsNone, на нее поместил StringGrid. Далее на событии MouseDown кнопки показываю и позиционирую данное окно. Все работает, но возникает проблема. Грид на появившейся форме не получает события MouseMove и MouseUp до тех пор, пока принудительно не нажмешь кнопку мыши и соответственно не выделяются ячейки на гриде и не меняет он своего размера.
Вопрос:
Как сделать так, чтоб появившаяся форма и грид на ней СРАЗУ воспринимал события MouseMove и MouseUp, без предварительного нажатия на гриде в этой форме?
Галинка (2007-09-18 12:42:00) [21]У меня нет ворда. (( Тока опеноффис. Там эта фича тоже есть. И по виду там вроде тулбатон. Из которого выпадающее меню. И поведение вроде соответствующее.
ПыСы: может исходники опенофиса посмотреть?
Darvin (2007-09-18 12:36:00) [22]>Галинка © (18.09.07 12:33) [8]
procedure TfrmReporter.btnPageMultiMouseDown ( Sender : TObject;
Button : TMouseButton;
Shift : TShiftState;
X, Y : Integer );
var
P : TPoint;
begin
FfmSetPagesArray.Show;
P.X := 0;
P.Y := 0;
P := btnPageMulti.ClientToScreen(P);
FfmSetPagesArray.Left := P.X;
FfmSetPagesArray.Top := P.Y - FSelPageCount.Height;
FfmSetPagesArray.SetFocus; <- Добавлено по твоему совету ;-)
end;
Darvin (2007-09-18 12:34:00) [23]>Галинка © (18.09.07 12:31) [7]
Туллбуттон с выпадающим списком не подойдет. Посмотри, как это сделано в ворде. У меня просто SpeedButton, открывающий по MouseDown окно.
Галинка (2007-09-18 12:33:00) [24]Автор, а как вообще у тебя все работает? Как вызов самой формы происходит?
Галинка (2007-09-18 12:31:00) [25]homm © (18.09.07 12:27) [5]
на канве чего? Выпадающего списка? Там же я так понимаю ToolButton с выпадающим списком. Или?
Darvin (2007-09-18 12:30:00) [26]>homm © (18.09.07 12:27) [5]
Хорошо. А как фокус передать форме и отследить перермещение мыши? Рисование на канве проблему не решит
homm (2007-09-18 12:27:00) [27]> [4] Darvin © (18.09.07 12:25)
> А ты как предлагаешь?
На канве рисовать. StringGrid для отображения и редактирования СТРОК.
Darvin (2007-09-18 12:25:00) [28]>homm © (18.09.07 12:24) [3]
И страниц в ячейках. А ты как предлагаешь?
homm (2007-09-18 12:24:00) [29]> на нее поместил StringGrid
А зачем? Ради вертикальных и горизонтальных палочек?
Darvin (2007-09-18 12:22:00) [30]>Галинка © (18.09.07 12:18) [1]
Form1.SetFocus не работает
Галинка (2007-09-18 12:18:00) [31]фокус ей сразу передать. По появлению. Наверное в OnShow().