Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Диалог внутри формы: как сделать лучше?


Страницы:   1 2

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'е.


Примерчики в студию.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо