* * * *

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 24, 2024, 04:51:30 pm

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

150 Visitatori, 0 Utenti

Autore Topic: DLL per salvare e richiamare file txt.  (Letto 62281 volte)

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:DLL per salvare e richiamare file txt.
« Risposta #30 il: Gennaio 05, 2013, 05:30:49 pm »
Purtroppo continui a ignorare i suggerimenti che ti vengono dati e ad aggiungere comandi a casaccio...  :(
In questo modo, pur volendo, è davvero difficile poterti dare una mano, anche perché - e non è un rimprovero, ma una costatazione - parliamo linguaggi (di programmazione) differenti.

Ad esempio, ti avevo suggerito di aggiungere tutta la parte riguardante la configurazione nel comando Configure(), ma continui a metterla nel loop principale della dll.
Poi, spulciando tra i componenti di Profilab, ce ne sono alcuni che si occupano dell'input/output su file. Ho il sospetto che dovrai usare quelli per salvare e caricare valori. Ancora: c'è un componente che ti permette di salvare lo stato del front panel. Il componente Numeric Input accetta solo valori in uscita, quindi dalla dll non puoi impostarne il valore, ma soltanto utilizzando il componente di cui sopra.

Ciò detto, ho preparato un progettino di una semplice dll che accetta un input numerico e lo restituisce moltiplicato per un valore da impostare in una dialog di configurazione della dll. Vedi se riesci a tirarci fuori qualcosa di utile per il tuo progetto :)

Codice: [Seleziona]
Numeric Input --> DLL --> Numeric Display

Simon75

  • Full Member
  • ***
  • Post: 139
  • Karma: +0/-0
Re:DLL per salvare e richiamare file txt.
« Risposta #31 il: Gennaio 05, 2013, 07:53:57 pm »
Vi ringrazio per il supporto  :)
Forse mi spiego male piccola parentesi per Legolas( ho bisogno di chiamare le OpenDialog e SaveDialog da dei bottoni non posso configurare  e poi avviare l'applicazione, poi le numeric input sono uscite analogiche.Nel software non ce un modo per salvare su disco e poi richiamare il file salvato è per quello che mi sono ridotto a creare una DLL.
Quello che ho bisogno è di poter salvare su disco dei file txt tramite SaveDialog usando le numeric input, una volta salvate su disco devo poter richiamare il file txt con OpenDialog per poterlo caricare nelle numeric display ad ogni save con SaveDialog avrò tanti file txt dove poi potro scegliere cosa caricare con OpenDialog dentro le numeric display.

Ho inserito queste variabili appunto perché mi serve un modo per leggere nella variabile lettura quello che acquisisco da  ADD e la variabile scrittura per stampare nelle numeric display quello che leggo da i file txt aprendoli con OpenDialog.

Codice: [Seleziona]
    lettura: string;          // ho aggiunto queste variabili poichè mi serve leggere
    scrittura: string;         // ho aggiunto queste variabili poichè mi serve srivere


    PInput^[Leggi] := read(lettura);       //le due variabili le ho messe qui
    POutput^[Stampa] := write(scrittura);  //le due variabili le ho messe qui 




Grazie per l'attenzione.
A volte bisogna commettere errori per capire qual è la cosa giusta da fare...

Const
Errori=Esperienza

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:DLL per salvare e richiamare file txt.
« Risposta #32 il: Gennaio 05, 2013, 08:20:07 pm »
simon75
le difficoltà che ci sono nell'apprendere un nuovo linguaggio di programmazione sono il pane quotidiano di tutti noi che in un modo o nell'altro diamo una mano in questo forum.
Però devi capire che il codice che tu scrivi, 2 righe alla volta, è costantemente un nonsense. Condito con le tue idee per aiutarci a capire cosa vuoi realizzare, ma di nonsense si tratta e per portarlo a termine hai bisogno di qualcuno che mastichi pascal.

Sei stato corretto all'inizio a specificare che non sei un programmatore pascal ma, per lavorare in questo modo, dovresti prima chiedere nel forum se c'è qualcuno che vuole partecipare al tuo progetto. Questo forum serve anche a questo, anzi, serve a questo e con questo si arricchisce.

Questo post non vuole essere un rimprovero ovviamente.
Devi però comprendere che non puoi darci le direttive per scrivere il tuo progetto. :)

