Autor Téma: jak uložit a zase nahrát obsah programu s vyplněnými komponenty edit?  (Přečteno 4460 krát)

Offline Havri

  • Příspěvků: 13
  • Karma: 1
jak uložit a zase nahrát obsah programu s vyplněnými komponenty edit?

Prosím o nějakou to dpověď.
Děkuji

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7392
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Uložiť si ich obsah na HDD. Asi Ti postačí ini súbor.
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

havran

  • Host
ale jakym zpusobem?

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3527
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
ale jakym zpusobem?
Nejjednoduzsi bude stahnout a nainstalovat JVCL do Delphi a pouzit komponentu TJvFormStorage: ulozeni/obnoveni stavu vsech widgetu na formu naklikas, zbytek muzes doprogramovat v udalostech Before/After.
« Poslední změna: 30-07-2013, 15:21:24 od pf1957 »

Offline Havri

  • Příspěvků: 13
  • Karma: 1
JVCL jsem nainstaloval a netušim kde tu komponentu najdu

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3527
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
JVCL jsem nainstaloval a netušim kde tu komponentu najdu
To si snad delas srandu  >:(
To je takovy problem podivat se, co se mi do Delphi nainstalovalo a prohlidnout si obsah novych zalozek na palete komponent?  :o

Offline Havri

  • Příspěvků: 13
  • Karma: 1
tak v tom případě jsem to udělal špatně jelikož mi tam nic nepřibylo  ::) za romrhnaný čas se omlouvám

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7392
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Nejako takto
Kód: Delphi [Vybrat]
  1.  
  2. procedure ReadPanelWidth(pnl: TLMDSimplePanel);
  3. var
  4.   iniF: TIniFile;
  5.   Text: String;
  6. begin
  7.   try
  8.     iniF := TIniFile.Create(GetCurrentDir + '\SVBJasot.ini');
  9.     Text := iniF.ReadString(pnl.Owner.Name + pnl.Name, 'Width', '');
  10.  
  11.  
  12.     if not (Text = '') then
  13.       pnl.Width := StrToInt(Text);
  14.   finally
  15.     FreeAndNil(iniF);
  16.   end;
  17. end;
  18.  
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Havri

  • Příspěvků: 13
  • Karma: 1
a nešlo by to pomocí save dialogu?

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1205
  • Karma: 44
    • Verze Delphi: 7, 2010
Urcite slo :)
Staci vlozit TSaveDialog na formular a zavolat Execute ;)

Offline Havri

  • Příspěvků: 13
  • Karma: 1
a mohl bych porosi jednoduchý přiklad v kodu?
děkuji

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1205
  • Karma: 44
    • Verze Delphi: 7, 2010
myslis jako ...

if SaveDialog1.Execute then
  CestaProUlozeni := GetCurrentDir + SaveDialog1.FileName;

savedialog je jen k ziskani cesty, kam to ulozit,
samotne ukladani si vyres, jak potrebujes :)
(at uz sam ukladanim do INI nebo tech JVCL)

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
Pro ulozeni nastaveni :

Kód: Delphi [Vybrat]
  1.  DataFile := TIniFile.Create('\data.ini');
  2.      DataFile.WriteString('Prvni_policko','login',Edit1.Text);
  3.      DataFile.WriteString('Druhy_policko','pass',Edit2.Text);

Pro nacteni :

Kód: Delphi [Vybrat]
  1. var IniSoub: TIniFile;
  2.   begin
  3.   if OpenDialog1.Execute then
  4.           IniSoub := TIniFile.Create(ChangeFileExt( OpenDialog1.FileName, '.INI'));
  5.           try
  6.           begin
  7.             Edit1.Text := IniSoub.ReadString('Prvni_policko', 'login', Edit1.Text);
  8.             Edit2.Text := IniSoub.ReadString('Druhy_policko', 'pass', Edit2.Text);
  9.           end;
  10.     finally
  11.     IniSoub.Free;
  12.     end ;
  13.   end;



tady jsem ti to narychlovku udelal jak to pouzivam ja.....

https://dl.dropboxusercontent.com/u/38580461/INISoubor.zip

