Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 5.038 pregleda

Najnovija ↓

Skakanje forme pri OnShow 19.09.2008. u 15:49 · pre 220 meseci #1
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?
Re: Skakanje forme pri OnShow 19.09.2008. u 16:26 · pre 220 meseci #2
Za takve stvari koristi OnCreate a ne OnShow.
Potpis
"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
Re: Skakanje forme pri OnShow 19.09.2008. u 20:20 · pre 220 meseci #4
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

Re: Skakanje forme pri OnShow 19.09.2008. u 20:33 · pre 220 meseci #5
> 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.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Skakanje forme pri OnShow 19.09.2008. u 23:28 · pre 220 meseci #6
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
Re: Skakanje forme pri OnShow 20.09.2008. u 01:04 · pre 220 meseci #7
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 !!!
Re: Skakanje forme pri OnShow 20.09.2008. u 13:09 · pre 220 meseci #8
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?
Re: Skakanje forme pri OnShow 22.09.2008. u 08:36 · pre 220 meseci #9
Kad sam ubacio

Code:

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


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

Hvala na pomoči
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme