* * * *

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 20, 2024, 03:04:57 am

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

446 Visitatori, 0 Utenti

Autore Topic: DLL con SaveDialog  (Letto 36687 volte)

Simon75

  • Full Member
  • ***
  • Post: 139
  • Karma: +0/-0
Re:DLL con SaveDialog
« Risposta #45 il: Dicembre 28, 2012, 11:45:06 pm »
Così funziona ho dovuto togliere gli else
 quindi:

Codice: [Seleziona]

Procedure Calculate(PInput,POutput,PUser: PDLLParams); // Routine è permanente


   begin

       if  PInput^[I0] >2.5 then ApriOpenDialog;

       if  PInput^[I1] >2.5 then ApriSaveDialog;

       If  PInput^[I0] >2.5 then POutput^[Q0]:=5;

        If  PInput^[I1] >2.5 then POutput^[Q1]:=5;



      // piu funzioni


end;

Ma rimane sempre il problema che a volte si bloccano i pulsanti se clicco veloce si apre e si chiude regolare, basta che lo tengo un po troppo premuto si blocca

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 con SaveDialog
« Risposta #46 il: Dicembre 29, 2012, 12:01:08 am »
Il fatto che si blocchi, può avere varie cause.
1) Il programma si impalla di suo.
2) La dll si incasina con la creazione e distruzione del dialogo.

Metti i vari dialoghi in una variabile "globale".
Controlli se la variabile è già stata istanziate
Codice: [Seleziona]
 
  if not assigned(dialogoxxx) then
  begin
    dialogoxxx := TDialog.create(...);
    ...
    FreeAndNil(dialogxxx);
  end;
In questo modo il codice apre il dialogo solo se non è già stato aperto.
Quindi la variabile del dialogo ti funge da ... "semaforo".

Stilgar
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 con SaveDialog
« Risposta #47 il: Dicembre 29, 2012, 09:58:31 pm »
Domanda n 1

Allora quando apro uno dei due dialoghi si accende il led rispettivo al diagolo chiamato, ma quando clicco su annulla o sulla x i led rimangono sempre accesi.
Domanda: come faccio a resettare il controllo ovvero l'uscita POutput^[Q0] quando clicco su annulla o sulla X dei dialoghi?
Codice: [Seleziona]
 If  PInput^[I0] >2.5 then POutput^[Q0]:=5;

Domanda n2

Ho tolto le variabili locali e le ho messe globali, praticamente solo una poiché è la stessa.
Codice: [Seleziona]

 var pannello: TOpenDialog;


type TDLLParams = array[0..100] of Extended; //Type of ProfiLab DLL parameters
     PDLLParams = ^TDLLParams;               // Pointer to ProfiLab DLL parameters





     function ApriSaveDialog: ShortString;

     begin
        pannello :=  TSaveDialog.Create(nil);
        try
           pannello.Filter:='*.txt';
           if pannello.Execute then
              result := pannello.FileName
           else
              result := '';
        finally
           pannello.Free;
        end;
        end;


function ApriOpenDialog: ShortString;

begin
   pannello :=  TOpenDialog.Create(nil);
   try
      pannello.Filter:='*.txt';
      if pannello.Execute then
         result := pannello.FileName
      else
         result := '';
   finally
      pannello.Free;
   end;
   end;
 

Ora il codice che mi hai indicato lo devo inserire in Calculate?

Codice: [Seleziona]
Procedure Calculate(PInput,POutput,PUser: PDLLParams); // Routine è permanente
   
if not assigned (ApriOpenDialog) then

   begin

ApriOpenDialog:= TDialog.create(...); qua cosa metto?       
...         qui cosa metto?
    FreeAndNil(ApriOpenDialog);

  end;


      // piu funzioni


end;                                   


Domanda n 3

Esiste un modo per evitare che la schermata del dialogo vada sotto il programma che sto usando?
Cerco di spiegarmi a volte capita che clicco fuori dalla finestra di dialogo e quindi il dialogo a sua volta finisce sul desktop quindi sotto il programma allora devo chiudere sulla - per riprenderlo e chiuderlo

