Форум: "Начинающим";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];
Вниз
Обновление и позиция формы Найти похожие ветки
← →
Andrewtitoff © (2008-03-12 11:49) [0]Здравствуйте!, у меня в приложении несколько форм, одна из которых служит для отображения некой информации и еще несколько диалоговых форм, первая форма периодически перерисовывается, и при этом все кроме одной формы(одновременно видна только одна из диалоговых форм) при обновлении первой оказываются на заднем плане, свойства у всех дополнительных форм одинаковые(FormStyle : fsStayOnTop), а у первой FormStyle : fsNormal, в диологовых формах в FormShow такой код:
with Screen do
for ix := 0 to FormCount-1 do
if Forms[ix] <> Form_New then
Forms[ix].Enabled := false;
что бы пока не закроется окно с другими нельзя было работать...
Немогу понять почему при обновлении окна оказываются на заднем плане, причем не все а кроме одного...
← →
Сергей М. © (2008-03-12 11:56) [1]
> свойства у всех дополнительных форм одинаковые(FormStyle
> : fsStayOnTop)
Ну ты и извращенец)
> что бы пока не закроется окно с другими нельзя было работать
Метод ShowModal - он чем не угодил ?
← →
Palladin © (2008-03-12 11:58) [2]
> что бы пока не закроется окно с другими нельзя было работать.
> ..
а почему нельзя использовать ShowModal, а не Show для "диологовых" форм?
← →
Andrewtitoff © (2008-03-12 11:59) [3]>Ну ты и извращенец)
А что не так? =)))
>Метод ShowModal - он чем не угодил ?
Честно говоря просто не знал, погуглил : нашел что нашел, попробовал - работает ну и успокоился... =))))
← →
Сергей М. © (2008-03-12 12:06) [4]
> А что не так?
Ну ты ж тем самым требуешь ото всех этих форм, чтобы каждыя из них, будучи видимой, была при этом "наверху".
Сам-то подумай, как могут две или более форм быть одновременно "наверху", на переднем плане ?
> просто не знал, погуглил : нашел что нашел
Зачем было гуглить, когда справка перед носом ?
Не так уж и много Show-методов у формы - всего-то два, и поведение обоих описано в справке.
← →
Andrewtitoff © (2008-03-12 12:28) [5]В смысле одновременно?, у меня видимая одновременно только одна, кнопки вызова этих фрм находятся на другой форме и она неактивна пока видима какая либо из этих, так что одновременно их неотображаю
← →
Andrewtitoff © (2008-03-12 12:32) [6]А... ну да, ну так видима то из них только одна, а как они медду собой мне пофиг, но по отношению к другим окнам то они наверху должны быть, а они оказываются позади формы, FormStyle которой равен fsNormal...
← →
Сергей М. © (2008-03-12 12:35) [7]
> у меня видимая одновременно только одна
Ну раз видима только одна, то о какой "переднеплановости" может идти речь ?
← →
Andrewtitoff © (2008-03-12 12:37) [8]одна из тех чье свойство равно fsStayOnTop...
← →
Сергей М. © (2008-03-12 12:39) [9]Если она одна видимая в данный момент, то по барабану fsStayOnTop она или не fsStayOnTop
← →
Andrewtitoff © (2008-03-12 12:41) [10]есть еще форма которая все время видима, но она fsNormal....
← →
Сергей М. © (2008-03-12 12:48) [11]
> есть еще форма которая все время видима
Ну а что ж тогда говорил, что только одна видима ?
Вот пусть та, которая у тебя fsStayOnTop, визуализируется методом ShowModal, А стиль у нее установи обычный, т.е. fsNormal.
← →
Andrewtitoff © (2008-03-12 12:53) [12]Так я и говорил что видима одна из тех, которые fsStayOnTop....
Ааа.., ясно, пасиба, ща попробую!... =)))
← →
Andrewtitoff © (2008-03-12 13:01) [13]Странно..., все равно вторая форма остается доступной.... =(((
← →
Andrewtitoff © (2008-03-12 13:06) [14]Из за чего это может быть?, я попробовал создал новый проект с двумя формами, все работает, а в этом неработает..., что еще на это может влиять? =(((
← →
Andrewtitoff © (2008-03-12 13:13) [15]Ой, сорри, все работает..., сейчас все в божеский вид приведу и скажу что получилось...
Да кстати а при таком вызове я могу пользоваться ShowMessege?
← →
Andrewtitoff © (2008-03-12 13:20) [16]Тааак.., это конечно все хороше, тока как теперь сделать что бы это окно в свою очередь при определенном условии показывало еще одно окно и тоже единственно активное?...
← →
Andrewtitoff © (2008-03-12 13:24) [17]И все равно при перерисовке той формы эта прячется за нее... =((((
← →
Сергей М. © (2008-03-12 13:24) [18]
> при таком вызове я могу пользоваться ShowMessege?
Ничто этому не мешает
> как теперь сделать что бы это окно в свою очередь при определенном
> условии показывало еще одно окно и тоже единственно активное
Тот же ShowModal используй
← →
Плохиш © (2008-03-12 13:26) [19]
> Andrewtitoff © (12.03.08 13:20) [16]
> Тааак.., это конечно все хороше, тока как теперь сделать
> что бы это окно в свою очередь при определенном условии
> показывало еще одно окно и тоже единственно активное?
Для "чукчей не читателей" повторяю, надо показывать другую форму с помощью метода ShowModal! Так понятнее?
← →
Andrewtitoff © (2008-03-12 13:35) [20]>Тот же ShowModal используй
Так ругается..., пишет "Cannot make a visible window modal"... =(((
← →
Сергей М. © (2008-03-12 13:39) [21]Установи у формы в дизайн-тайм св-во Visible = False
Методы Show, ShowModal сами сделают форму видимой
← →
Andrewtitoff © (2008-03-12 13:46) [22]>Установи у формы в дизайн-тайм св-во Visible = False
В смысле в "в дизайн-тайм", в Object Inspector оно у меня и так стоит False
Ну это ладно.., главная проблема так и осталась, окно все равно уползает на задний план... =((((
← →
Сергей М. © (2008-03-12 13:54) [23]
> в "в дизайн-тайм", в Object Inspector оно у меня и так стоит
> False
Так ты ж его делаешь True при первом же вызове Show !
← →
Andrewtitoff © (2008-03-12 13:56) [24]НУ да.., так я тогда чегото непонял, а что такое и где это "дизайн-тайм"? =)))
← →
Сергей М. © (2008-03-12 14:06) [25]Ты прикидываешься или на самом деле такой ?)
Если в Инспекторе объектов (видеть его ты можешь только в "дизайн-тайм") у формы (в дан.случае не основной) ты выставил Visible=False, то в "ран-тайм" она НЕ будет видима до тех пор , пока ты не вызовешь ее метод Show (это тоже самое что и установка Visible=True) ИЛИ ShowModal.
← →
Andrewtitoff © (2008-03-12 14:26) [26]Ну так я сразу сказал что у меня и так Visible = False...
← →
Сергей М. © (2008-03-12 14:28) [27]Значит на момент вызова ShowModal оно уже не False.
← →
Andrewtitoff © (2008-03-12 14:33) [28]Ясно.., ну ладно, с этим окном попозже разберусь, меня волнует то, что те то окна так и продолжают уползать на задний план... =(((
← →
Сергей М. © (2008-03-12 14:35) [29]
> те то окна так и продолжают уползать на задний план
Какие еще "те" ?
Ты вообще читаешь, что тебе тут пишут ?)
← →
Andrewtitoff © (2008-03-12 14:38) [30]ДА..., я переделал все как вы и сказали:
Это все дело убрал:
with Screen do
for ix := 0 to FormCount-1 do
if Forms[ix] <> Form_New then
Forms[ix].Enabled := false;
и использую ShowModal...
← →
Andrewtitoff © (2008-03-12 14:39) [31]Тока в итоге все как было - так и осталось, та же проблема... =(((
← →
Сергей М. © (2008-03-12 14:41) [32]fsStayOnTop тоже везде убрал ?
← →
Andrewtitoff © (2008-03-12 14:42) [33]Да!...
← →
Сергей М. © (2008-03-12 14:47) [34]Ну и ?
Чтобы визуализировать любую форму в режиме модального диалога, ты вызываешь ее метод ShowModal - в рез-те она занимает передний план и не дает фокуса ни одной из других видимых в этот момент форм (не важно как визуализированных - модально или немодально) до момента своего закрытия.
Если ты следуешь этой логике, то в чем проблема ? Непонятно ..
← →
Andrewtitoff © (2008-03-12 14:57) [35]Все верно.., только вся проблемав том что форма, которая должна находиться все время на заднем плане каждые 15минут по таймеру перерисовывается и при этом оказывается на переднем плане, естественно активность форм сохраняется и в итоге пользователь видит только неактивные формы с которыми ему ничего не сделать, а форма вызванная при помощи ShowModal находится сзади нее и на нее получается тоже не нажать.... =(((
← →
Сергей М. © (2008-03-12 15:00) [36]Показывай процедуру обработки таймера ..
← →
Andrewtitoff © (2008-03-12 15:11) [37]Вот код:
procedure TFormMain.Timer1Timer(Sender: TObject);
begin
SysTime:=copy(DateTimeToStr(time),12,8);
...
if pos(":",SysTime)=2 then SysTime:="0"+SysTime;
if ((copy(SysTime,4,2)="00")and(copy(SysTime,7,2)="00"))or((copy(SysTime,4,2)="15") and(copy(SysTime,7,2)="00"))or((copy(SysTime,4,2)="30")and(copy(SysTime,7,2)="00 "))or((copy(SysTime,4,2)="45")and(copy(SysTime,7,2)="00"))then checkP;
....
end;
..............
procedure checkP;
var
FP1 : TFileStream;
FP2 : TFileStream;
i : integer;
s : myString;
s1,s2 : string;
h1,h2 : integer;
m1,m2 : integer;
code : integer;
fp : longint;
begin
If FileExists(MD+"\z.lft")and(not SH) then
begin
if FileExists(MD+"\p.lft") then
{}begin
FP1:=TFileStream.create(MD+"\z.lft",fmOpenReadWrite);
FP2:=TFileStream.create(MD+"\p.lft",fmOpenReadWrite);
FP2.Position:=FP2.Size;
FP1.Position:=0;
i:=FP1.read(s,671);
s1:=SysTime;
if pos(":",s1)=2 then s1:="0"+s1;
val(copy(s1,1,2),h1,code);
val(copy(s1,4,2),m1,code);
while i<>0 do
begin
i:=FP1.read(s,671);
if (s.Remont<>"")and(s.Prostoy="")and(s.VPuska="")then
begin
s2:=s.VPost;
val(copy(s2,1,2),h2,code);
val(copy(s2,4,2),m2,code);
if (h2<h1)and(s.Remont<>"Простой") then
begin s.Remont:="";s.Zayavitel:=SysDate;FP2.Write(s,671);fp:=fP1.Position; fP1.Position:=fP1.Position-671;s.Remont:="Простой"; FP1.Write(s,671);fP1.Position:=fp; end;
if (h2=h1)and(s.Remont<>"Простой") then if m2<m1 then
begin s.Remont:="";s.Zayavitel:=SysDate;FP2.Write(s,671);fp:=fP1.Position; fP1.Position:=fP1.Position-671;s.Remont:="Простой"; FP1.Write(s,671);fP1.Position:=fp; end;
end;
end;
FP1.Free;
FP2.Free;
h1:=CountRecordFileOfMystring(MD+"\p.lft");
FP2:=TFileStream.create(MD+"\p.lft",fmOpenReadWrite);
for h2:=1 to h1-1 do
begin
fP2.Position:=h2*671;
i:=FP2.read(s,671);
if i=0 then ShowMessage("checkP Ошибка : нулевой результат...");
s.Npp:=Format("%.3d",[h2]);
if s.VViezda<>"Hidden" then s.VViezda:="Visible";
fP2.Position:=h2*671;
FP2.Write(s,671);
end;
FP2.Free;
end
else
{} begin
FP1:=TFileStream.create(MD+"\z.lft",fmOpenReadWrite);
FP2:=TFileStream.create(MD+"\p.lft",fmCreate);
ClearString(s);
s.BRIGADE:="Простой на";
s.STREET:=SysDate;
s.Zayavitel:="Начат в:";
s.Prichina:=copy(DateTimeToStr(time),12,8);
if pos(":",s.Prichina)=2 then s.Prichina:="0"+s.Prichina;
FP2.Write(s,671);
i:=FP1.read(s,671);
s1:=SysTime;
if pos(":",s1)=2 then s1:="0"+s1;
val(copy(s1,1,2),h1,code);
val(copy(s1,4,2),m1,code);
while i<>0 do
begin
i:=FP1.read(s,671);
if (s.Remont<>"")and(s.Prostoy="")and(s.VPuska="")then
begin
s2:=s.VPost;
val(copy(s2,1,2),h2,code);
val(copy(s2,4,2),m2,code);
if (h2<h1)and(s.Remont<>"Простой") then
begin s.Remont:="";s.Zayavitel:=SysDate;FP2.Write(s,671);fp:=fP1.Position; fP1.Position:=fP1.Position-671;s.Remont:="Простой"; FP1.Write(s,671);fP1.Position:=fp; end;
if (h2=h1)and(s.Remont<>"Простой") then if m2<m1 then
begin s.Remont:="";s.Zayavitel:=SysDate;FP2.Write(s,671);fp:=fP1.Position; fP1.Position:=fP1.Position-671;s.Remont:="Простой"; FP1.Write(s,671);fP1.Position:=fp; end;
end;
end;
FP1.Free;
FP2.Free;
h1:=CountRecordFileOfMystring(MD+"\p.lft");
FP2:=TFileStream.create(MD+"\p.lft",fmOpenReadWrite);
for h2:=1 to h1-1 do
begin
fP2.Position:=h2*671;
i:=FP2.read(s,671);
if i=0 then ShowMessage("checkP Ошибка : нулевой результат...");
s.Npp:=Format("%.3d",[h2]);
if s.VViezda<>"Hidden" then s.VViezda:="Visible";
fP2.Position:=h2*671;
FP2.Write(s,671);
end;
FP2.Free;
end;
if formShow_.Visible then
begin
FormShow_.Hide;
FormShow_.Show;
end;
end;
end;
...............
procedure TFormShow_.FormShow(Sender: TObject);
var
i : integer;
n : integer;
begin
ClearGrid;
If Tag=99 then
begin
SSutK.Show;
SProstoy.Hide;
RSutK.Hide;
RProstoy.Show;
PSutK.Hide;
PProstoy.Show;
Label1.Visible:=false;
Label2.Visible:=false;
Label3.Visible:=True;
Label4.Visible:=True;
if FileExists(MD+"\p.lft") then begin
ClearString(nss);
with TFileStream.create(MD+"\p.lft",fmOpenRead) do
try
i:=read(nss,671);
n:=0;
while i<>0 do
begin
StringGrid1.Cells[0,n]:=nss.Npp;
StringGrid1.Cells[1,n]:=nss.BRIGADE;
StringGrid1.Cells[2,n]:=nss.REGNUM;
StringGrid1.Cells[3,n]:=nss.STREET;
StringGrid1.Cells[4,n]:=nss.HOUSE;
StringGrid1.Cells[5,n]:=nss.CORP;
StringGrid1.Cells[6,n]:=nss.PARNUM;
StringGrid1.Cells[7,n]:=nss.Zayavitel;
StringGrid1.Cells[8,n]:=nss.Remont;
StringGrid1.Cells[10,n]:=nss.BELONG;
StringGrid1.Cells[11,n]:=nss.VViezda;
StringGrid1.Cells[13,n]:=nss.HOLDER;
i:=read(nss,671);
n:=n+1;
end;
finally
Free;
end;
end;
end else
begin
SSutK.Hide;
SProstoy.Show;
RSutK.Show;
RProstoy.Hide;
PSutK.Show;
PProstoy.Hide;
Label1.Visible:=True;
Label2.Visible:=True;
Label3.Visible:=false;
Label4.Visible:=false;
if FileExists(MD+"\z.lft") then begin
ClearString(nss);
with TFileStream.create(MD+"\z.lft",fmOpenRead) do
try
i:=read(nss,671);
n:=0;
while i<>0 do
begin
StringGrid1.Cells[0,n]:=nss.Npp;
StringGrid1.Cells[1,n]:=nss.BRIGADE;
StringGrid1.Cells[2,n]:=nss.REGNUM;
StringGrid1.Cells[3,n]:=nss.STREET;
StringGrid1.Cells[4,n]:=nss.HOUSE;
StringGrid1.Cells[5,n]:=nss.CORP;
StringGrid1.Cells[6,n]:=nss.PARNUM;
StringGrid1.Cells[7,n]:=nss.Zayavitel;
StringGrid1.Cells[8,n]:=nss.Prichina;
StringGrid1.Cells[9,n]:=nss.VPost;
StringGrid1.Cells[10,n]:=nss.VViezda;
StringGrid1.Cells[11,n]:=nss.VPuska;
StringGrid1.Cells[12,n]:=nss.Prostoy;
StringGrid1.Cells[13,n]:=nss.Remont;
i:=read(nss,671);
n:=n+1;
end;
finally
Free;
end;
end;
end;
end;
В общем в таймере вызывается процедура checkP, которая обрабатывает содержимое пары файлов, после чего(над этим вы уже смеялись, но мне так удобнее т.к. эти действия прописанные в ОнШоу той формы необходимо выполнять частенько, можно конечно оформить это просто процедурой, но по моему разницы нет поэтому я запихнул сюда, поэтому если это не влияет на функциональность меня так устраивает...):
FormShow_.Hide;
FormShow_.Show;
где в свою очередь в ОнШоу проверяются некие условия и заполняется нужным образом таблица, а так же показываются нужные кнопки...
← →
Сергей М. © (2008-03-12 15:40) [38]
> FormShow_.Hide;
> FormShow_.Show;
Это ты так "обновляешь" ?!
ну ты и кулибин)))))
← →
Andrewtitoff © (2008-03-12 15:42) [39]Аха =)))
А что в этом плохого? =)))
← →
Сергей М. © (2008-03-12 15:46) [40]Нет бы тем или иным способом сказать некоей форме, мол, некие условия изменились, мол, обнови в связи с этим свои контролы и пр.))
Так ведь нет ! Нужно обязательно скрыть ее, чтобы тут же показать !
Этот ты сам додумался или нагуглил ?)
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.008 c