Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: moessner - Aprile 27, 2022, 03:18:26 pm

Titolo: loadFromFile e saveToFile con STRING GRID - lazarus 220 windows
Inserito da: moessner - Aprile 27, 2022, 03:18:26 pm
Salve a tutti,

sto cercando di compilare una string grid.

Riesco a fare l'inserimento la modifica e la cancellazione perché la stringgrid viene aggiornata come voglio io.

Ma tutto viene perso quando chiudo il programma. Ossia il LoadFromFile e il SaveToFile sembra vengono completamente ignorati.

Ricordo inoltre che non dovrebbe essere necessario usare LoadFromFile e il SaveToFile.

Vi allego le due form qui sotto.

Grazie fin da ora.

moessner - Mario Piva


unit u_lst;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Grids, ComCtrls;

type

  { Tf_lst }

  Tf_lst = class(TForm)
    sb: TStatusBar;
    sg: TStringGrid;
    tb: TToolBar;
    _OK: TToolButton;
    _can: TToolButton;
    _ins: TToolButton;
    _mod: TToolButton;
    _del: TToolButton;
    procedure FormShow(Sender: TObject);
    procedure _canClick(Sender: TObject);
    procedure _delClick(Sender: TObject);
    procedure _insClick(Sender: TObject);
    procedure _modClick(Sender: TObject);
    procedure _OKClick(Sender: TObject);
  private

  public
    pri : integer ;
    cog, nom, u_n, pwd : string ;
  end;

var
  f_lst: Tf_lst;

implementation

uses u_edt ;

{$R *.lfm}

{ Tf_lst }

procedure Tf_lst._insClick(Sender: TObject);
begin
  f_edt.e_nom.text := '' ;
  f_edt.e_cog.text := '' ;
  f_edt.e_u_n.text := '' ;
  f_edt.e_pwd.text := '' ;
  f_edt.cb.checked := false ;

  f_edt.showModal ;
  sg.Options := sg.Options + [ goEditing, goAlwaysShowEditor, goAutoAddRows ] ;
  pri := 0 ;
  if ( f_edt.cb.checked ) then pri := 1 ;
  sg.InsertRowWithValues( sg.RowCount, [ '', cog, nom,u_n, pwd , intToStr (pri) ] ) ;

end;

procedure Tf_lst._modClick(Sender: TObject);
begin
  f_edt.e_nom.text := sg.cells [ 1 , sg.row ] ;
  f_edt.e_cog.text := sg.cells [ 2 , sg.row ] ;
  f_edt.e_u_n.text := sg.cells [ 3 , sg.row ] ;
  f_edt.e_pwd.text := sg.cells [ 4 , sg.row ] ;
  f_edt.cb.checked := ( sg.cells [ 5 , sg.row ] = '1' ) ;
  f_edt.showModal ;

end;

procedure Tf_lst._OKClick(Sender: TObject);
begin
  sg.saveToFile ( 'utenti.txt' ) ;
end;

procedure Tf_lst._delClick(Sender: TObject);
begin
  if MessageDlg('Attenzione', 'Sei sicuro di voler cancellare l''utente scelto ?', mtConfirmation, [mbYes, mbNo, mbIgnore],0) = mrYes
    then
      begin
        sg.DeleteRow ( sg.row ) ;
      end;
end;

procedure Tf_lst.FormShow(Sender: TObject);
begin
  sg.loadFromFile ( 'utenti.txt' ) ;
  sb.simpleText := 'Totale utenti : ' + intToStr ( sg.rowCount - 1 ) ;
end;

procedure Tf_lst._canClick(Sender: TObject);
begin
  close ;
end;

end.     
// _____________________________________________________________________
unit u_edt;

{$mode ObjFPC}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls,
  Buttons, ComCtrls;

