Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.26;
Скачать: CL | DM;

Вниз

Сворачивание/разворачивание форм.   Найти похожие ветки 

 
Дельфятник   (2002-08-13 16:04) [0]

По нажатию кнопки у меня сворачиваются все формы кроме двух и вызывается форма CopyForm. После того, как она закрыта, я хочу развернуть все окна, которые были свёрнуты, а этого почему-то не получается. Делаю я так:

Сворачивание:
procedure TInputForm.OpenClick(Sender: TObject);
var i: Word;
begin // Событие OnClick на TBitBtn
for i:=0 to Screen.FormCount-1 do
begin
Screen.Forms[i].Tag:=0;
if (Screen.Forms[i].Name<>"MainForm") and (Screen.Forms[i].Name<>"Fm_main") and
Screen.Forms[i].Visible and (Screen.Forms[i].WindowState<>wsMinimized) then
begin
Screen.Forms[i].WindowState:=wsMinimized;
Screen.Forms[i].Tag:=1
end
end
end;

Разворачивание:
procedure TCopyForm.FormHide(Sender: TObject);
var i: Word;
begin
for i:=0 to Screen.FormCount-1 do if (Screen.Forms[i].Name<>"MainForm") and
(Screen.Forms[i].Name<>"Fm_main") and Screen.Forms[i].Visible then
begin
if Screen.Forms[i].Tag=1 then
Screen.Forms[i].WindowState:=wsNormal;
Screen.Forms[i].Tag:=0
end
end;

MainForm и Fm_main - это, как все наверное уже догадались, имена форм, которые не должны сворачиваться. Проблема состоит в том, что после закрытия формы CopyForm не разворачиваются ни одна форма. Если убрать условие if Screen.Forms[i].Tag=1 then, то разворачиваются все свёрнутые формы, а не только те, которые были свёрнуты перед вызовом CopyForm. Понятно, что можно просто разворачивать все свёрнутые формы, но это не то, чего я пытаюсь добиться.
Почему-то когда программа доходит до условия if Screen.Forms[i].Tag=1 then то у всех форм Tag=0, хотя перед вызовом CopyForm у развёрнутых окон присваивался Tag:=1. При этом Tag"и других форм в других частях программы не меняются.


 
dmtr   (2002-08-13 17:49) [1]

Попробуй в процедуре разворотки исправить
Screen.Forms[i].Visible на Screen.Forms[i].Visible = False


 
Дельфятник   (2002-08-14 09:16) [2]

Вы хотите сказать, что надо разворачивать невидимые формы?
Я смотрел в отладчике, что программа заходит внутрь конструкции begin .. end, но никогда не выполняется условие if Screen.Forms[i].Tag=1 then.


 
Дельфятник   (2002-08-14 09:39) [3]

Да, я забыл написать, что сразу после сворачивания форм идёт вызов CopyForm.ShowModal, то есть процедура TInputForm.OpenClick имеет вид:

procedure TInputForm.OpenClick(Sender: TObject);
var i: Word;
begin // Событие OnClick на TBitBtn
for i:=0 to Screen.FormCount-1 do
begin
Screen.Forms[i].Tag:=0;
if (Screen.Forms[i].Name<>"MainForm") and (Screen.Forms[i].Name<>"Fm_main") and
Screen.Forms[i].Visible and (Screen.Forms[i].WindowState<>wsMinimized) then
begin
Screen.Forms[i].WindowState:=wsMinimized;
Screen.Forms[i].Tag:=1
end
end;
CopyForm.ShowModal
end;

Ещё я изменил процедуру разворачивания (что, впрочем, не помогло).

procedure TCopyForm.FormHide(Sender: TObject);
var i: Word;
begin
for i:=0 to Screen.FormCount-1 do if Screen.Forms[i].Visible then
begin
if Screen.Forms[i].Tag=1 then
Screen.Forms[i].WindowState:=wsNormal;
Screen.Forms[i].Tag:=0
end
end;


 
Smithson ©   (2002-08-14 12:49) [4]

ты знаешь...
Из интереса прогнал твои куски - у меня работает. Delphi 5.5


 
dmtr   (2002-08-14 12:54) [5]

Напиши процедуру разворачивания в событие OnClose для CopyForm.
У меня сработало.


 
Дельфятник   (2002-08-14 13:40) [6]

2 Smithson: У меня Win2000 и Delphi 5.0 (Build 5.62).

2 dmtr: пробовал, не работает.

В общем, проблема в следующем: при сворачивании формы её Tag"у присваивается единица, а когда доходит до разворачивания, то у всех форм Tag"и оказываются равными нулю. При этом Tag"и форм нигде больше не используются и не меняются. Прям мистика какая-то.


 
Skier ©   (2002-08-14 14:11) [7]

>Дельфятник


> У меня Win2000 и Delphi 5.0 (Build 5.62).
>................
> Прям мистика какая-то.

Ну ежели мистика, может тебе стоит Delphi
пропачить, чтобы было Delphi 5.0 (Build 6.18) ?


 
Дельфятник   (2002-08-14 14:31) [8]

Короче. Я завёл TStringList, в который запихиваю имена сворачиваемых форм. А потом только их и разворачиваю. Всё замечательно работает. Но всё равно, всем спасибо.


 
dmtr   (2002-08-14 14:50) [9]

Я проверил Tag до и после минимизации. Да, действительно Tag становится равным 0 сразу после минимизации формы. Но не смотря на это у меня все работает нормально.
Попробуй так. У меня работает.

procedure TInputForm.OpenClick(Sender: TObject);
var i: Word;
begin // Событие OnClick на TBitBtn
for i:=0 to Screen.FormCount-1 do
if (Screen.Forms[i].Name<>"MainForm") and (Screen.Forms[i].Name<>"Fm_main") and Screen.Forms[i].Visible then
Screen.Forms[i].WindowState:=wsMinimized;
CopyForm.ShowModal
end;

procedure TCopyForm.FormHide(Sender: TObject);
var i: Word;
begin
for i:=0 to Screen.FormCount-1 do
Screen.Forms[i].WindowState:=wsNormal;
end;


 
Дельфятник   (2002-08-14 15:23) [10]

dmtr>Да, действительно Tag становится равным 0 сразу после минимизации формы

Во-первых, я пробовал вместо нуля и единицы ставить другие значения - не помогало.
Во-вторых, я пробовал не только

Screen.Forms[i].Tag:=1;
Screen.Forms[i].WindowState:=wsMinimized;

но и вариант
Screen.Forms[i].WindowState:=wsMinimized;
Screen.Forms[i].Tag:=1
который, вообще-то исправляет Tag после минимизации формы.
Но всё равно для меня это уже неактуально, поскольку я сделал это с использованием TStringList.


 
dmtr   (2002-08-14 15:29) [11]

>Дельфятник
Зачем тебе TStringList. Попробуй код, который я предложил.


 
Дельфятник   (2002-08-14 15:38) [12]

2 dmtr: Ваш вариант, во-первых, разворачивает все формы, хотя мне надо чтобы разворачивались только те, которые были свёрнуты автоматически.
А во-вторых, у меня есть форма, у которой WindowState=wsMaximized. Это, конечно, можно обойти доавлением соответствующего условия, но первого замечания это не снимает.


 
dmtr   (2002-08-14 15:44) [13]

>Дельфятник
Странно. У меня разворачиваются окна, свернутые только в этом потоке(тобиш что свернул, то и развернул)


 
Дельфятник   (2002-08-14 16:13) [14]

В своей программе я не создаю потоков.



Страницы: 1 вся ветка

Текущий архив: 2002.08.26;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.015 c
1-85097
dmtr
2002-08-14 15:34
2002.08.26
Windows 2000 Advanced Server


1-84944
maxim2
2002-08-13 09:45
2002.08.26
Можно ли добавить в ЕХЕ файл свою форму


3-84893
Corte ™
2002-08-05 09:45
2002.08.26
Чем лечится capability not supported!!!!!


6-85139
matvey
2002-06-13 16:01
2002.08.26
Диплом горит


3-84884
relict
2002-08-06 08:42
2002.08.26
QReport помогите сформировать отчет