Побочный Эффект Windowstate := Wsnormal;

Shouldercannon

Well-known member
25.05.2010
128
0
#1
Доброго времени суток!
Использую WindowState := wsNormal;, чтобы восстанавливать форму с панели задач, если форма свёрнута, но у этого свойства есть побочный эффект. Если форма развёрнута на весь экран, то wsNormal вызывает событие Свернуть в окно у формы. Можно ли этот момент как-то убрать?
 

Shouldercannon

Well-known member
25.05.2010
128
0
#3
Сделала так
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowWindow(Form2.Handle, SW_RESTORE);
end;
С Form2 исчезла кнопка и эта же форма не реагирует на закрытие + теряет активность (тёмный Caption формы) после события ShowWindow, но зато остаётся в последнем заданном состоянии ;)
 

sinkopa

Well-known member
17.06.2009
344
4
#5
Сделала так
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowWindow(Form2.Handle, SW_RESTORE);
end;
С Form2 исчезла кнопка и эта же форма не реагирует на закрытие + теряет активность (тёмный Caption формы) после события ShowWindow, но зато остаётся в последнем заданном состоянии :D
Однозначно "Бага" совсем в другом месте Вашего кода. Скорее всего в обработчиках на самой форме Form2.
Где-то Вы над ней серьезно "поиздевались"... :)
Если Вы говорите что "исчезают кнопки", то это явно указывает на то что в области памяти выделенной приложением для формы Form2 данные испорчены.
К примеру в обработчиках (на Form2) Вы используете методы пересоздающие окно этой формы.
Либо другая форма (или поток) уничтожает/пересоздаёт Form2 в то время как сама форма об этом "не знает" (например находится в состоянии ShowModal).
Кстати внутри обработчиков формы Form2 и ее контролов вместо Form2.чегонибудь... следует писать Self.чегонибудь...
Либо Вы Вашу Form2 в первый раз пытаетесь показывать точно таким же способом (вызываете ShowWindow вместо Form2.Show)
Либо где нибудь в другом месте кода неправильно управляете созданием/показом/уничтожением этой формы.
Причины могут быть разные. Надо искать где.
Советую поочередно "отключать" (обернуть в коммент) куски кода которые что либо производят с самой формой Form2 и контролов на ней расположенных (в части геометрии и отображения /скрытия), пока при вызове (из кода на Form1) ShowWindow(Form2.Handle, SW_RESTORE) не перестанет проявляться "эффект исчезания кнопки и реагирования на закрытие".
Ищите... Чудес не бывает... :)
 

Shouldercannon

Well-known member
25.05.2010
128
0
#6
В проекте всё по умолчанию, только одно процедура кнопки и вот такие пироги
Похоже, на этом споткнулся -
Либо Вы Вашу Form2 в первый раз пытаетесь показывать точно таким же способом (вызываете ShowWindow вместо Form2.Show)
 

Вложения