Esempio di nonsense :) :
Codice: [Seleziona]
PInput^[Leggi] := read(lettura); 
Imagination is more important than knowledge (A.Einstein)

Simon75

  • Full Member
  • ***
  • Post: 139
  • Karma: +0/-0
Re:DLL per salvare e richiamare file txt.
« Risposta #33 il: Gennaio 06, 2013, 10:45:34 am »
Ciao Legolas, cosa serve questo?

Codice: [Seleziona]
 {USER}
U0 = 0;
DLLIndex = 100;
Dove hai preso questa libreria?
Codice: [Seleziona]
Unit1 in 'Unit1.pas'; 
Puoi spiegarmi questo pezzo di codice?
Codice: [Seleziona]

  procedure Configure(PUser: PDLLParams);
  var
    DLG: TForm1;
  begin
    DLG := TForm1.Create(nil);
    with DLG do
    begin
      Caption := 'Counter [DLL' + FloatToStr(PUser^[DLLIndex]) + ']';

      if ShowModal = mrOk then
      begin
        puser^[U0] := SpinEdit1.Value;
      end;
      Free;
    end;
  end; 
Quel bottone che hai messo per moltiplicare i numeri come hai fatto a richiamarlo ovvero a renderlo visibile?

Ciao
Ti ringrazio
A volte bisogna commettere errori per capire qual è la cosa giusta da fare...

Const
Errori=Esperienza

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:DLL per salvare e richiamare file txt.
« Risposta #34 il: Gennaio 06, 2013, 10:55:59 am »
Simon,
 il progetto ha 2 "unità" logiche.
C'è il principale e una "form".
La form usa 2 file: "lfm" e "pas".
lfm contiene la definizioni e le risorse dei componenti grafici.
pas contiene il codice che usa il compilatore.

Il codice per il quale chiedevi spiegazioni è abbastanza semplice:
Codice: [Seleziona]

  procedure Configure(PUser: PDLLParams);
  var
    DLG: TForm1; // <- Definizione di una variabile di tipo TForm1
  begin
    DLG := TForm1.Create(nil); // <- Creazione dell'istanza della classe
    with DLG do // <- Serve a non ripettere di continuo DLG ad ogni utilzzo... come una sorta di scorciatoia
    begin
      Caption := 'Counter [DLL' + FloatToStr(PUser^[DLLIndex]) + ']'; //<- Assegna alla parte alta della finestra (caption) una stringa

      if ShowModal = mrOk then // <- Fa diventare MODALE la form. Rimane in primo piano (sull'applicazione)
      begin // <- Qui si entra solo se viene resituita OK dalla form di prima.
        puser^[U0] := SpinEdit1.Value;  // <- Assegna il valore del SpinEdit1 al PUser[U0].
      end;
      Free; Rilascia la ram dell'istanza usata
    end;
  end; 
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Simon75

  • Full Member
  • ***
  • Post: 139
  • Karma: +0/-0
Re:DLL per salvare e richiamare file txt.
« Risposta #35 il: Gennaio 06, 2013, 11:26:19 am »
Grazie stilgar,


Per esempio potrei richimare qualsiasi oggetto? basta cambiare con TForm l'oggetto desiderato?

Codice: [Seleziona]
DLG: TForm1; // <- Definizione di una variabile di tipo TForm1


Ma che libreria prende questa?
Codice: [Seleziona]

Unit1 in 'Unit1.pas';



Questa è una costante perché l'ha messa in user?
Cosa serve metterla in user?
Perché 100?
Codice: [Seleziona]

DLLIndex = 100;

A volte bisogna commettere errori per capire qual è la cosa giusta da fare...

Const
Errori=Esperienza

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:DLL per salvare e richiamare file txt.
« Risposta #36 il: Gennaio 06, 2013, 01:34:04 pm »
Le classi fanno da "tipo". Puoi dichiarare una variabile di qualsiasi tipo, ma se non sono tipi "base" li devi allocare e deallocare in memoria.