Ciao
« Ultima modifica: Dicembre 30, 2012, 12:47:33 am 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 con SaveDialog
« Risposta #48 il: Dicembre 30, 2012, 11:52:31 am »
Risposta 1 :
Codice: [Seleziona]
POutput^[Q0]:=0;
If  PInput^[I0] >2.5 then POutput^[Q0]:=5;

Risposta 2:
Esattamente la stessa cosa in entrambe le funzioni. Solo che una è chiamata dal primo pulsante e l'altra dal secondo ... ma se fanno la stessa cosa, potrebbe essere il caso di avere una sola funzione... no?

Risposta 3:
Il dialogo, per essere modale ha bisogno di una finestra "padre", mettendo nil, dici che non ha padre ed è autonoma, per cui non può essere modale sull'applicazione chiamante.
Per fare in modo che abbia un "padre", devi avere un'istanza dell'applicazione chimanate (in genere è nella "main dll" che ti viene passato quel parametro, ma in freepascal non conosco la prassi per lavorare con questi parametri, in C++ della Microsoft è una cosa "abbastanza semplice")
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:DLL con SaveDialog
« Risposta #49 il: Dicembre 30, 2012, 11:55:39 am »
Per la prima risposta ... piccola cazzatina, ho messo in pulldown il dato ... tu lo lasciavi flottante, ma in informatica è l'ultima scrittura che comanda il dato in memoria. Nessuno azzera quella cella (se non all'inizio il sistema di inizializzazione automatica), per cui l'effetto è di lasciare il led acceso.
Sempre che sia riuscito ad interpretare correttamente il comportamento che ottenevi.

Stilgar
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 con SaveDialog
« Risposta #50 il: Dicembre 30, 2012, 04:54:07 pm »
Citazione

Per la prima risposta ... piccola cazzatina


Così semplice che neanche si accendono i led se metto questo: ;D ;D ;D ;D ;D
Codice: [Seleziona]

POutput^[Q0]:=0;


Stilgard dovrebbero promuoverti super moderatore, poiché sei il più attivo di tutto il forum  ;)
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 con SaveDialog
« Risposta #51 il: Dicembre 30, 2012, 07:20:13 pm »
Allega tutto il codice ad un post ... sta diventando un macello seguire con i pezzetti l'evoluzione del sorgente :(
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:DLL con SaveDialog
« Risposta #52 il: Dicembre 30, 2012, 09:09:19 pm »
Infatti :)
Per sfizio ho scaricato la demo di ProfiLab, se Simon75 mette il codice della dll posso provare a buttarci un occhio anche io

Simon75

  • Full Member
  • ***
  • Post: 139
  • Karma: +0/-0
Re:DLL con SaveDialog
« Risposta #53 il: Dicembre 31, 2012, 12:33:53 am »
Eccomi ecco il codice...                 


Codice: [Seleziona]

library dialog;

{$mode objfpc}{$H+}

uses
   Interfaces, Classes, SysUtils, Windows, FileUtil, Forms, Controls,
Graphics, Dialogs;
   { you can add units after this }




Const   Inputs = 2;  // quantita entrata
        Outputs = 2; // quantita uscita

        {INPUTS}  // nome per numero di entrata
         I0 = 0;  // valore I0 = PInput[I0] ossia PInput[0]
         I1 = 1;  // valore I1 = PInput[I1] ossia PInput[1]

      // I3 = 3;
// ... I99 = 99;

        {OUTPUTS} // nome per numero di uscita
         Q0 = 0;  // valore Q0 = POutput[Q0] ossia POutput[0]
         Q1 = 1;  // valore Q1 = POutput[Q1] ossia POutput[1]

      // Q3 = 3;
// ... Q99 = 99;

        {USER}   // nome per numero di variabile, I valori vengono memorizzati

         U0 = 0; // valore U0 = PUser[U0] ossia PUser[0]
      // U1 = 1;
      // U2 = 2;
      // U3 = 3;
// ... U99 = 99;

// I0,I1,I2,I3,Q0,Q1,Q2,Q3,U0,U1,U2,U3
// I nomi possono essere qualsiasi, sono case-insensitive





type TDLLParams = array[0..100] of Extended; //Type of ProfiLab DLL parameters
     PDLLParams = ^TDLLParams;               // Pointer to ProfiLab DLL parameters




     function ApriSaveDialog: ShortString;
     var pannello: TOpenDialog;
     begin
        pannello :=  TSaveDialog.Create(nil);
        try
           pannello.Filter:='*.txt';
           if pannello.Execute then
              result := pannello.FileName
           else
              result := '';
        finally
           pannello.Free;
        end;
        end;


function ApriOpenDialog: ShortString;
var pannello: TOpenDialog;
begin
   pannello :=  TOpenDialog.Create(nil);
   try
      pannello.Filter:='*.txt';
      if pannello.Execute then
         result := pannello.FileName
      else
         result := '';
   finally
      pannello.Free;
   end;
   end;





function NumInputs: Byte;
begin
   result := Inputs; // trasferire quantita entrata
end;



function NumOutputs: Byte;
begin
   result := Outputs; // trasferire quantita uscita
end;




function InputName(Channel: Byte): ShortString; // trasferire nome di entrata

begin
   case Channel of

    I0 : result := 'I0'; // nome di pin I0
    I1 : result := 'I1'; // nome di pin I1

   end;
end;




Function OutputName(Channel: Byte): ShortString; // trasferire nome di uscita

begin
   case Channel of
    Q0 : result := 'Q0'; // nome di pin Q0
    Q1 : result := 'Q1'; // nome di pin Q1

   end;
end;


Procedure SimStart(PInput,POutput,PUser: PDLLParams); // Routine viene eseguita solo al primo avvio

begin
  // solo per inizializzare
end;


Procedure Calculate(PInput,POutput,PUser: PDLLParams); // Routine è permanente

begin


       if  PInput^[I0] >2.5 then ApriOpenDialog;




       if  PInput^[I1] >2.5 then ApriSaveDialog;





       If  PInput^[I0] >2.5 then POutput^[Q0]:=5;





       If  PInput^[I1] >2.5 then POutput^[Q1]:=5;







end;                 // piu funzioni


Procedure SimStop(PInput,POutput,PUser: PDLLParams); // Routine viene es                                                            eguita solo in fase di chiusura

begin
   // solo in chiusura
end;


//export methods for ProfiLab
exports SimStart,
         SimStop,
         NumInputs,
         NumOutputs,
         Calculate,
         InputName,
         OutputName,
         ApriOpenDialog,
         ApriSaveDialog;
begin
end.

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 con SaveDialog
« Risposta #54 il: Dicembre 31, 2012, 12:43:01 am »
prova questo
Codice: [Seleziona]

library dialog;

{$mode objfpc}{$H+}

uses
  Interfaces,
  Classes,
  SysUtils,
  Windows,
  FileUtil,
  Forms,
  Controls,
  Graphics,
  Dialogs;

const
  Inputs = 2;  // quantita entrata
  Outputs = 2; // quantita uscita

  {INPUTS}// nome per numero di entrata
  I0 = 0;  // valore I0 = PInput[I0] ossia PInput[0]
  I1 = 1;  // valore I1 = PInput[I1] ossia PInput[1]

  // I3 = 3;
  // ... I99 = 99;

  {OUTPUTS}// nome per numero di uscita
  Q0 = 0;  // valore Q0 = POutput[Q0] ossia POutput[0]
  Q1 = 1;  // valore Q1 = POutput[Q1] ossia POutput[1]

  // Q3 = 3;
  // ... Q99 = 99;

  {USER}// nome per numero di variabile, I valori vengono memorizzati

  U0 = 0; // valore U0 = PUser[U0] ossia PUser[0]
  // U1 = 1;
  // U2 = 2;
  // U3 = 3;
  // ... U99 = 99;

  // I0,I1,I2,I3,Q0,Q1,Q2,Q3,U0,U1,U2,U3
  // I nomi possono essere qualsiasi, sono case-insensitive
var
  globalDialog: TFileDialog;

type
  TDLLParams = array[0..100] of extended; //Type of ProfiLab DLL parameters
  PDLLParams = ^TDLLParams;               // Pointer to ProfiLab DLL parameters



  function ApriSaveDialog: ShortString;
  begin
    if not assigned(globalDialog) then
    begin
      globalDialog := TSaveDialog.Create(nil);
      try
        globalDialog.Filter := '*.txt';
        if globalDialog.Execute then
          Result := globalDialog.FileName
        else
          Result := '';
      finally
        FreeAndNil(globalDialog);
      end;
    end;
  end;

  function ApriOpenDialog: ShortString;
  begin
    if not assigned(globalDialog) then
    begin
      globalDialog := TOpenDialog.Create(nil);
      try
        globalDialog.Filter := '*.txt';
        if globalDialog.Execute then
          Result := globalDialog.FileName
        else
          Result := '';
      finally
        FreeAndNil(globalDialog);
      end;
    end;
  end;

  function NumInputs: byte;
  begin
    Result := Inputs; // trasferire quantita entrata
  end;

  function NumOutputs: byte;
  begin
    Result := Outputs; // trasferire quantita uscita
  end;

  function InputName(Channel: byte): ShortString; // trasferire nome di entrata
  begin
    case Channel of
      I0: Result := 'I0'; // nome di pin I0
      I1: Result := 'I1'; // nome di pin I1
    end;
  end;

  function OutputName(Channel: byte): ShortString; // trasferire nome di uscita
  begin
    case Channel of
      Q0: Result := 'Q0'; // nome di pin Q0
      Q1: Result := 'Q1'; // nome di pin Q1
    end;
  end;


  procedure SimStart(PInput, POutput, PUser: PDLLParams); // Routine viene eseguita solo al primo avvio
  begin
    POutput^[Q0] := 0;
    POutput^[Q1] := 0;
  end;


  procedure Calculate(PInput, POutput, PUser: PDLLParams); // Routine è permanente
  begin
    if PInput^[I0] > 2.5 then
    begin
      ApriOpenDialog;
      POutput^[Q0] := 5;
    end;
    if PInput^[I1] > 2.5 then
    begin
      ApriSaveDialog;
      POutput^[Q1] := 5;
    end;
  end;

  procedure SimStop(PInput, POutput, PUser: PDLLParams); // Routine viene es                                                            eguita solo in fase di chiusura
  begin
    POutput^[Q0] := 0;
    POutput^[Q1] := 0;
  end;


  //export methods for ProfiLab
exports SimStart,
  SimStop,
  NumInputs,
  NumOutputs,
  Calculate,
  InputName,
  OutputName,
  ApriOpenDialog,
  ApriSaveDialog;
begin
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:DLL con SaveDialog
« Risposta #55 il: Dicembre 31, 2012, 12:49:24 am »
Occhio che adesso anche Legolas ti controlla il codice ;)
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 con SaveDialog
« Risposta #56 il: Dicembre 31, 2012, 01:08:13 am »
Allora è come prima, quando clicco sul bottone della opendialog si apre la finestra e il led è ancora spento quando la chiudo si accende...
Ormai state diventando Profilab dipendenti :)
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 con SaveDialog
« Risposta #57 il: Dicembre 31, 2012, 01:16:33 am »
Questo perchè non c'è nulla che leghi il bottone/led alla dialog del file.
Sono operazioni disgiunte.
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:DLL con SaveDialog
« Risposta #58 il: Dicembre 31, 2012, 01:18:27 am »
Per legare le due cose si potrebbe fare in questo modo:
Codice: [Seleziona]

library dialog;

{$mode objfpc}{$H+}

uses
  Interfaces,
  Classes,
  SysUtils,
  Windows,
  FileUtil,
  Forms,
  Controls,
  Graphics,
  Dialogs;

