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

Maksimizovanje formi pri startu programa

[es] :: Pascal / Delphi / Kylix :: Maksimizovanje formi pri startu programa

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milos D
Beograd

Član broj: 5621
Poruke: 280
*.ptt.yu.



+1 Profil

icon Maksimizovanje formi pri startu programa01.11.2004. u 09:41 - pre 237 meseci
Skoro u svim mojim programima povremeno (ne mogu da provalim pod kojim tacno okolnostima se desava, a mislim da se cak ni isti kod ne ponasa uvek isto) imam problem sa ucitavanjem velicine i pozicije glavnog prozora prilikom starta (da bi prozor ostao onakav kakav je bio kada je korisnik zatvorio program). Naime, ako prilikom tog ucitavanja maksimizujem prozor desava se da on ostane u "normalnoj" velicini (dakle nije preko celog ekrana), ali taster restore/maximize je u stanju "restore" tj. ponasa se kao da je prozor maksimizovan. Ako ga kliknem, prozor ce ostati iste velicine, ali ce se malo pomeriti i taster ce preci u stanje "maximize". Ako ga opet kliknem maksimizovace prozor korektno i dalje sve radi OK.

Ponekad mi deluje da je stvar u tajmingu, pa sam premestao taj kod u OnCreate, Loaded, konstruktor forme, u dpr fajl, pre pravljenja drugih prozora, posle pravljenja drugih prozora, pa sam probao da maksimizujem preko WinAPI poziva (kojekakvih), svasta sam probao i taman kada pomislim da radi lepo opet isto %$#^&.

Da li ste imali slicna iskustva ili da ja potrazim neki sprej protiv gremlina?
 
Odgovor na temu

dekys
Dejan Stevanović

Član broj: 464
Poruke: 104



+1 Profil

icon Re: Maksimizovanje formi pri startu programa01.11.2004. u 10:29 - pre 237 meseci
Najlakse ti je da iskoristis dogadjaje OnActivate i OnClose i napises za prvi citanje velicine i pozicije prozora iz ini fala koji mozes da distribuiras iz Apalikacju.

primer (iz neke moje app koji pamti stanja nekih CheckBox-ova):
procedure TForm1.FormActivate(Sender: TObject);
var
MyIniFile: TIniFile;
begin
MyIniFile := TIniFile.Create(ExtractFilePath (Application.ExeName)+'myapp.ini');
with MyIniFile do
begin
Form1.CheckBox1.Checked := ReadBool('Main', 'CPH', CheckBox1.Checked);
Form1.CheckBox2.Checked := ReadBool('Main', 'Mid', CheckBox2.Checked);
Form1.Predhodnosortiranje1.Checked := ReadBool('Main', 'Sort', Form1.Predhodnosortiranje1.Checked);
end;
MyIniFile.Free;
end;
//Upisivanje u ini fajl
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
MyIniFile: TIniFile;
begin
MyIniFile := TIniFile.Create(ExtractFilePath (Application.ExeName)+'myapp.ini');
with MyIniFile do
begin
MyIniFile.WriteBool('Main', 'CPH', CheckBox1.Checked);
MyIniFile.WriteBool('Main', 'Mid', CheckBox2.Checked);
MyIniFile.WriteBool('Main', 'Sort', Form1.Predhodnosortiranje1.Checked);
end;
MyIniFile.Free;
end;

Ako zelis da ti se prilikom startovanja prikaze kao maxi onda trebas osobinu WindowsState postaviti kao wsMaximized.
 
Odgovor na temu

bancika
Branislav Stojkovic

Član broj: 24844
Poruke: 631
213.244.197.*

Sajt: www.diy-fever.com


+1 Profil

icon Re: Maksimizovanje formi pri startu programa01.11.2004. u 11:25 - pre 237 meseci
evo ti komponenta koju ja koristim
ona moze da radi i sa INI i sa registry. samo nije originalno napravljena da cuva maximizovan prozor i tako to. ja sam je dopravio, ali samo za registry, lako je da napises za INI ako ti treba
Code:

