* * * *

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.
Novembre 25, 2024, 11:02:01 pm

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

53 Visitatori, 0 Utenti

Autore Topic: problema traduzione da Visual Basic a Lazarus  (Letto 5216 volte)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2921
  • Karma: +20/-4
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #15 il: Aprile 25, 2021, 02:39:43 am »
alexarmato66, quando posti del codice usa i blocchi "code", quelli col cancelletto

grazie ;)
Imagination is more important than knowledge (A.Einstein)

alexarmato66

  • Full Member
  • ***
  • Post: 147
  • Karma: +1/-0
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #16 il: Aprile 25, 2021, 08:12:46 am »
qui avevo visto che sono permesse le stringhe.Mi sbaglio?
https://wiki.freepascal.org/Case#structure

The data type of selector has to be an ordinal type. FreePascal additionally allows strings.

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1405
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #17 il: Aprile 25, 2021, 11:46:34 am »
qui avevo visto che sono permesse le stringhe.Mi sbaglio?
https://wiki.freepascal.org/Case#structure

The data type of selector has to be an ordinal type. FreePascal additionally allows strings.

Confermo quandto dici, e non ne ero a conoscenza. Funziona solo con {$MODE ObjFPC)

Pur però potendolo fare, io sconsiglio vivamente ciò. Questo per varie motivazioni: intanto la codifca dei caratteri, la compatibilità, l'ottimizzazione, etc ...
Non sò il compilatore come si comporti visto che in termini generici questo dovrebbe essere risolto a livello di compilazione. Immagino usino l'HASH delle stringhe.

In genere usate i tipi, anche nei database. E se proprio non potete, alla lettura del database traformate la stringa letta in un "tipo" e usate questo tipo nel programma.

Non ve ne pentirete.

Saluti

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

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #18 il: Aprile 26, 2021, 09:03:54 pm »
Ciao
Solo qualche piccolo accorgimento nel codice.
Codice: [Seleziona]
type
  TNumeroValoriMassimo = 0..100; //<-- Dichiari solo una volta l'insieme, se hai bisogno di ridimensionare l'insieme, tocchi qui e ricompili.

type
  // Struttura dati che contiene i valore dei momenti di rottura della sezione  //
  // -------------------------------------------------------------------------- //
  TMomentiRottura = record
    mrx: double;                        // Momento di rottura con asse momento x
    mry: double;                        // Momento di rottura con asse momento y
    ang: double;                        // Rotazione dell//asse neutro rispetto all//asse x, antioraria positiva
    polix: array of poligono_sezione;   // Poligono che definisce la porzione di cls compressa della sezione
    sigmaSo: array of double;          // ' Array contenente le tensioni nelle barre di armatura a rottura
    sigmaPp: array of double;          // ' Array contenente le tensioni nei trefoli a rottura
    def_rottura: deform_sezione;        // configutrazione deformativa a rottura
    etacMax: double;                   // distanza tra l//asse neutro e la fibra maggiormente compressa a rottura
    etasMin: double;                   // distanza tra l//asse neutro e la fibra maggiormente tesa a rottura
    curvRottura: double;               // curvatura della sezione a rottura
  end;
  // Struttura dati in cui sono definiti i dati dei singoli poligoni che com-   //
  // pongono la sezione                                                         //
  // -------------------------------------------------------------------------- //
  TPoligonoSezione = record
    x: array[TNumeroValoriMassimo] of double;          // coordinata x del vertice
    y: array[TNumeroValoriMassimo] of double;          // coordinata y del vertice
    numv: integer;                      // numero di vertici del poligono
    fck: double;                        //' fck
    fd: double;                        // Resistenza massima di calcolo (per verifiche SLU)
    omog: double;                      // coefficiente di omogeneizzazione (per verifiche SLE)
    traz: boolean;                     // 0=non reagente a trazione; 1=reagente a trazione
    epsc0: double;                      // Deformazione in corrispondenza della fine della parte parabola/lineare del dominio
    epscu: double;                      // Deformazione ultima del dominio
    sigma: array[TNumeroValoriMassimo] of double;
  end;
 

