Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
Дельфятник   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.006 c
3-84935
Пушкин
2002-08-06 16:41
2002.08.26
UpdateSQL & StoredProc


14-85185
monomah
2002-07-30 16:05
2002.08.26
Показ RTF с картинками


1-84952
VL
2002-08-15 12:42
2002.08.26
снова Excell


6-85149
Kr_Alex
2002-06-17 10:28
2002.08.26
Internet connection


8-85137
deema
2002-03-20 20:50
2002.08.26
Запись звука на диск





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский