+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 9 su 9

Conversione di tipi

  1. #1
    Ciao a tutti,
    vi pongo una domanda per la quale risposta, per molti sarà banale

    Ho questa variabile che è un arrai di Char:
    Var
    data : array[0..64] of Char;

    Begin
    Edit1.Text := data;
    end;

    Quando questo codice va in esecuzione,sull'Edit1 leggo il contenuto della variabile data.

    Se pero' tento di fare il passaggio inverso Data := Edit1.Text ; Delphi mi dice che c'è un 'incompatibilita di dati tra TCaption ed array di Pcar.....

    Domanda : Se voglio passare una serie di caratteri che ho scritto in Edit1 alla variabile Data
    come devo fare?
    Grazie a tutti

  2. #2
    L'avatar di bumm
    bumm non è in linea Topo di biblioteca Ultimo blog: [VB2010] ComboBox ed Enumeratori
    dovresti prima convertire array in stringa

       var
         i: Integer;
         s: string;
    ...
    ...
    ...
    begin
    ...
    ...
    SetLength(s,64);
         for i := 0 to 64 do
            begin
              s[i]:=arr[i];
            end;
    Edit1.Text := s
    ...
    end;
    
    ℹ️ Leggi di più su bumm ...

  3. #3
    gpcaretti non è in linea Novello
    Quote Originariamente inviato da semiconductor Visualizza il messaggio
    Ciao a tutti,
    Var
    data : array[0..64] of Char;

    Begin
    Edit1.Text := data;
    Data := Edit1.Text ; // non funzia
    end;
    Semplice e più corretto:

    Edit1.Text := StrPas(data);
    data := StrPCopy(Edit1.Text);

    ciao,
    Gp

  4. #4
    Grazie infinite ad entrambi :-)
    Utilizzando questo spezzone il problema resta invariato ....

    Data := StrPCopy(Edit1.Text); // ERROR : Incompatible types : 'Tcaption and PChar'

    mentre utilizzando il codice di bumm,l' errore è questo :

    s[i]:=arr[i]; // ERROR undeclared identifier arr Ho quindi dichiarato la variabile mancante : arr : array of Char;
    end;
    Edit1.Text := s // ERROR incompatible types 'TEdit and String' ....


    Se pero' avesse funzionato, non i sarebbe stato utile....
    io devo fare l' inverso , Inserisco dei dati in EDIT1 e devo passare il contenuto di EDIT1 alla variabile DATA

    Grazie :-)
    Ultima modifica di semiconductor; 13-11-2008 12:27 

  5. #5
    L'avatar di bumm
    bumm non è in linea Topo di biblioteca Ultimo blog: [VB2010] ComboBox ed Enumeratori
    s[i]:=arr[i]; // ERROR undeclared identifier arr Ho quindi dichiarato la variabile mancante : arr : array of Char;
    devi sostituire "arr" con "data"

    cioe: s[i]:=data[i];

    Edit1.Text := s // ERROR incompatible types 'TEdit and String' ....
    sicuramente hai scritto
    Edit1 := s // ERROR incompatible types 'TEdit and String'
    
    per avere l'errore del genere. Edit1 e del tipo TEdit, invece Edit1.text e del tipo TCaption
    ℹ️ Leggi di più su bumm ...

  6. #6
    Scusami hai ragione....
    pero' avevo poi sostituitola variabile data chiamandola arr.

    Il codice è questo e non da errori :

    procedure TForm1.Button1Click(Sender: TObject);
    var
    i: Integer;
    s: string;
    arr : Array [0..64] of char ;
    begin
    SetLength(s,64);
    for i := 0 to 64 do
    begin
    s[i]:=arr[i];
    end;
    Edit1.Text := s ;
    end;

    end.

    Ma se voglio passare il contenuto di EDIT1.Text in arr come devo fare??
    arr := Edit1.text; // ERRORE !!

    Gpcaretti era andato abbastanza vicino :-)

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    StrPCopy(arr,Edit1.Text) ;
    end;
    end.
    Questo codice funziona :-)
    Grazie a tutti.
    Ultima modifica di semiconductor; 13-11-2008 15:30 

  7. #7
    gpcaretti non è in linea Novello
    Quote Originariamente inviato da semiconductor Visualizza il messaggio
    begin
    SetLength(s,64);
    for i := 0 to 64 do begin
    s[i]:=arr[i];
    end;
    Edit1.Text := s ;
    end;
    Questo però è lento.


    Ma se voglio passare il contenuto di EDIT1.Text in arr come devo fare??
    arr := Edit1.text; // ERRORE !!

    Quote Originariamente inviato da semiconductor Visualizza il messaggio
    Gpcaretti era andato abbastanza vicino :-)

    StrPCopy(arr,Edit1.Text) ;
    In effetti non l'avevo provato. Avevo scritto al volo :-)
    Basta usare questo:

    Var
    arr: array[0..64] of Char;
    ...
    // copia in arril contenuto della edit
    StrPCopy(arr, Edit.Text);
    // copia in edit il contenuto di data
    Edit1.Text := StrPas(arr);

    Ciao,
    Gp

  8. #8
    Ciao Gp,

    Funziona anche cosi' : Edit1.Text := Arr ; // Passaggio diretto senza conversione
    E' solo al contrario che va convertito ...Booh..
    :-)

  9. #9
    gpcaretti non è in linea Novello
    Quote Originariamente inviato da semiconductor Visualizza il messaggio
    Funziona anche cosi' : Edit1.Text := Arr ; // Passaggio diretto senza conversione
    E' solo al contrario che va convertito ...Booh
    In pascal la stringa è un array di char (max 255). quindi, quanto il compilatore trova una cosa del genere:
    var
    s: String;
    ...
    Edit1.Text := s;

    lo interpreta come:

    copia l'array di s nell'array di Edit1.Text.

    Roba vecchia da DOS. Infattil char di delphi è di un solo byte con tutti i problemi per l'internazionalizzazione, UTF-8, etc.
    Gp

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. MSSQL Problema conversione tipi
    Da CC88 nel forum Microsoft SQL Server
    Risposte: 11
    Ultimo Post: 03-09-2020, 10:30
  2. differenza tra tipi REFERENCE e VALUE
    Da zirobyte75 nel forum Visual Basic .Net
    Risposte: 2
    Ultimo Post: 13-03-2012, 11:44
  3. Tipi di Handle
    Da Dami89 nel forum Visual Basic .Net
    Risposte: 5
    Ultimo Post: 13-02-2009, 21:06
  4. errore tipi di dati
    Da francof nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 04-11-2006, 17:44
  5. tipi e query
    Da bizio nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 09-10-2004, 15:02