Budu rad kdyz se na to mrkne i nekdo zkusenejsi a trosku pokrytizuje :)))) jsem totalni zacatecnik a ucim se
« Poslední změna: 31-07-2013, 18:33:25 od Kony »

Offline Havri

  • Příspěvků: 13
  • Karma: 1
mockrát děkuji přesně tohle jsem potřeboval

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
jsem rad ze jsem pomohl... Konecne jsem tady taky nekomu poradil :)))))

Offline TLama

  • Guru
  • *****
  • Příspěvků: 597
  • Karma: 31
    • Verze Delphi: 7, 2009, XE3
Možností je hafo... Tenhle kód např. uloží texty ze všech objektů typu TEdit do INI souboru
ve formátu hodnot vlastností Name=Text do sekce [EditValues].

Uložení:

Kód: Delphi [Vybrat]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   I: Integer;
  4.   IniFile: TIniFile;
  5.   Component: TComponent;
  6. begin
  7.   IniFile := TIniFile.Create('c:\Somewhere\AppData.ini');
  8.   try
  9.     for I := 0 to ComponentCount - 1 do
  10.     begin
  11.       Component := Components[I];
  12.       if Component is TEdit then
  13.         IniFile.WriteString('EditValues', Component.Name, TEdit(Component).Text);
  14.     end;
  15.   finally
  16.     IniFile.Free;
  17.   end;
  18. end;

Načtení:

Kód: Delphi [Vybrat]
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. var
  3.   I: Integer;
  4.   IniFile: TIniFile;
  5.   Component: TComponent;
  6.   EditValues: TStringList;
  7. begin
  8.   IniFile := TIniFile.Create('c:\Somewhere\AppData.ini');
  9.   try
  10.     EditValues := TStringList.Create;
  11.     try
  12.       IniFile.ReadSectionValues('EditValues', EditValues);
  13.       for I := 0 to EditValues.Count - 1 do
  14.       begin
  15.         Component := FindComponent(EditValues.Names[I]);
  16.         if Component is TEdit then
  17.           TEdit(Component).Text := EditValues.ValueFromIndex[I];
  18.       end;
  19.     finally
  20.       EditValues.Free;
  21.     end;
  22.   finally
  23.     IniFile.Free;
  24.   end;
  25. end;

Budu rad kdyz se na to mrkne i nekdo zkusenejsi a trosku pokrytizuje :)))) jsem totalni zacatecnik a ucim se

- kritizovat se píše s měkkým i ;)

- formátování kódu... Je možná moderní, že si každý programátor zkouší vytvořit vlastní styl formátování kódu,
  ale věř nebo ne, ten by měl být jenom jeden a používaný všemi (viděl jsem už dost "originalit", na které byla
  "radost pohledět", bohužel byly totálně nečitelné). Punk je zkrátka jinde ;)

- zkus psát v angličtině. Vím, že je to buřtfuk a místní komunita mě za to ukamenuje, ale ani nevíte jak trapně
  vypadá v prod. kódu název eventy např. OnOcasekClick v kombinaci s OnRoutePointClick u stejné třídy...

- snaž se vyhnout použití globálních proměnných (proměnná DataFile) co to jen jde. Jejich (nadměrné) použití
  většinou značí chyby v návrhu. Pokud bys však nechtěl TIniFile objekt vytvářet pokaždé znovu, mohl bys ho
  nadeklarovat třeba jako privátní pole toho formuláře, tj:

Kód: Delphi [Vybrat]
  1. type
  2.   TForm1 = class(TForm)
  3.     Edit1: TEdit;
  4.     Edit2: TEdit;
  5.     Button1: TButton;
  6.     Button2: TButton;
  7.     OpenDialog1: TOpenDialog;
  8.     procedure Button1Click(Sender: TObject);
  9.     procedure Button2Click(Sender: TObject);
  10.   private
  11.     FDataFile: TIniFile; // <- namísto globální proměnné si můžeš vytvořit privátní pole třídy (F na začátku značí "F"ield)
  12.   public
  13.     { Public declarations }
  14.   end;
