![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Диалог внутри формы: как сделать лучше?
GrayFace © (2004-01-27 15:25:00)Мне приходится использовать Timer. Иначе вылетает по ошибке. Как можно без него? Вот часть кода:
procedure TForm2.FontDialogShow(Sender: TObject);
begin
Form2.Show;
timer2.Enabled:=true;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if isWindow(FontDialog.Handle) then SendMessage(FontDialog.Handle,wm_close,0,0);
end;
procedure TForm2.FontDialogClose(Sender: TObject);
begin
Form2.Close;
end;
procedure TForm2.Timer2Timer(Sender: TObject);
var x,y:LongWord; p:TPoint; r,r1:TRect;
begin
Timer2.Enabled:=false;
windows.GetWindowRect(FontDialog.Handle,r1);
if not IsWindow(FontDialog.Handle) then exit;
windows.GetClientRect(FontDialog.Handle,r);
p:=ClientToScreen(MakePoint(0,0));
x:=0-p.X+Left;
y:=0-p.Y+Top;
Constraints.MaxWidth:=r1.Right-r1.Left;
Constraints.MinWidth:=r1.Right-r1.Left;
SetWindowPos(FontDialog.Handle,HWND_BOTTOM,x,y,0,0,SWP_NOSIZE or SWP_NOSENDCHANGING or SWP_NOACTIVATE);
end;
procedure TForm2.FormShow(Sender: TObject);
begin
if not isWindow(FontDialog.Handle) then exit;
windows.SetParent(FontDialog.Handle,Panel1.Handle);
end;
VMcL (2004-01-29 09:54:00) [21]>>YuRock © (28.01.04 20:45) [12]
>Ну не очевидно это, потому и не заметил...
Если ничто не помогает, прочтите наконец инструкцию :)
YuRock (2004-01-28 20:45:00) [22]> Polevi © (28.01.04 20:21) [11]
> так что руки выпрями
Ну, ладно обзываться. Не замечал я такого раньше, и вот почему: я думал, что TMessage - это те же 4 параметра (как в обычной оконной процедуре), ну, без хендла. А там оказывает еще и Result... Ну не очевидно это, потому и не заметил...
Polevi (2004-01-28 20:21:00) [23]>WndProc у контролов. Почему это процедура??? Я же не могу ничего вернуть!
а ты Message.Result:=1234 не пробовал ?
так что руки выпрями
YuRock (2004-01-28 19:23:00) [24]> Игорь Шевченко
> Digitman
А вам, уважаемые мастера, все что написали программисты Борланда кажется идеальным? Что-то не верится, извините, уж...
На счет примеров? Пожалуйста! Только сразу предупреждаю, корявость нижеприведенных примеров - мое субъективное мнение об удобстве и красоте:
1. Событие OnActivate (у форм) - не работает для главной формы. А жаль - ведь WM_ACTIVATE приходит когда надо.
2. WndProc у контролов. Почему это процедура??? Я же не могу ничего вернуть! Нет, я конечно могу через API перекрыть оконную процедуру, но перегрузка метода - гораздо красивее, но, к сожалению, не всегда помогает...
3. Графические объекты (я имею в виду TLabel, TSpeedButton...). Это во-первых тормозит перерисовку окна, во-вторых напрочь убивает возможность поиска этих "на вид окон" из других программ (я имею в виду хендлов, которых нет).
...
Есть еще масса неудобств в BDE, VCL ... (по крайней мере - для меня), всех привести не смогу.
Тем не менее хочу в очередной раз заметить: Структуры оконных классов лучше VCL я еще не видел - потому и пользуюсь.
YuRock (2004-01-28 17:17:00) [25]> чрезвычайно смелое заявление
А чего (кого) бояться то? Побъет меня чтоль, этот Borland?
Digitman (2004-01-28 17:13:00) [26]
> Кстати, Borland иногда глюкавые (я бы сказал - корявые)
> методы делает
чрезвычайно смелое заявление !
YuRock (2004-01-28 17:09:00) [27]Кстати, Borland иногда глюкавые (я бы сказал - корявые) методы делает. Причем действительно "специально". Но это обычноописывается в help'е.
О глюкавости же CreateParented в help'е ничего не сказано (да и при проверке работает, пользовался 100 раз). Да и чему там глючить? "FParentWindow := ParentWindow"? Никогда не видел "глюков" при присвоении числовых (тем более - однотипных) переменных...
SPeller (2004-01-28 17:02:00) [28]
> Borland специально глюкавые методы у своих классов пишет.
:-))) И в каждый ЕХЕ-шник трояна засовывает. Назло пользующимся :-))
VMcL (2004-01-28 16:45:00) [29]>>YuRock
Ничего ты не понимаешь. Человек написал "глючит" - значит глючит. Borland специально глюкавые методы у своих классов пишет.
YuRock (2004-01-28 16:25:00) [30]1. Почему Вы решили, что CreateParented глючит? Я не замечал никогда...
2. Для этого используется API'шная функция SetParent
GrayFace (2004-01-28 15:40:00) [31]Нет. Во-первых CreateParented, как я помню, глючит.
Вовторых, все по-другому: Стандартный FontDialog внутри Form2
YuRock (2004-01-27 17:32:00) [32]Может я что-то не так понял, но почему бы не создавать диалог (на сколько я понял - Form2) так:
Form2 := TForm2.CreateParented(Form1.Handle);
Form1.InsertControl(Form2);
И все?
Игорь Шевченко (2004-01-23 13:14:00) [33]
> Кстати, Borland иногда глюкавые (я бы сказал - корявые)
> методы делает. Причем действительно "специально". Но это
> обычно описывается в help'е.
Примерчики в студию.