* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Maggio 14, 2024, 05:29:41 am

Inserisci il nome utente, la password e la durata della sessione.

537 Visitatori, 0 Utenti

Autore Topic: Problema passaggio dati.  (Letto 6867 volte)

Nicola

  • Full Member
  • ***
  • Post: 201
  • Karma: +0/-0
Problema passaggio dati.
« il: Febbraio 18, 2014, 11:37:35 pm »
Scusate il post, che sicuramente vi sembrerà banale, ma provengo da pascal in cui l'ide era praticamente testuale e con la potenza anche grafica di lazarus mi sto perdendo, e anche con
google non riesco ad uscirne.
Avrei bisogno di un chiarimento:
ho creato un programmino di prova dove al click sul bottone della finestra principale si apre una form secondaria; vorrei dalla form caricare dei dati nel record FFILE, ma il problema è, come faccio a passare
tale record alla seconda form?
Spero di essermi spiegato invio anche i sorgenti di prova, la unit pprogetto è la principale la unit pinserimento la secondaria alla quale vorrei passare il record.

Grazie
La disumanità del computer sta nel fatto che una volta
programmato e messo in funzione, si comporta in
maniera perfettamente onesta.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Problema passaggio dati.
« Risposta #1 il: Febbraio 19, 2014, 01:23:26 am »
Ciao Nicola.
Nella form2:

Codice: [Seleziona]
   Tforminserimento = class(TForm)
    provincia: TEdit;
    Label1: TLabel;
    procedure Label1Click(Sender: TObject);
    procedure provinciaChange(Sender: TObject);
  private
   fRecordDati : RecordDati;
  public
     public recordDaPassare: recordati read fRecordDati write fRecordDati;
  end;

Codice: [Seleziona]

procedure Tforminserimento.provinciaChange(Sender: TObject);
begin
  FRecordDati.provincia := 'Quella che vuoi";
  write(fdati,FRecordDati);
  showmessage ('Scritto record');
end;

Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Problema passaggio dati.
« Risposta #2 il: Febbraio 19, 2014, 01:30:07 am »
cmq, a me non piace molto la soluzione che ti ho proposto prima.

Codice: [Seleziona]
unit Pinserimento;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  TRecorDati=record
     provincia:string[20];
     settore:string[30];
     pagina:longint
  end;

  { Tforminserimento }

  Tforminserimento = class(TForm)
    provincia: TEdit;
    Label1: TLabel;
    procedure Label1Click(Sender: TObject);
    procedure provinciaChange(Sender: TObject);
  private
   fdati : File of RecordDati;
  public
    { public declarations }
  end;

var
  forminserimento: Tforminserimento;

implementation

{$R *.lfm}

{ Tforminserimento }
{$J+}
const
  NomeFile : String= '/home/nicola/Scrivania/WorkingDocs/ProveLazarus/File/filedati.dat';
{$J-}

procedure TFormInserimento.apriFile;
Begin
    assign (fdati,NomeFile);
     if fileexists (NomeFile) then
     begin
           reset(fdati);
           showmessage ('file già esistente')
      end
      else
      begin
           rewrite (fdati);
           showmessage ('file creato')
     end;
end;


procedure TFormInserimento.chiudiFile;
Begin
    fClose(fdati);
end;

procedure Tforminserimento.Label1Click(Sender: TObject);
begin

end;

procedure Tforminserimento.provinciaChange(Sender: TObject);
begin
  Try
  ApriFile;
  showmessage ('e qua mi fermo!!!')
  ChiudiFile;
  Except
   on E: Exception  do
   ShowMessage("Errore nella manipolazione del file:"+E.Message);
  end;
end;

end.

Questo ha il solo vantaggio che, in caso di errore il programma non entra in uno stato inconsistente.
Hai la tua bella eccezione che scatta e viene gestita all'interno del metodo. In modo atomico.
Se, per qualche motivo, in fase di boostrap, l'applicazione non collassa e non non ti apre i file, poi ti trovi gli handle sballati.


Stilgar
« Ultima modifica: Febbraio 19, 2014, 01:32:07 am da Stilgar »
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Nicola

  • Full Member
  • ***
  • Post: 201
  • Karma: +0/-0
Re:Problema passaggio dati.
« Risposta #3 il: Febbraio 19, 2014, 09:42:52 am »
Devo ammettere che non ci sarei mai arrivato da solo, mi manca la via di mezzo, cioè conosco il
pascal ma quando girava in dos e non si parlava di oggetti; che ne dici mi conviene acquistare il
manuale? ne vale la pena?
grazie ancora
ciao
La disumanità del computer sta nel fatto che una volta
programmato e messo in funzione, si comporta in
maniera perfettamente onesta.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2875
  • Karma: +20/-4