« Poslední změna: 31-07-2013, 23:00:05 od TLama »

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3527
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
- zkus psát v angličtině. Vím, že je to buřtfuk a místní komunita mě za to ukamenuje, ale ani nevíte jak trapně
  vypadá v prod. kódu název eventy např. OnOcasekClick v kombinaci s OnRoutePointClick u stejné třídy...
Spis bychom meli ukamenovat ty, co uci zanaset nejake narodni  patvary do anglickeho  programovaciho prostredi >:( 

Tem bych doporucoval, ze kdyz cesky tak cesky, jako to ma Soukup v Baltikovi pro prvnacky nebo to mival za bolsevika Bokr v Jazalu v Plzni na technice:
dokud (...) dělej ..., když (...) tak ... jinak ....(nebo jak to vypadalo). Ovsem to byl problemove orientovany jazyk pro logicke automaty a dneska zda se po nem neni ani vidu ani slechu, i kdyz Bokr na te skole stale funguje...

Umet pojmenovavat strozumitelne anglicky entity v programu je podle me nezbytna podminka, at uz na trhu prace nebo treba kvuli moznosti poslat dotaz na Stack Overflow nebo do jineho mezinarodniho fora. Tam nad fragmentem kodu demonstrujiciho problem a obsahujicim neaglicke symboly taky nikdo nejasa, spis ho vyfuckuji.

Cim driv si nekdo osvoji vhodnou slovni zasobu, tim lip.


A pokud clovek nepise prg, u ktereho si neni absolutne jisty, ze ho nikdy nebude lokalizovat do jineho jazyka, tak bych vrele doporucil jako prvnotni verzi delat anglickou (te rozumi kazdy) a do cestiny ji prekladat jako do kterehokoli ciziho jazyka. Jinak si zbytecne pridelava praci, protoze rada toolu generuje z textu automaticky identifikatory a cestina se jim tam vetsinou dost nelibi

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
ale v jadru to zase tak spatne nemam ne ???
Funkcni to splni a to je to hlavni

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1574
  • Karma: 37
    • Pepak.net
ale v jadru to zase tak spatne nemam ne ???
Funkcni to splni a to je to hlavni
No, základní myšlenka je v pořádku. Akorát že tam máš chybu jako kráva, u které se divím, že ti ji zatím nikdo neomlátil o hlavu: Schválně si zkus, co se stane, když v tom OpenDialogu žádný soubor nevybareš a klikneš na Cancel... Snad tě to poučí, že konzistentní odsazování není jen taková parádička, ale má reálný smysl. Jo, a při ukládání bys eventuelně mohl ten TIniFile zase uvolnit, ale to počítám vzniklo jen při kopírování do fóra.

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
ano to vim ze kdyz nic nevyberu ze to hodi chybu..... ale nevim kde tu chybu delam aby to nedelalo..... a to uvolneni jsem jen nedopsal. u cteni jsem ten soubor uvolnoval

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
ano to vim ze kdyz nic nevyberu ze to hodi chybu..... ale nevim kde tu chybu delam aby to nedelalo.....

Máš to blbě naformátované, to je celé. Za then ti chybí blok, takže se provede jenom ten jeden řádek a to try-finally se provede vždy, zatímco ty předpokládáš, že jenom v případě, že ten dialog uživatel nezrušil.

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
a muzu poprosit jak by to melo vypadat ???? diky moc

Offline TLama

  • Guru
  • *****
  • Příspěvků: 597
  • Karma: 31
    • Verze Delphi: 7, 2009, XE3
a muzu poprosit jak by to melo vypadat ???? diky moc

Kód: Delphi [Vybrat]
  1. var
  2.   IniSoub: TIniFile;
  3. begin
  4.   if OpenDialog1.Execute then
  5.   begin // <- tady ti chyběl begin..end blok
  6.     IniSoub := TIniFile.Create(ChangeFileExt(OpenDialog1.FileName, '.INI'));
  7.     try
  8.       Edit1.Text := IniSoub.ReadString('Prvni_policko', 'login', Edit1.Text);
  9.       Edit2.Text := IniSoub.ReadString('Druhy_policko', 'pass', Edit2.Text);
  10.     finally
  11.       IniSoub.Free;
  12.     end;
  13.   end;
  14. end;