type

  { Tf_edt }

  Tf_edt = class(TForm)

    cb: TCheckBox;
    e_nom: TLabeledEdit;
    e_cog: TLabeledEdit;
    e_u_n: TLabeledEdit;
    e_pwd: TLabeledEdit;
    bOK: TBitBtn;
    bCan: TBitBtn;
    sb: TStatusBar;
    procedure bCanClick(Sender: TObject);
    procedure bOKClick(Sender: TObject);
    procedure e_u_nChange(Sender: TObject);
  private

  public

  end;

var
  f_edt: Tf_edt;

implementation

uses u_lst ;

{$R *.lfm}

{ Tf_edt }

procedure Tf_edt.bOKClick(Sender: TObject);
begin
  f_lst.nom := e_nom.text ;
  f_lst.cog := e_cog.text ;
  f_lst.u_n := e_u_n.text ;
  f_lst.pwd := e_pwd.text ;
  f_lst.pri := 0 ;
  if ( cb.checked ) then f_lst.pri := 1 ;
end;

procedure Tf_edt.e_u_nChange(Sender: TObject);
begin
  if ( e_u_n.text <> '' ) then
      bOK.enabled := true
    else
      bOK.enabled := false ;
end;

procedure Tf_edt.bCanClick(Sender: TObject);
begin
  close ;
end;

end. 

Titolo: Re:loadFromFile e saveToFile con STRING GRID - lazarus 220 windows
Inserito da: DragoRosso - Aprile 27, 2022, 03:52:05 pm
Ciao, nessun componente salva in automatico i dati, solo un database lo fà.
La StringGrid, se editata a runtime deve essere "salvata" con i propri metodi e ricaricata alla partenza.

Prova ad inserire nel tuo codice questo:

Codice: [Seleziona]
  Sg.SaveOptions := [soDesign, soPosition, soContent, soAttributes];

Vedi se ti aiuta.
Inoltre, al nome del file io darei il percorso completo ... discussioni già effettuate in altri post.

Codice: [Seleziona]
 var Percorso: string;
Percorso := ExtractFilePath(Application.ExeName) ;
FileName := Percorso+'Utenti.txt';

EDIT: Inoltre invece nel FormShow, prova ad inserire il tuo codice nel FormCreate. Non vorrei ci fosse qualche gabola alla partenza con il FormShow. E puoi anche andare a leggere il file creato per vedere se i dati ci sono.

Ciao
Titolo: Re:loadFromFile e saveToFile con STRING GRID - lazarus 220 windows
Inserito da: moessner - Aprile 28, 2022, 09:27:17 am
Salve a tutti,

ho provato a fare le modifiche consigliate ma mi da questo errore :

Compila il progetto, Destinazione: p_ute.exe: Codice di uscita 1, Errori: 1
u_lst.pas(62,28) Error: Incompatible types: got "Set Of TGridSaveOptions" expected "TGridOptions"

relative a questa riga .

  sg.options := sg.options + [ soDesign, soPosition, soContent, soAttributes ] ;     

in pratica sembra non conosca il tipo di opzioni a cui si fa riferimento.

Grazie ancora
moessner - Mario Piva
Titolo: Re:loadFromFile e saveToFile con STRING GRID - lazarus 220 windows
Inserito da: DragoRosso - Aprile 28, 2022, 03:09:07 pm
Salve a tutti,

ho provato a fare le modifiche consigliate ma mi da questo errore :

Compila il progetto, Destinazione: p_ute.exe: Codice di uscita 1, Errori: 1
u_lst.pas(62,28) Error: Incompatible types: got "Set Of TGridSaveOptions" expected "TGridOptions"

relative a questa riga .

  sg.options := sg.options + [ soDesign, soPosition, soContent, soAttributes ] ;     

in pratica sembra non conosca il tipo di opzioni a cui si fa riferimento.

Grazie ancora
moessner - Mario Piva

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.....

Prova ad inserire nel tuo codice questo:

Codice: [Seleziona]
  Sg.SaveOptions := [soDesign, soPosition, soContent, soAttributes];