* * * *

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.
Aprile 19, 2024, 01:44:22 am

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

398 Visitatori, 0 Utenti

Autore Topic: OpenDialog SaveDialog  (Letto 2234 volte)

alexarmato66

  • Full Member
  • ***
  • Post: 141
  • Karma: +1/-0
OpenDialog SaveDialog
« il: Maggio 29, 2021, 06:42:51 pm »
Qualcuno ha un esempio di come salvare ed aprire un file con SaveDialog ed OpenDialog un
componente TEdit ed una griglia TStringGrid contemporaneamente ?

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:OpenDialog SaveDialog
« Risposta #1 il: Maggio 30, 2021, 09:54:58 am »
Scusa, ma non sono sicuro di avere capito ...
Vuoi che nello stesso momento vengano aperte sia la finestra della "SaveDialog" che quella della "OpenDialog" ?

Se è così, l'unico modo che mi viene in mente, è quello di aprire una delle 2 tramite un thread separato, e l'altra nel thread principale.

Se non è così, potresti spiegare un po' più approfonditamente cosa vorresti fare?

Ciao, Mario


alexarmato66

  • Full Member
  • ***
  • Post: 141
  • Karma: +1/-0
Re:OpenDialog SaveDialog
« Risposta #2 il: Maggio 30, 2021, 05:02:39 pm »
NO, vorrei salvare in un unico file sia dei componeneti Tstringgrid che dei componenti tipo TEdit

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:OpenDialog SaveDialog
« Risposta #3 il: Maggio 30, 2021, 06:16:39 pm »
Puoi adattare questo per salvare:
Codice: [Seleziona]
    with SaveDialog1 do begin
      DefaultExt:= '.CSV';
      Filter:= 'File CSV (*.CSV)|*.CSV';
      SaveDialog1.Title:='Seleziona il file';
      SaveDialog1.Options:=[ofEnableSizing,ofViewDetail,ofReadOnly];

      //Preimposto il valore attuale
      FileName:=NomefileCSV;
      if Execute then begin
        NomefileCSV:=FileName;
      end;
    end;

    Scrivi:=False;
    if (NomefileCSV <> '') then begin
      qui metti il tuo codice
    end;

Questo invece per leggere:
Codice: [Seleziona]
  with OpenDialog1 do begin
    DefaultExt:= '.CSV';
    Filter:= 'File CSV (*.CSV)|*.CSV';
    OpenDialog1.Title:='Seleziona il file';
    OpenDialog1.Options:=[ofEnableSizing,ofViewDetail,ofReadOnly];

    //Preimposto il valore attuale
    FileName:=NomeFileCSV;
    if Execute then begin
      NomeFileCSV:=FileName;
    end;
  end;
 
  //... lo apro
  if FileExists(NomeFileCSV) then begin
      qui metti il tuo codice
  end else begin
    ShowMessage('Il file da aprire non esiste');
  end;

alexarmato66

  • Full Member
  • ***
  • Post: 141
  • Karma: +1/-0
Re:OpenDialog SaveDialog
« Risposta #4 il: Maggio 30, 2021, 06:36:12 pm »
Grazie. E se dovessi salvare anche un componenete TEdit dovrei aggiungere un altro OpenDialog2 e SaveDialog2
o posso inglobarlo nello stesso Open/SaveDialog?

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:OpenDialog SaveDialog
« Risposta #5 il: Maggio 30, 2021, 06:40:42 pm »
Forse stiamo parlando di 2 cose diverse ...

OpenDialog, serve per selezionare un file, e passare tale nome al sorgente. Poi sta a te scrivere il codice di come leggere il file.
Stessa logica per SaveDialog.

Ciao, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:OpenDialog SaveDialog
« Risposta #6 il: Maggio 30, 2021, 07:45:58 pm »
Immagino che ciò che vuole fare @alexarmato66 è serializzare un componente.

La serializzazione di un componente è una operazione che comporta alcune problematiche, una tra le principali controindicazioni è la possibile variazione del componente in una successiva versione dell'ambient edi sviluppo.

E' bene che invece di salvare il componente (serializzare), vengano salvate le sue proprietà notevoli: ad esempio in una TEdit il suo valore TEXT è in una TStringGrid i valori Strings.

Cioò rende compatibile il codice comunque il componente venga modificato in futuro (o almeno con meno possibilità di incompatibilità).

Ciao
 
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:OpenDialog SaveDialog
« Risposta #7 il: Maggio 31, 2021, 10:18:48 am »
ciao alexarmato66

se non ho capito male, devi salvare su un unico file
  • controlli (TEdit)
  • componenti (Dialogs)
  • oggetti che non hanno componente grafico (TStringList)

La cosa non è proprio immediata, bisognerebbe chiarire un po' di cose.