Unit1.pas è il file che contiene la form. (Lo zip non conteneva 200 file ... buttare un'occhiata?)

Perchè 100? Aspetta Legolas.
Gli indici validi, vanno da 0 a 100, ma potrebbe essere solo un caso. Se accedi ad un indice con PUser[101] vai a campi e leggi cose inconsistenti (Ammesso che non raggiri il compilatore, se non lo raggiri ti da errore e basta ;) )

Il fatto di scrivere cose PUser^[DLLIndex] non è "mettere" ma usare il valore.
L'assegnazione viene eseguita con l'operatore ":=", questo "mette" un valore dentro una variabile.
PUser^[DLLIndex] --> Leggi dell'array di puntatori a "extended" il centesimo valore.
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Simon75

  • Full Member
  • ***
  • Post: 139
  • Karma: +0/-0
Re:DLL per salvare e richiamare file txt.
« Risposta #37 il: Gennaio 06, 2013, 03:54:24 pm »
Cavolo non ho fatto caso della Unit1 nella cartella :)

Ha dovuto scriverla Legolas, oppure l'ha composta con gli oggetti gia pronti di Lazarus?

Codice: [Seleziona]

unit Unit1;

{$mode objfpc}{$H+}

interface

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

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    SpinEdit1: TSpinEdit;
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button3Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    edit1.Text := OpenDialog1.FileName;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
    edit2.Text := SaveDialog1.FileName;
end;

initialization
  Application.Initialize;
end.

Saluti
A volte bisogna commettere errori per capire qual è la cosa giusta da fare...

Const
Errori=Esperienza

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:DLL per salvare e richiamare file txt.
« Risposta #38 il: Gennaio 06, 2013, 04:06:46 pm »
Dllindex l'ho preso dalla documentazione di Profilab e dagli esempi:

Citazione
PUser^[0] to PUser^[99] can be used to store numeric user values. The values of these variables are saved in the ProfiLab project file, so that values are available agein, when the project is loaded next time. The variable PUser^[100] is set by ProfiLab and contains the number of the DLL component: 1 fo DLL1, 2 for DLL2, and so on.

La unit Unit1 l'ho fatta come si farebbe qualsiasi applicazione con lazarus: inserendo i componenti su un form e scrivendo il codice per gli eventi che mi occorrono :)

Simon75

  • Full Member
  • ***
  • Post: 139
  • Karma: +0/-0
Re:DLL per salvare e richiamare file txt.
« Risposta #39 il: Gennaio 06, 2013, 05:37:28 pm »
Legolas, quindi in 
Codice: [Seleziona]
procedure Configure(PUser: PDLLParams);
  hai richiamato la unit1 giusto?



Non potevi usare solo  Unit1 invece di
Codice: [Seleziona]
Unit1 in 'Unit1.pas';




A volte bisogna commettere errori per capire qual è la cosa giusta da fare...

Const
Errori=Esperienza

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:DLL per salvare e richiamare file txt.
« Risposta #40 il: Gennaio 06, 2013, 05:57:32 pm »
Legolas, quindi in 
Codice: [Seleziona]
procedure Configure(PUser: PDLLParams);
  hai richiamato la unit1 giusto?
Sì, esatto
Citazione
Non potevi usare solo  Unit1 invece di
Codice: [Seleziona]
Unit1 in 'Unit1.pas';

In questo caso sì, le due chiamate sono equivalenti. Se invece volessi aggiungere alla dll una unit presente in un'altra cartella, con "in" potrei specificare il percorso corretto. Ad esempio, se muovo unit1.pas e unit1.lfm nella cartella "units_della_dll", allora dovrei per forza scrivere:
 
Codice: delphi [Seleziona]
Unit1 in 'units_della_dll\Unit1.pas';

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:DLL per salvare e richiamare file txt.
« Risposta #41 il: Gennaio 07, 2013, 08:18:10 am »
Ciao nomore ti ringrazio molto, attualmente appena provo a mandare in esecuzione il programma(Profilab) le OpenDialog e SaveDialog si aprono da sole senza premere i pulsanti.