unit PosSaver;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TPosSaverHKEY = (_CLASSES_ROOT, _CURRENT_USER, _LOCAL_MACHINE, _USERS,
    _PERFORMANCE_DATA, _CURRENT_CONFIG, _DYN_DATA);

  TPosSaver = class(TComponent)
  private
    { Private declarations }
    FIniName: string;
    FIniSection: string;
    FUseRegistry: boolean;
    FRegKey: string;
    FRegRootKey: HKEY;
    F_RegRootKey: TPosSaverHKEY;
  protected
    { Protected declarations }
    procedure SetRegRootKey(Value: TPosSaverHKEY);
  public
    { Public declarations }
    procedure Restore;
    procedure Save;
  published
    { Published declarations }
    property IniName: string read FIniName write FIniName;
    property IniSection: string read FIniSection write FIniSection;
    property UseRegistry: boolean read FUseRegistry write FUseRegistry;
    property RegKey: string read FRegKey write FRegKey;
    property RegRootKey: TPosSaverHKEY read F_RegRootKey write SetRegRootKey;
  end;

procedure Register;

implementation

Uses
   IniFiles, Registry;

procedure Register;
begin
  RegisterComponents('Misc', [TPosSaver]);
end;

procedure TPosSaver.SetRegRootKey(Value: TPosSaverHKEY);
begin
  F_RegRootKey:=Value;
  case Value of
    _CLASSES_ROOT: FRegRootKey:=HKEY_CLASSES_ROOT;
    _CURRENT_USER: FRegRootKey:=HKEY_CURRENT_USER;
    _LOCAL_MACHINE: FRegRootKey:=HKEY_LOCAL_MACHINE;
    _USERS: FRegRootKey:=HKEY_USERS;
    _PERFORMANCE_DATA: FRegRootKey:=HKEY_PERFORMANCE_DATA;
    _CURRENT_CONFIG: FRegRootKey:=HKEY_CURRENT_CONFIG;
    _DYN_DATA: FRegRootKey:=HKEY_DYN_DATA;
  end;
end;

Procedure TPosSaver.Restore;
Var
   Ini:TIniFile;
   r: TRegistry;
   s: string;
Begin
  if FUseRegistry then
    begin
      r:=TRegistry.Create;
      r.RootKey:=FRegRootKey;
      r.OpenKey(FRegKey,false);
      if r.ValueExists('Top') and r.ValueExists('Left')  and r.ValueExists('Width') and r.ValueExists('Height') then
       begin
         (Owner as TForm).Top:=r.ReadInteger('Top');
         (Owner as TForm).Left:=r.ReadInteger('Left');
         (Owner as TForm).Width:=r.ReadInteger('Width');
         (Owner as TForm).Height:=r.ReadInteger('Height');
         if r.ReadBool('Maximized') then
          (Owner as TForm).WindowState := wsMaximized;
       end
      else
        (Owner as TForm).Position := poDesktopCenter;
      r.CloseKey;
      r.Free;
    end
  else
    begin
      Ini:=TIniFile.Create(FIniName);
      if FIniSection='' then s:='TPosSaver' else s:=FIniSection;
      (Owner as TForm).Top:=Ini.ReadInteger(s,'Top',(Owner as TForm).Top);
      (Owner as TForm).Left:=Ini.ReadInteger(s,'Left',(Owner as TForm).Left);
      (Owner as TForm).Width:=Ini.ReadInteger(s,'Width',(Owner as TForm).Width);
      (Owner as TForm).Height:=Ini.ReadInteger(s,'Height',(Owner as TForm).Height);
      Ini.Destroy;
    end;
End;

Procedure TPosSaver.Save;
Var
   Ini:TiniFile;
   r: TRegistry;
   s: string;