Re:Problema passaggio dati.
« Risposta #4 il: Febbraio 19, 2014, 07:06:50 pm »
il manuale lo puoi sempre acquistare ma credo che su internet trovi già molta documentazione ;)
Imagination is more important than knowledge (A.Einstein)

Nicola

  • Full Member
  • ***
  • Post: 201
  • Karma: +0/-0
Re:Problema passaggio dati.
« Risposta #5 il: Febbraio 21, 2014, 10:29:12 am »
nella procedure
procedure TFormInserimento.apriFile;
mi da sto errore
pinserimento.pas(45,36) Error: method identifier expected
La disumanità del computer sta nel fatto che una volta
programmato e messo in funzione, si comporta in
maniera perfettamente onesta.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2875
  • Karma: +20/-4
Re:Problema passaggio dati.
« Risposta #6 il: Febbraio 21, 2014, 03:05:40 pm »
ci posti il pezzo di codice incriminato?
Imagination is more important than knowledge (A.Einstein)

cliff

  • Newbie
  • *
  • Post: 14
  • Karma: +0/-0
Re:Problema passaggio dati.
« Risposta #7 il: Febbraio 22, 2014, 09:04:05 am »
Una soluzione "sporca" potrebbe essere creare una unit contenitore con dentro le variabili condivise che poi richiami da entrambe le form.
Ad esempio in questa unit metti la definizione del record, la variabile tipizzata e magari anche la procedura che provvedere a caricare in memoria i dati da file.
Nella form principale richiami la procedura di lettura, che provvederà a caricare il memoria i dati e memorizzare lo stato dell'operazione avvenuta.
Richiami la form secodaria, che vedrà lo stato del recupero dei dati e i dati già belli pronti da usare.
Puoi anche spostare il caricamento dei dati nella seconda form ....

Questo metodo "barbaro" lo uso spessissimo per condivire dei dati globali con le varie form del progetto.

Bye

Nicola

  • Full Member
  • ***
  • Post: 201
  • Karma: +0/-0
Re:Problema passaggio dati.
« Risposta #8 il: Febbraio 22, 2014, 02:03:10 pm »
questo è il codice "incriminato"
Codice: [Seleziona]
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
  const
    nomefile=('/home/nicola/Scrivania/WorkingDocs/ProveLazarus/prova file e label/movimenti.dat');
type
    fileprova=record
    citta:string[20];
    indirizzo:string [30];
    numero:longint;
    end;


  { TForm2 }

  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form2: TForm2;
  movimentoform:fileprova;
  filemovimentoform:file of fileprova;
  dimensione:longint;


implementation

{$R *.lfm}

{ TForm2 }

procedure TForm2.Edit1Change(Sender: TObject);
begin
 movimentoform.citta:=edit1.text;
 end;

procedure TForm2.Button1Click(Sender: TObject);
 var mvf:fileprova;

begin
 reset(filemovimentoform);
 while not eof (filemovimentoform)
       do begin
          read(filemovimentoform,mvf)
       end;
 write (filemovimentoform,movimentoform);
 closefile(filemovimentoform)

end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  edit1.text:='';
  edit2.text:='';
  edit3.text:='';
end;

procedure TForm2.Edit2Change(Sender: TObject);
begin
  movimentoform.indirizzo:=edit2.text;
end;

procedure TForm2.Edit3Change(Sender: TObject);
begin
  movimentoform.numero:=strtoint(edit3.text);
end;
  {$I-}
begin
  movimentoform.citta:='';
  movimentoform.indirizzo:='';
  movimentoform.numero:=0;
  assign(filemovimentoform,nomefile);

end.

però la soluzione "sporca" suggerita da cliff direi che proprio cosi' sporca non è tant'è che
avrei risolto il problema
La disumanità del computer sta nel fatto che una volta
programmato e messo in funzione, si comporta in
maniera perfettamente onesta.

El Salvador

  • Visitatore
Re:Problema passaggio dati.
« Risposta #9 il: Febbraio 22, 2014, 03:33:55 pm »
Invece di "file of fileprova;" dovresti utilizzare "TextFile" e quindi gestirti da te l'inserimento e la lettura dei dati nel file.

Vedi http://wiki.freepascal.org/File_Handling_In_Pascal
« Ultima modifica: Febbraio 22, 2014, 03:37:19 pm da El Salvador »

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18817
  • Topic in totale: 2240
  • Online Today: 522
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 537
Total: 537

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.