Per gli oggetti che derivano da TPersistent hai a disposizione le informazioni RTTI.
Comunque sia questo ti permette di poter salvare facilmente le proprietà che sono dichiarate published.
Devi vedere però se hai necessità di salvare anche proprietà non published (cioè le public).
Ad esempio il TOpenDialog ha solo le opzioni come published mentre può darsi tu voglia salvare filtri e magari il filename selezionato. Questo vuol dire che devi inventarti un tuo serializzatore.

Per gli oggetti che non derivano da TPersistent come TStringList, non hai proprietà published (quindi ricadi nel caso OpenDialog), in più, probabilmente immagino vorrai salvare il contenuto dei dati.

Quindi, visto che la necessità è di salvare tutto su un unico file, potrei consigliarti di realizzare una classe che si occupi della serializzazione in generale.
In questa classe dovresti predisporre un metodo per ogni classe da serializzare, esempio:
  • AggiungiSerializzazione_TOpendialog
  • AggiungiSerializzazione_TStringList
  • AggiungiSerializzazione_TEdit

poi un metodo per lettura e scrittura:
  • SalvaOggettiSerializzati
  • CaricaOggettiSerializzati

In questo modo isoli i problemi di serializzazione in metodi diversi ed hai una classe che gestisce il tutto.

nomorelogic
Imagination is more important than knowledge (A.Einstein)

alexarmato66

  • Full Member
  • ***
  • Post: 141
  • Karma: +1/-0
Re:OpenDialog SaveDialog
« Risposta #8 il: Giugno 03, 2021, 04:13:24 pm »
Non sono molto esperto...mi basterebbe un esempio di scrittura ed apertura di un file formato testo dove ci siano
almeno due stringgrid ed un TEdit.

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:OpenDialog SaveDialog
« Risposta #9 il: Giugno 03, 2021, 07:17:32 pm »
Allego progetto per il salvatagggio e il caricamento di una TEdit e di una TStringGrid.
Il codice dovrebbe essere chiaro.

Quando lanci la prima volta il programma, puoi aprire il file di esempio (prova.cpst) presente nella cartella stessa e vedi cosa accade.

Parti da qui, è la cosa più semplice secondo me.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

alexarmato66

  • Full Member
  • ***
  • Post: 141
  • Karma: +1/-0
Re:OpenDialog SaveDialog
« Risposta #10 il: Giugno 03, 2021, 08:38:36 pm »
GRAZIE!!!!DRAGO ROSSO SEI UN FENOMENO!!!

alexarmato66

  • Full Member
  • ***
  • Post: 141
  • Karma: +1/-0
Re:OpenDialog SaveDialog
« Risposta #11 il: Ottobre 20, 2021, 08:42:31 am »
Se volessi modificare l'esempio Save.zip per il salvataggio diretto,
senza Save As, come dovrei fare?Grazie

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:OpenDialog SaveDialog
« Risposta #12 il: Ottobre 20, 2021, 10:12:32 am »
Il codice originale, in particolare il "SaveDialog1.Execute" (e così pure per la OpenDialog1)
Codice: [Seleziona]
    if SaveDialog1.Execute then
      begin
        MemStr := TFileStream.Create(SaveDialog1.FileName, fmCreate); 
viene usato esclusivamente per assegnare un nome al file che dovrà essere elaborato (scritto in questo caso).

Il nome del file scelto dall'utente viene assegnato dal componente alla proprietà "SaveDialog1.FileName".
Se commenti l'Execute e sostituisci a FileName una stringa (o una variabile stringa) hai ciò che chiedi.
Codice: [Seleziona]
    //if SaveDialog1.Execute then
      begin
        //MemStr := TFileStream.Create(SaveDialog1.FileName, fmCreate);
        MemStr := TFileStream.Create('sono il nome del file dal creare.cpst', fmCreate); 

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

alexarmato66

  • Full Member
  • ***
  • Post: 141
  • Karma: +1/-0
Re:OpenDialog SaveDialog
« Risposta #13 il: Ottobre 20, 2021, 11:31:54 am »
GRAZIE!!!

alexarmato66

  • Full Member
  • ***
  • Post: 141
  • Karma: +1/-0
Re:OpenDialog SaveDialog
« Risposta #14 il: Settembre 15, 2022, 08:32:12 am »
Per il mio progetto ho utilizzato l'esempio di DRAGOROSSO postato il Giugno 03, 2021, 07:17:32.Ho un solo problema quando carico più files sembrerebbe che alcuni dati , forse delle stringgrid, rimangano in memoria contaminando così i risultati.Forse dovrei pulire in qualche modo le stringgrid?Qualcuno può aiutarmi?Grazie

 

Recenti

How To

Utenti
  • Utenti in totale: 785
  • Latest: gmax
Stats
  • Post in totale: 18771
  • Topic in totale: 2233
  • Online Today: 404
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 398
Total: 398

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.