Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Skakanje forme pri OnShow

[es] :: Pascal / Delphi / Kylix :: Skakanje forme pri OnShow

[ Pregleda: 3668 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Skakanje forme pri OnShow19.09.2008. u 14:49 - pre 188 meseci
Problem je sljedeći:

pri onclose forme pamtim parametre forme: left, top, hight, width kao i položaje splitera i ostali kontrola na formi.

pri otvaranju forme, na onshow forme učitavam sve te parametre. Ako se razlikuju od default-nih koje sam postavio pri kreiranju forme, tj. ako se forma resiz-a ili premješta, na ekranu se vidi njeno "skakanje".

Forma je MDIChild

Kako ju učiniti nevidljivom dok se ne postave svi njeni parametri?

Ili neka druga ideja?
 
Odgovor na temu

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 190
*.eunet.yu.



+6 Profil

icon Re: Skakanje forme pri OnShow19.09.2008. u 15:26 - pre 188 meseci
Za takve stvari koristi OnCreate a ne OnShow.
"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
200.49.157.*

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Skakanje forme pri OnShow19.09.2008. u 16:19 - pre 188 meseci
Za takve stvari je mnogo bolje koristiti konstruktor.
Tko leti vrijedi
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Skakanje forme pri OnShow19.09.2008. u 19:20 - pre 188 meseci
Pokušao sam ih staviti u OnCreate i u OnShow, ali mi javljaju: "Access violation..."

ovo je primjer postavljanja parametara:

fmIdok.WindowState := dm.IniRead('FM_IDOK', 'STATE', self.WindowState);
fmIdok.Left := dm.IniRead('FM_IDOK', 'LEFT', fmIdok.Left);

dm je datamodul,
InRead je overlodana procedure koja iz ini file-a čita parametre. Ona odradi posao, greška se dogodi pri fmIdok.WindowState :=

koristim se sljedećim i to radi:

procedure TfmIdok.FormPaint(Sender: TObject);
begin
if (fmIdok <> nil) and not(LoadFirst) then begin
LoadFirst := true;
fmIdok.WindowState := dm.IniRead('FM_IDOK', 'STATE', self.WindowState);
...


Kako upitrijebiti konstuktor? POkušao sam napraviti:
Constructor create(TOwner: TControl); override;

pa u konstruktor, nakon inherited ubaciti fmIdok.WindowState := ... isto javi grešku

 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Skakanje forme pri OnShow19.09.2008. u 19:33 - pre 188 meseci
> fmIdok.WindowState := dm.IniRead('FM_IDOK', 'STATE', self.WindowState);
> fmIdok.Left := dm.IniRead('FM_IDOK', 'LEFT', fmIdok.Left);

WindowState := dm.IniRead('FM_IDOK', 'STATE', WindowState);
Left := dm.IniRead('FM_IDOK', 'LEFT', Left);

Ako i dalje budeš dobijao AV, stavi breakpoint na prvi red u metodi i onda redom mišem prelazi preko svih promenljivih dok ne nađeš onu koja je nil.
 
Odgovor na temu

_deran_

Član broj: 69493
Poruke: 252
77.46.154.*



+1 Profil

icon Re: Skakanje forme pri OnShow19.09.2008. u 22:28 - pre 188 meseci
ne mozes nista koristiti iz datamodula u TfmIdok.OnCreate jer on u tom trenutku verovatno ne postoji. verovatno ti je fmIdok glavni form i kad se on kreira jos nista drugo nije kreirano. funkciju IniRead prebaci u fmIdok pa probaj tako
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Skakanje forme pri OnShow20.09.2008. u 00:04 - pre 188 meseci
Savkic je u pravu, tako radi, ali djelomično :)
Ne javlja AV, ali forma pleše po ekranu kao i prije. Problem je WindowState.

Ako je postavljen ud design-u na wsMaximize, a korisnik ju je smanjio (što se pamti), pri sljedećem pokretanju forme, zapamčeno je i vraća se WindowState koji je postavio korisnik (wsNormal, a ja sam pri designu postavio wsMaximized).
Isto vrijedi i oratno...
Podešavanje pozicije radi OK, izvrši se trenutno, bez treperenja, jedino što postavljanje WindowState mora biti prvi, inaće pokvari položaj (left, top..)

Ne, TfmIdok nije glavna forma, datamodul je kreiran, funkcije se izvrše... nema smilsa da funkcije prebacujem u formu jer se koriste iz svih formi, a jedino datamodul je linkan u sve forme. U zadnje vrijeme za to koristim unit u kom nema forme za takove stvari - funkcije i klase koje koristim iz više mjesta.

Kako vi rješavate pamčenje izleda ekrana (izmjene koje napravi korisnik - veličina forme, raspored kolona grida, visina grida sa splitterom)? Po mogučnosti bez polke na keranu :)



Zanimljivo: pokušao sam učitavanje prebaciti u construcotr:

Constructor create(TOwner: TControl); override;

nakon toga forma više nije MDIChild !!!
 
Odgovor na temu

0rc
BG

Član broj: 151321
Poruke: 107
*.rcub.bg.ac.yu.



+40 Profil

icon Re: Skakanje forme pri OnShow20.09.2008. u 12:09 - pre 188 meseci
Cini mi se da imas nesrecan redosled poteza.. ili ti je forma poprilicno slozena, puno kontrola, mozda i neki OnResize handleri koji pozivaju jedni druge? Ja obicno posnimam sta mi treba na OnClose (ili OnDestroy), ucitavam na OnCreate. Za sada nisam imao problema koje opisujes. Jedno (kvazi)resenje koje ti mogu ponuditi je sledece:
Code:

  LockWindowUpdate(Self.Handle);
  try
    ...
    (rad sa vizuelnim elementima forme ovde)
    ...
  finally
    LockWindowUpdate(0);
  end;

Ovo nije bas najsrecnije, ali mozda ti pomogne dok ne resis na neki bolji nacin.

Citat:
Zanimljivo: pokušao sam učitavanje prebaciti u construcotr:

Constructor create(TOwner: TControl); override;

nakon toga forma više nije MDIChild !!!


Zar ne bi trebalo
Code:

constructor Create(TOwner: TComponent); override;


A i proveri inherited poziv, da ga nisi izostavio, premestio sa pocetka, prosledio pogresni parametar?
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Skakanje forme pri OnShow22.09.2008. u 07:36 - pre 188 meseci
Kad sam ubacio

Code:

 LockWindowUpdate(Self.Handle);
....
 LockWindowUpdate(0);


izgldeda ok. pojavi se gdje treba, u izgledu kako treba...

Hvala na pomoči
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Skakanje forme pri OnShow

[ Pregleda: 3668 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.