Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1203686127
kaif
2008-02-22 16:15
2008.04.06
Погода


15-1203618603
smartleds
2008-02-21 21:30
2008.04.06
Вот такой вопрос , если перемножаю две переменные типа longint


15-1203497699
md10
2008-02-20 11:54
2008.04.06
SQL and C Sharp


10-1143175895
SDA
2006-03-24 07:51
2008.04.06
Как из Delph ей распечатать заданный лист Word a???


9-1167753854
Fosgen
2007-01-02 19:04
2008.04.06
Проекту HOMESHIP требуются художники-моделлеры.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский