* * * *

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.
Maggio 05, 2024, 10:17:48 pm

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

504 Visitatori, 0 Utenti

Autore Topic: Un saluto a tutti  (Letto 6806 volte)

gaudenzi

  • Newbie
  • *
  • Post: 14
  • Karma: +0/-0
Un saluto a tutti
« il: Marzo 14, 2012, 07:58:04 pm »
Innanzitutto saluti a tutti.

Ho appena iniziato ad usare Lazarus dopo essere passato per TurboPascal (molti anni fa) e Delphi 5,6 (sempre molti anni fa ma un pò di meno). Lazarus mi permette di passare da Linux a Windows senza problemi. Mi interesso solo di programmi di approssimazione numerica per problemi di carattere matematico. Normalmente i miei programmi consistono solo di procedure e funzioni con dati finali stampati su console.
La parte grafica è quasi sempre assente anche se il poter visualizzare alcune serie di dati in un grafico mi farebbe comodo. Delphi (al contrario di TurboPascal) e così mi pare pure Lazarus ha reso però la trattazione di grafici semplici molto noiosa e così se qualcuno mi desse una mano a creare una interfaccia grafica semplice, da inserire a fianco della finestra console, e nella quale inserire grafici plottando semplicemente le coordinate x e y delle serie di dati generati dal programma gliene sarei molto grato.

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Un saluto a tutti
« Risposta #1 il: Marzo 14, 2012, 11:24:17 pm »
Ciao e benvenuto, guarda per quanto riguarda i grafici non ne ho mai fatto uno. Aspettiamo se qualcun'altro del forum ti può aiutare.

Ciao e buon lavoro con lazarus
Ieri è passato, domani è futuro, oggi è un dono...

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:Un saluto a tutti
« Risposta #2 il: Marzo 15, 2012, 09:12:27 am »
benvenuto,
di grafica non sono esperto neanche io ma se ci spieghi un po' magari iniziamo a farci un'idea e qualcosa può venir fuori.

per grafici sempilci, cosa intendi, si tratta di rappresentare funzioni tipo: y = f(x) ?
Imagination is more important than knowledge (A.Einstein)

gaudenzi

  • Newbie
  • *
  • Post: 14
  • Karma: +0/-0
Re:Un saluto a tutti
« Risposta #3 il: Marzo 15, 2012, 09:49:37 am »
Grazie per le risposte. Si tratta proprio di disegnare un grafico del tipo y=f(x) in una finestra grafica.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:Un saluto a tutti
« Risposta #4 il: Marzo 15, 2012, 10:37:37 am »
altra domanda sui valori:
- il range di x? (es: -1 <= x <= 1)
- il range di y? (es: -1 <= y <= 1)

che OS usi, win o linux?
te lo chiedo perché con delphi so come usare i messaggi di windows per comunicare tra applicazioni, però con lazarus ancora non ho mai provato...
l'applicazione per il grafico potrebbe accettare messaggi dai tuoi programmi a linea comando tipo:
1) apri l'applicazione per la visualizzazione dei grafici
2) il tuo programma calcola in loop diversi valori y = f(x) e, per ogni coppia di valori, nel caso l'applicazione-grafico sia aperta, manda un messaggio al grafico

il disegno sarebbe in realtime durante i calcoli, mica male no?
« Ultima modifica: Marzo 15, 2012, 10:39:23 am da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

gaudenzi

  • Newbie
  • *
  • Post: 14
  • Karma: +0/-0
Re:Un saluto a tutti
« Risposta #5 il: Marzo 15, 2012, 10:43:05 am »
Il range varia in base al programma scritto, uso sia windows che linux. Va benissimo anche solo
per windows.

Comunque cerco di spiegarmi meglio. Ho trovato un esempio che è vicino alle mie necessità. Si lavora su console e crea una finestra grafica TBarChart dove vengono visualizzati grafici a barre. A me però non servono grafici a barre ma a dispersione del tipo (x,y), cioè devo disegnare i punti
di coordinate (x(i),y(i)) e le rette che li congiungono. Non so come modificare la finestra grafica. Ecco l'esempio

unit frmmain;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, chart;

type
  vettore=array[0..100] of extended;

type
  TForm1 = class(TForm)
    BarChart1: TBarChart;
    procedure Form1Show(Sender: TObject);

  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.Form1Show(Sender: TObject);
var
i:integer;
x,y :vettore;
begin
  BarChart1.AddBar('1999',200,clGreen);
  BarChart1.AddBar('2000',100,clred);
  BarChart1.AddBar('2001',300,clred);
  BarChart1.AddBar('2003',400,clGreen);
  for i:=0 to 10 do begin
      x:=0.1*i;
      y:=sin(x);
      writeln('x=',x:5:6,'   y=',y:5:6);
      end;
end;

initialization
  {$I frmmain.lrs}

end. 

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:Un saluto a tutti
« Risposta #6 il: Marzo 15, 2012, 11:08:09 am »
vediamo se ho capito...

apri un progetto nuovo, metti un TButton ed un TImage
metti come codice dell'OnClick del bottone:

Codice: [Seleziona]
procedure TForm1.Button1Click(Sender: TObject);
const ASSEX = 200;
      ASSEY = 100;

      function ConvertX(Value: integer): integer;
      begin
          result := ASSEX + Value;
      end;

      function ConvertY(Value: integer): integer;
      begin
          result := ASSEY + Value;
      end;