In effetti avevo scritto una castroneria, prova così:
Codice: [Seleziona]
Procedure CalculateEx(PInput,POutput,PUser: PDLLParams; PStrings: PStringParams); // Routine è permanente
  var s: shortstring;
  begin

    if PInput^[I0] > 2.5 then
    begin
      s := ApriOpenDialog;
      if s <> '' then
         CaricaArrayDaFile(s, POutput);
    end;

    if PInput^[I1] > 2.5 then
    begin
      s := ApriSaveDialog;
      if s <> '' then
         SalvaArrayInFile(s, POutput);
    end;

    PInput^[Read] := Read;
    POutput^[Write] := Write ;

  end;

In questo modo i dialog dovrebbero aprirsi solo a comando.
Dovrebbe funzionare sia il salvataggio che il caricamento, facci sapere.
Ciao
Imagination is more important than knowledge (A.Einstein)

Simon75

  • Full Member
  • ***
  • Post: 139
  • Karma: +0/-0
Re:DLL per salvare e richiamare file txt.
« Risposta #42 il: Gennaio 07, 2013, 10:00:38 am »
Ciao,
Adesso i dialoghi si aprono e si chiudono ( non esiste un sistema per bloccarli sulla schermata principale di profilab? perchè a volte mi scappano sul desktop).
Se inserisco un valore es. 234 nel numeri input e premo salva sulla finestra di dialogo esegue il save in maniera corretta, ma all'interno del file txt mi scrive questo: penso sia l'ARRAY :(
Invece se provo a caricare qualcosa da OpenDialog verso il display non non vedo niente.  :(
Vi saluto
0=0
1=0
2=0
3=0
4=0
5=0
6=0
7=0
8=0
9=0
10=0
11=0
12=0
13=0
14=0
15=0
16=0
17=0
18=0
19=0
20=0
21=0
22=0
23=0
24=0
25=0
26=0
27=0
28=0
29=0
30=0
31=0
32=0
33=0
34=0
35=0
36=0
37=0
38=0
39=0
40=0
41=0
42=0
43=0
44=0
45=0
46=0
47=0
48=0
49=0
50=0
51=0
52=0
53=0
54=0
55=0
56=0
57=0
58=0
59=0
60=0
61=0
62=0
63=0
64=0
65=0
66=0
67=0
68=0
69=0
70=0
71=0
72=0
73=0
74=0
75=0
76=0
77=0
78=0
79=0
80=0
81=0
82=0
83=0
84=0
85=0
86=0
87=0
88=0
89=0
90=0
91=0
92=0
93=0
94=0
95=0
96=0
97=0
98=0
99=0
100=0
A volte bisogna commettere errori per capire qual è la cosa giusta da fare...

Const
Errori=Esperienza

Simon75

  • Full Member
  • ***
  • Post: 139
  • Karma: +0/-0
Re:DLL per salvare e richiamare file txt.
« Risposta #43 il: Gennaio 07, 2013, 11:58:07 am »
Stavo pensando, poi ditemi se sbaglio che attualmente sto sviluppando un programma windows (grafico) quindi non ho la console a carattere con cui deve funzionare una read o una write.
Quindi penso che la write e read non ha proprio senso.
Come posso far riconoscere la lettura e stampa se non posso usare tali comandi?
Saluti
« Ultima modifica: Gennaio 07, 2013, 12:02:40 pm da Simon75 »
A volte bisogna commettere errori per capire qual è la cosa giusta da fare...

Const
Errori=Esperienza

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:DLL per salvare e richiamare file txt.
« Risposta #44 il: Gennaio 07, 2013, 12:06:03 pm »
Ni.
Puoi riassegnare le variabili di output e input (handle di file di testo).
In questo modo puoi "virtualizzare" che sia un'applicazione consolle piuttosto che grafica.
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18772
  • Topic in totale: 2233
  • Online Today: 256
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 150
Total: 150

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.