![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Дочерние формы как в Fotoshop [D6, Win95/98, WinME, Win2k, WinXP]
Agent Smith © (2002-06-03 12:36:00)как сделать сабж?
Cossys (2002-06-04 10:33:00) [1]Ну правильно, за "любое место" и не утяните. На свою форму помещаете TPanel, TTabControl - и все, тоже никуда не утяните.
Agent Smith (2002-06-04 04:54:00) [2]Ну так что?
Agent Smith (2002-06-03 20:11:00) [3]
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button <> mbLeft then exit;
ReleaseCapture;
Form1.Perform(WM_SysCommand,$F012, 0);
end;
Мне больше такое нравится. И перетаскивать тоже можно за "любое место" :)
Ваше мнение? Что вообще эстетичнее?
ЗЫ: Опытным путем бало установленно, что в Photoshop панели инструментов за "любое место" утащить нельзя.
Cossys (2002-06-03 18:13:00) [4]В класс формы добавляете
private
{ Private declarations }
protected
procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
public
procedure CreateParams(var Params: TCreateParams); override;
end;
implementation
uses Rep1pbEDITOR;
{$R *.DFM}
procedure TfrmPNLSettings.WMNCHitTest(var Message: TWMNCHitTest);
begin
inherited;
Message.Result := HTCAPTION;
end;
procedure TfrmPNLSettings.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := WS_THICKFRAME or WS_POPUP or WS_BORDER;
end;
Все - заголовков не будет, а перетаскивать можно будет за "любое место"
:)
Song (2002-06-03 18:03:00) [5]WM_NCHITTEST ?
Agent Smith (2002-06-03 18:00:00) [6]А как наиболее рационально организовать перетаскивание за лже - шапку?
Cossys (2002-06-03 16:30:00) [7]to Agent Smith
Я с этим боролся по другому (кстати, может в Фотошопе менюшки и MDI, зато во Flash-ке - обычные, поэтому это дело вкуса). Откровенно говоря, FlashWindowя использую для главного окна приложения (глюков с ним я у себя не видел). Для менюшек я убиваю заголовки форм, а заголовок эмулирую (сам рисую в Фотошопе :)) Делаю, что б форму можно было за эти "заголовки" перетягивать - и все, готовое окно.
По поводу FlashWindow... в хэлпе есть, точно.
Agent Smith (2002-06-03 15:02:00) [8]PVOzerski, ты не правильно меня понял. Конечно, окна редактирования изображений в Photoshop - MDI, но я имею в виду плавающие панели инструментов.
Agent Smith (2002-06-03 15:00:00) [9]Cossys правильно понял мою идею, но в его способе (имеется в виду событие onDeactivate) есть некоторые баги: если последовательно делать активными две формы, то проявляются глюки в прорисовке: область вокруг кнопок управления окном (закрыть, свернуть)все равно становится серой. Также когда само приложение становится не активным, то синий заголовок имеет только одна из форм. И это при том, что я прописал по два FlashWindow (для обоих форм) одновременно в onDeactivate обеих форм.
Agent Smith (2002-06-03 14:27:00) [10]Cossys, хочется понять, как раборает
FlashWindow(YoursForm.Handle, True);
PVOzerski (2002-06-03 14:12:00) [11]Вообще-то PhotoShop, по крайней мере те версии для PC, которые я видел, именно MDI.
Но и не-дочерние ToolWindows, действительно, он тоже имеет.
Cossys (2002-06-03 13:32:00) [12]MDI Вам не надо. Создаете обычные формы, устанавливаете свойства:
FormStyle := fsStayOnTop;
BorderStyle := bsToolWindow;
А вот, что бы при передаче фокуса на другую форму заголовок не становился серым (якобы заголовок активный) в обработчике
onDeactivate:
FlashWindow(YoursForm.Handle, True);
PVOzerski (2002-06-03 12:40:00) [13]В Help и в меню "New/Projects " есть пункт "создание MDI-приложений". Это оно и есть.
Agent Smith (2002-06-03 12:37:00) [14]Опечатка вышла: как в Photoshop