begin
   Image1.Width:= 400;
   Image1.Height:= 200;
   Image1.Canvas.FillRect(0, 0, Image1.Width, Image1.Height);
   Image1.Canvas.Line(ASSEX, 0, ASSEX, Image1.Width);
   Image1.Canvas.Line(0, ASSEY, Image1.Width, ASSEY);

   Image1.Canvas.MoveTo(ConvertX(-10), ConvertY(-10));
   Image1.Canvas.LineTo(ConvertX(-30), ConvertY(40));
   Image1.Canvas.LineTo(ConvertX(90), ConvertY(40));
   Image1.Canvas.LineTo(ConvertX(130), ConvertY(-80));

end;

in ConvertX e ConvertY ci va il codice per proporzionare i risultati delle funzioni ai pixel.
ovviamente è solo uno spunto per la partenza, può andare?
« Ultima modifica: Marzo 15, 2012, 11:09:54 am da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

gaudenzi

  • Newbie
  • *
  • Post: 14
  • Karma: +0/-0
Re:Un saluto a tutti
« Risposta #7 il: Marzo 15, 2012, 11:36:23 am »
Grazie mille nomorelogic,
dovrebbe essere la soluzione giusta, però sono molto inesperto con l'uso delle form e quindi devo lavorarci un pò per riuscire a far partire il programma. Mi sembra comunque un ottimo punto di partenza.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:Un saluto a tutti
« Risposta #8 il: Marzo 15, 2012, 03:02:15 pm »
di solito l'appetito vien mangiando ;)
Imagination is more important than knowledge (A.Einstein)

gaudenzi

  • Newbie
  • *
  • Post: 14
  • Karma: +0/-0
Re:Un saluto a tutti
« Risposta #9 il: Marzo 16, 2012, 05:52:35 pm »
Tutto ok con i grafici, ora la Unit funziona come volevo. La base di lavoro inviatami da nomorelogic era ottima. Ora per completare mi manca ancora un passo che per me non è immediato.
Devo creare un programma dove inserire tutte le mie procedure già scritte. I risultati del programma, che sono solo numeri, vengono stampati su video e salvati su un file di dati. Poi allego al programma la unit grafica già scritta, il programma invia alla unit una serie di dati numerici e la unit mi mostra i grafici che mi servono.

Problemi:
1) come programma scelgo Console Application? Per i miei scopi che prevedono la massima velocità di esecuzione (alcuni programmi numerici richiedono molte ore di calcolo) meglio strutture della massima semplicità;
2) come faccio ad agganciare al programma una unit? Ho provato semplicemente ad aprirla ma poi
parte la Unit e non il programma;
3) come faccio ad inviare alla unit come input alcuni dati numerici e delle array di dati generati dal programma console? Basta inserire delle memorie globali nella Console Application e poi utilizzare queste nella Unit?
Grazie ancora per l'aiuto.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:Un saluto a tutti
« Risposta #10 il: Marzo 16, 2012, 08:14:33 pm »
Tutto ok con i grafici, ora la Unit funziona come volevo. La base di lavoro inviatami da nomorelogic era ottima. Ora per completare mi manca ancora un passo che per me non è immediato.
Devo creare un programma dove inserire tutte le mie procedure già scritte. I risultati del programma, che sono solo numeri, vengono stampati su video e salvati su un file di dati. Poi allego al programma la unit grafica già scritta, il programma invia alla unit una serie di dati numerici e la unit mi mostra i grafici che mi servono.

Problemi:
1) come programma scelgo Console Application? Per i miei scopi che prevedono la massima velocità di esecuzione (alcuni programmi numerici richiedono molte ore di calcolo) meglio strutture della massima semplicità;
2) come faccio ad agganciare al programma una unit? Ho provato semplicemente ad aprirla ma poi
parte la Unit e non il programma;
3) come faccio ad inviare alla unit come input alcuni dati numerici e delle array di dati generati dal programma console? Basta inserire delle memorie globali nella Console Application e poi utilizzare queste nella Unit?
Grazie ancora per l'aiuto.


1) Console Application:
nonostante io non abbia molta esperienza in questo campo non credo che cambi molto in termini di tempi di esecuzione: una volta nel loop di calcolo è il calcolo stesso (e come è stato implementato) che può pesare sui tempi.
Lasciare il tutto in una applicazione grafica ti semplifica la vita nel passaggio dei parametri per il disegn odei grafici. Valuta bene.
Ti consiglio di incapsulare il calcolo in una classe in modo da poterla utilizzare sia in una applicazione console che grafica. A questo punto puoi avere i tempi nelle due modalità e decidere se ne vale veramente la pena.

2) guardati la clausola "uses"

3) Se salvi il risultato su disco, l'applicazione plotter, potrebbe ricaricare il tutto da li: così puoi rifare i grafici anche di calcoli fatti in passato.
Imagination is more important than knowledge (A.Einstein)

gaudenzi

  • Newbie
  • *
  • Post: 14
  • Karma: +0/-0
Re:Un saluto a tutti
« Risposta #11 il: Marzo 20, 2012, 10:07:08 pm »
Ok. Ora ci siamo. Ho usato come consigliato una sola unit. Ho inserito oltre che vari bottoni un TpageControl con vari TabSheets. Alcuni sono usati con memo per visualizzare i risultati numerici, in altri ho inserito una TImage dove disegnare i grafici. I dati grafici sono contenuti in array globali e ora il programma si comporta come volevo. Indubbiamente la struttura era molto semplice, il problema è trovare i comandi giusti. Grazie ancora a nomorelogic per l'aiuto.

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18800
  • Topic in totale: 2239
  • Online Today: 524
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 504
Total: 504

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.