Personalmente eviterei di utilizzare le stringhe nel case. Utilizzerei degli indici.
Utilizzando una combo box puoi ottenere l'indice dell'opzione selezionata attraverso
Codice: [Seleziona]
index
.  Restituisce -1 Se non è selezionato nulla.

Codice: [Seleziona]

procedure TForm1.calcoloGeometria1;
var
  tipo1: integer;
begin
  // -------------------------------------------------------------------------- //
  //'carica geometria 1  *********************************************************
  tipo1 := Form1.CB1.Index;// <-- Il cb mi fa supporre sia una combo box
  case (tipo1) of
    indiceTrave:
    begin
      tipogetto[1] := Trave;
      nv[1] := StrToInt(Form1.EVertici1.Text);
      for k := 1 to nv[1] do
      begin
        X1[k] := StrToFloat(Form1.StringGrid1.Cells[1, k]);
        Y1[k] := StrToFloat(Form1.StringGrid1.Cells[2, k]);
      end;
      fck := StrToInt(Form1.CBcls1.Text);
    end;
    indiceGetto2aFase:
    begin
      tipogetto[1] := Getto;
      nv[1] := StrToInt(Form1.EVertici1.Text);
      for k := 1 to nv[1] do
      begin
        X1[k] := StrToFloat(Form1.StringGrid1.Cells[1, k]);
        Y1[k] := StrToFloat(Form1.StringGrid1.Cells[2, k]);
      end;


      fck := StrToInt(Form1.CBcls1.Text);


    end;


    indiceForo:
    begin
      tipogetto[1] := Foro;
      nv[1] := StrToInt(Form1.EVertici1.Text);


      for k := 1 to nv[1] do
      begin
        X1[k] := StrToFloat(Form1.StringGrid1.Cells[1, k]);
        Y1[k] := StrToFloat(Form1.StringGrid1.Cells[2, k]);
      end;
      fck := StrToInt(Form1.CBcls1.Text);
    end;


  end;


end;
//******************************************************************************
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

doc

  • Jr. Member
  • **
  • Post: 96
  • Karma: +2/-0
  • "L'Ingegnere sa quello che fa e fa quello che sa".
    • Spagnotto Ing. Mirko
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #19 il: Aprile 27, 2021, 10:07:58 am »
@alexarmato66

Ciao, ma quindi esaminando la riga
Codice: [Seleziona]
type
  TNumeroValoriMassimo = 0..100; //<-- Dichiari solo una volta l'insieme, se hai bisogno di ridimensionare l'insieme, tocchi qui e ricompili