Begin
  if FUseRegistry then
    begin
      r:=TRegistry.Create;
      r.RootKey:=FRegRootKey;
      r.CreateKey(FRegKey);
      r.OpenKey(FRegKey,false);
      try r.WriteBool('Maximized', ((Owner as TForm).WindowState = wsMaximized));
      except on ERegistryException do ;  end;
      if (Owner as TForm).WindowState = wsMaximized then
       Exit;
      try r.WriteInteger('Top',(Owner as TForm).Top);
      except on ERegistryException do ;  end;
      try r.WriteInteger('Left',(Owner as TForm).Left);
      except on ERegistryException do ;  end;
      try r.WriteInteger('Width',(Owner as TForm).Width);
      except on ERegistryException do ;  end;
      try r.WriteInteger('Height',(Owner as TForm).Height);
      except on ERegistryException do ;  end;
      r.CloseKey;
      r.Free;
    end
  else
    begin
      Ini:=TIniFile.Create(FIniName);
      if FIniSection='' then s:='TPosSaver' else s:=FIniSection;
      Ini.WriteInteger(s,'Top',(Owner as TForm).Top);
      Ini.WriteInteger(s,'Left',(Owner as TForm).Left);
      Ini.WriteInteger(s,'Width',(Owner as TForm).Width);
      Ini.WriteInteger(s,'Height',(Owner as TForm).Height);
      Ini.Destroy;
    end;
End;


end.

Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

Milos D
Beograd

Član broj: 5621
Poruke: 280
*.ptt.yu.



+1 Profil

icon Re: Maksimizovanje formi pri startu programa01.11.2004. u 11:34 - pre 237 meseci
Hvala na odgovorima, ali problem nije u samom ucitavanju/snimanju nego u samom maksimizovanju forme. Ja dobro snimim i dobro ucitam podatak iz fajla da je prozor maksimizovan, ali kada postavim wsMaximized ili na bilo koji drugi nacin pokusam da (iz koda) maksimizujem prozor, dolazi do problema. Ponekad.
 
Odgovor na temu

vladab
Vladimir Bašanović
Beograd

Član broj: 9512
Poruke: 498
*.etf.bg.ac.yu.



Profil

icon Re: Maksimizovanje formi pri startu programa01.11.2004. u 16:56 - pre 237 meseci
Imam i ja slican problem. Pravio sam program koji treba da se startuje maximizovan i da sve komponente budu srazmerne sa tim. To nije problem. Problem je sto na rezoluciji 800x600 neki dugmici (koji u pocetku nisu vidljivi), kada se prikazu, budu podignuti u odnosu na mesto gde bi trebalo da stoje. Na svim ostalim (vecim) rezolucijama radi kako treba. Ne znam kako ovo da sredim.
 
Odgovor na temu

bancika
Branislav Stojkovic

Član broj: 24844
Poruke: 631
195.252.103.*

Sajt: www.diy-fever.com


+1 Profil

icon Re: Maksimizovanje formi pri startu programa01.11.2004. u 17:10 - pre 237 meseci
hoce to ponekad, ja onda koristim "divljacko resenje": stavi Timer sa intervalom 20ms i na OnTimer stavis
WindowState = wsMaximized; Timer1.Enabled := False
...to uvek radi
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.208.eunet.yu.



+1 Profil

icon Re: Maksimizovanje formi pri startu programa01.11.2004. u 19:35 - pre 237 meseci
stavi da ti inicijalna pozicija prozora (Position u Object inspector-u) bude poDefault pa probaj onda...

javi kako je proslo.
 
Odgovor na temu

bancika
Branislav Stojkovic

Član broj: 24844
Poruke: 631
195.252.103.*

Sajt: www.diy-fever.com


+1 Profil

icon Re: Maksimizovanje formi pri startu programa02.11.2004. u 00:09 - pre 237 meseci
cool, to radi :)
samo ostaje da kada se povrati u "normalno" stanje nece stajati na sredini nego na poDefault
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

Milos D
Beograd

Član broj: 5621
Poruke: 280
*.ptt.yu.



+1 Profil

icon Re: Maksimizovanje formi pri startu programa02.11.2004. u 18:01 - pre 237 meseci
Ha, pa kad bi me trenutno zezalo ja bi probao, ali eto sada radi kako treba (sa poDesigned) pa ne vredi da probam. Cim bude poceo da zeza (a pocece u najgorem mogucem trenutku, na primer kada budem upload-ovao 999-ti KB najnovije verzije na sajt) ja cu da probam sa poDefault jer to jos nisam probao.

Hvala na savetu u svakom slucaju.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Maksimizovanje formi pri startu programa

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

Postavi temu Odgovori

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