const
  Inputs = 2;  // quantita entrata
  Outputs = 2; // quantita uscita

  {INPUTS}// nome per numero di entrata
  I0 = 0;  // valore I0 = PInput[I0] ossia PInput[0]
  I1 = 1;  // valore I1 = PInput[I1] ossia PInput[1]

  // I3 = 3;
  // ... I99 = 99;

  {OUTPUTS}// nome per numero di uscita
  Q0 = 0;  // valore Q0 = POutput[Q0] ossia POutput[0]
  Q1 = 1;  // valore Q1 = POutput[Q1] ossia POutput[1]

  // Q3 = 3;
  // ... Q99 = 99;

  {USER}// nome per numero di variabile, I valori vengono memorizzati

  U0 = 0; // valore U0 = PUser[U0] ossia PUser[0]
  // U1 = 1;
  // U2 = 2;
  // U3 = 3;
  // ... U99 = 99;

  // I0,I1,I2,I3,Q0,Q1,Q2,Q3,U0,U1,U2,U3
  // I nomi possono essere qualsiasi, sono case-insensitive
var
  globalDialog: TFileDialog;

type
  TDLLParams = array[0..100] of extended; //Type of ProfiLab DLL parameters
  PDLLParams = ^TDLLParams;               // Pointer to ProfiLab DLL parameters



  function ApriSaveDialog: ShortString;
  begin
    result := '';
    if not assigned(globalDialog) then
    begin
      globalDialog := TSaveDialog.Create(nil);
      try
        globalDialog.Filter := '*.txt';
        if globalDialog.Execute then
          Result := globalDialog.FileName
        else
          Result := '';
      finally
        FreeAndNil(globalDialog);
      end;
    end;
  end;

  function ApriOpenDialog: ShortString;
  begin
    result := '';
    if not assigned(globalDialog) then
    begin
      globalDialog := TOpenDialog.Create(nil);
      try
        globalDialog.Filter := '*.txt';
        if globalDialog.Execute then
          Result := globalDialog.FileName
        else
          Result := '';
      finally
        FreeAndNil(globalDialog);
      end;
    end;
  end;

  function NumInputs: byte;
  begin
    Result := Inputs; // trasferire quantita entrata
  end;

  function NumOutputs: byte;
  begin
    Result := Outputs; // trasferire quantita uscita
  end;

  function InputName(Channel: byte): ShortString; // trasferire nome di entrata
  begin
    case Channel of
      I0: Result := 'I0'; // nome di pin I0
      I1: Result := 'I1'; // nome di pin I1
    end;
  end;

  function OutputName(Channel: byte): ShortString; // trasferire nome di uscita
  begin
    case Channel of
      Q0: Result := 'Q0'; // nome di pin Q0
      Q1: Result := 'Q1'; // nome di pin Q1
    end;
  end;


  procedure SimStart(PInput, POutput, PUser: PDLLParams); // Routine viene eseguita solo al primo avvio
  begin
    POutput^[Q0] := 0;
    POutput^[Q1] := 0;
  end;


  procedure Calculate(PInput, POutput, PUser: PDLLParams); // Routine è permanente
  begin
    if PInput^[I0] > 2.5 then
    begin
      if ('' <> ApriOpenDialog) then
      POutput^[Q0] := 5
    else
      POutput^[Q0] := 0;
    end;
    if PInput^[I1] > 2.5 then
    begin
      if ('' <> ApriSaveDialog) then
        POutput^[Q1] := 5
      else
        POutput^[Q1] := 0;
    end;
  end;

  procedure SimStop(PInput, POutput, PUser: PDLLParams); // Routine viene es                                                            eguita solo in fase di chiusura
  begin
    POutput^[Q0] := 0;
    POutput^[Q1] := 0;
  end;


  //export methods for ProfiLab
exports SimStart,
  SimStop,
  NumInputs,
  NumOutputs,
  Calculate,
  InputName,
  OutputName,
  ApriOpenDialog,
  ApriSaveDialog;
begin
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 con SaveDialog
« Risposta #59 il: Dicembre 31, 2012, 01:26:51 am »
Non si accendono ne quando apro e  ne quando chiudo  :)
A volte bisogna commettere errori per capire qual è la cosa giusta da fare...

Const
Errori=Esperienza

 

Recenti

How To

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

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.