il tuo programma è limitato a 101 campi..... :(
Non ti conviene usare oggetti/elementi dinamici (io, personalmente, uso solo array dinamici per le matrici usate nei calcoli) in modo da non avere questa limitazione? Anche perchè leggo "...se hai bisogno di ridimensionare l'insieme, tocchi qui e ricompili." il che ti costringe a nuove compilazioni ogni volta che devi ridimensionare questo insieme.
Era solo un suggerimento, per il resto ottimo lavoro.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #20 il: Aprile 30, 2021, 10:18:49 am »
hihihihiNovel aveva un'array per il numero degli utenti gestiti dal server di rete :)
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

alexarmato66

  • Full Member
  • ***
  • Post: 147
  • Karma: +1/-0
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #21 il: Maggio 06, 2021, 01:50:59 pm »
Grazie a tutti.Sto cercando di utilizzare solo array dinamiche.Avevo però
un dubbio sulla traduzione da VB del seguente frammento( avete un suggerimento?):

ReDim dominio_slu.mrx(1 To NMaxDom)   

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1405
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #22 il: Maggio 06, 2021, 10:37:18 pm »
In modo simile a quanto già suggerito:

Codice: [Seleziona]
Type 
  TDominio_slu = record
      mrx: array of ???????????       <---- definire il tipo
  end;

//Nel codice
var dominio_slu: TDominio_slu;

SetLength(dominio_slu.mrx, NMaxDom+1);     //L'array parte de 0 non da 1
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

alexarmato66

  • Full Member
  • ***
  • Post: 147
  • Karma: +1/-0
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #23 il: Maggio 07, 2021, 02:33:10 pm »
grazie.
E' possibile in Lazarus fare un wrapper?:

Function Punto_Interno_poligonoB(xP : Double; yP : Double; X:array of Double; Y:array of Double; nv : Integer) : Byte  ;
begin
    Inside (X, Y, nv, xP, yP, Punto_Interno_poligonoB );
End ;   

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1405
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #24 il: Maggio 07, 2021, 09:28:51 pm »
Per wrapper si intende una "transcodifca" normalmente con metodi che consenta di chiamare funzioni o altro costruiti con altri linguaggi.

Un esempio di wrapper sono le Api di Windows, codificate in Pascal.

grazie.
E' possibile in Lazarus fare un wrapper?:

Function Punto_Interno_poligonoB(xP : Double; yP : Double; X:array of Double; Y:array of Double; nv : Integer) : Byte  ;
begin
    Inside (X, Y, nv, xP, yP, Punto_Interno_poligonoB );
End ;   

Non ho compreso cosa richiedi.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

alexarmato66

  • Full Member
  • ***
  • Post: 147
  • Karma: +1/-0
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #25 il: Maggio 09, 2021, 02:50:38 pm »
esiste  STEP in Lazarus?:
esempio
    For Y = yn + dX / 2# To ymaxpe Step dX   

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1405
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #26 il: Maggio 09, 2021, 03:13:50 pm »
esiste  STEP in Lazarus?:
esempio
    For Y = yn + dX / 2# To ymaxpe Step dX   

No, non esiste. L'incremento della variabile di controllo è sempre di 1.
Si può ovviare con la funzione while o la funzione repeat.

Codice: [Seleziona]
Y := yn + dx /2;
while (Y <= ymaxpe) do
  begin
     //Inserisci qui il tuo codice

     //alla fine incrementa la variabile di controllo
     Y := Y + dx;
  end;
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #27 il: Maggio 10, 2021, 02:06:13 am »
Alex.
Cosa intendi di preciso per wrapper? Io ho un'idea, magari non vorrei capire male quello che chiedi.


In Freepascal hai la possibilità di mettere dei metodi nei record.
Devi attivare i record "cazzuti" con alcune direttive del compilatore.


Forse non ti serve un wrapper.
Codice: [Seleziona]

{$ModeSwitch advancedrecords}
{$ModeSwitch typehelpers}     
type
  TPunto = record
  x, Y : Double;
  end;


  TPoligono = record
     punti : array of TPunto;
     class operator Initialize(var aRec: TPoligono );  //<- "costruttore" del record
     class operator Finalize(var aRec: TPoligono );   //<- "distruttore" del record
     procedure aggiungiPunto(const punto : TPunto);
     function isPuntoIncluso(const pt : TPunto) : boolean;
  end;
 
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

alexarmato66

  • Full Member
  • ***
  • Post: 147
  • Karma: +1/-0
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #28 il: Maggio 10, 2021, 02:07:28 pm »
ByRef lo traduco con VAR ma ByVal?:


Public Sub Calcolo_precompressione(ByVal N_ As Double, ByVal Mx_ As Double, ByVal My_ As Double, _
                                    nd As Double, Mx As Double, My As Double)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:problema traduzione da Visual Basic a Lazarus
« Risposta #29 il: Maggio 10, 2021, 03:17:15 pm »

Se fa la copia dei valori nello stack così.
Codice: [Seleziona]
procedure Calcolo_precompressione(N_ As :Double; Mx_ As:Double; My_ : Double, _nd : Double; Mx : Double, My : Double);



se passa un "riferimento" senza copiare nello stack i valori, ma depositando i puntatori alle variabili:


Codice: [Seleziona]
procedure Calcolo_precompressione(var N_ As :Double; var Mx_ As:Double; var My_ : Double; var _nd : Double; Mx : Double, My : Double);






Stilgar

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

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19198
  • Topic in totale: 2289
  • Online Today: 68
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 53
Total: 53

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.