* * * *

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.
Dicembre 12, 2024, 03:03:30 am

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

107 Visitatori, 0 Utenti

Autore Topic: nuova classe e creazione oetto  (Letto 1581 volte)

francesco

  • Jr. Member
  • **
  • Post: 59
  • Karma: +0/-0
nuova classe e creazione oetto
« il: Gennaio 18, 2024, 07:39:30 pm »
ho scritto questo codice per la classe

Codice: [Seleziona]

unit CLASSProgetto;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils;

var

NomeProggetto : string;
DimensioneX : integer;
DimensioneY : integer;
Stage : tpaintbox;
ColoreStage : tColor;

public;
function readnome () :string;
procedure putnome(value : string);
function readx () :integer;
procedure putx(Value:integer);
function ready () :integer;
procedure puty(Value:integer);
function readcolst () :integer;
procedure putcolst(Value:integer);


property Nomeprogetto: string read readnome write putnome;
property DimensioneX : integer read readX write putX;
property DimensioneY : integer read readY write PutY;
property ColoreStage : color read readcolst write Putcolst;

implementation
begin

 function readnome () Value: string;
 begin
 value := nomeprogetto;
 end;

procedure putnome(Value:string )
begin
   nomeprogetto = Value ;
end ;

function readx () Value; integer;
 begin
 value := dimensionex;
 end;

procedure putx(Value:integer);
begin
   dimensionex = Value ;
end ;

function ready () Value; integer;
 begin
 value := dimensioney;
 end;

procedure puty(Value:integer);
begin
   dimensioney = Value ;
end ;

function readcolst () Value; color;
 begin
 value := colorestage;
 end;

procedure puty(Value:color);
begin
   colorestage = Value ;
end ;

constructor Create (VNomeProgetto: string,VDimensioneX : integer, VDimensioneY :integer; ColoreST ; color);

begin
nomeprogetto := vnomeprogetto;
dimensionex : = vdimensionex;
dimensioney := vdimensioney;
colorestage := vcoloreST;

 stage := Tscrollbar1.create(Form1)
 stage := Tscrollbar2.create(Form1)
 //tscrollbar1.Ancors := [aktop,akleft]
 tscrollbar1.kind : sbHorizontal;
 tscrollbar2.kind : sbvertical;
 //tscrollbar1.align := altop;
 //tscrollbar2.alin :=  alleft;
 stage := TPaintBox.Create(Form1);
 stage.Top :=10;
 stage.Left :=10;
 stage.Height :=50;
 stage.Width := 100;
 stage.Parent := Form1;
 stage.Color := VcoloreST;
 stage.Canvas.Ellipse(10,10,20,20);

end;




end;


end.
                       



e creo un oggetto


Codice: [Seleziona]

unit unitoption;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ComCtrls, ExtCtrls,ClassProgetto;

type

  { TOpzioni }

  TOpzioni = class(TForm)
    ButtonSave: TButton;
    ButtonExecute: TButton;
    EditLarghezza: TEdit;
    EditAltezza: TEdit;
    PCopzioni1: TPageControl;
    Shape1: TShape;
    Shape2: TShape;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    StaticText3: TStaticText;
    TabSheet1: TTabSheet;
    TSproprieta: TTabSheet;
    procedure ButtonExecuteClick(Sender: TObject);
  private

  public

  end;

var
  Opzioni: TOpzioni;

implementation

{$R *.lfm}

{ TOpzioni }

procedure TOpzioni.ButtonExecuteClick(Sender: TObject);
var
  Ival1 : integer;
  Ival2 : integer;
  Code : integer;
  app: CLASSprogetto;

begin

vaL(editlarghezza.text,Ival1,Code);

if Code <> 0 then
begin
 ShowMessage('Error in "with" This is iferior by 1 or null : ' + editlarghezza.text + '!''' );
end;

val( editaltezza.text,Ival2,Code);

if Code <> 0 then
begin
 ShowMessage('Error in "Heigth" This is inferior by 1 or null : ' + editaltezza.text + '!''' );
end;

if ival1 < 1 then
begin
 ShowMessage('Error in "with" This is iferior by 1 or null : ' + editlarghezza.text + '!''' );

end;

if ival2 < 1 then
begin
 ShowMessage('Error in "Heigth" This is inferior by 1 or null : ' + editaltezza.text + '!''' );
 end;

app := CLASSprogetto('pippo',50,100,clred).create;
a.show;

end;
             



purtroppo non mi funziona e mi da' diversi errori, fra cui

Compila il progetto, Destinazione: PaintFreeShapes: Codice di uscita 256, Errori: 10, suggerimenti: 3
classprogetto.pas(15,9) Error: Identifier not found "tpaintbox"
classprogetto.pas(15,18) Error: Error in type definition
classprogetto.pas(16,15) Error: Identifier not found "tColor"
classprogetto.pas(16,21) Error: Error in type definition
classprogetto.pas(30,10) Error: Duplicate identifier "DimensioneX"
classprogetto.pas(30,10) Hint: Identifier already defined in classprogetto.pas at line 13
classprogetto.pas(31,10) Error: Duplicate identifier "DimensioneY"
classprogetto.pas(31,10) Hint: Identifier already defined in classprogetto.pas at line 14
classprogetto.pas(32,10) Error: Duplicate identifier "ColoreStage"
classprogetto.pas(32,10) Hint: Identifier already defined in classprogetto.pas at line 16
classprogetto.pas(32,24) Error: Identifier not found "color"
classprogetto.pas(32,45) Error: Illegal symbol for property access
classprogetto.pas(32,59) Error: Illegal symbol for property access


DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1419
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:nuova classe e creazione oetto
« Risposta #1 il: Gennaio 18, 2024, 09:40:04 pm »
....
....
e creo un oggetto

Codice: [Seleziona]
unit unitoption;
........
........
procedure TOpzioni.ButtonExecuteClick(Sender: TObject);
var
  Ival1 : integer;
  Ival2 : integer;
  Code : integer;
  app: CLASSprogetto;

begin
.......
.......
app := CLASSprogetto('pippo',50,100,clred).create;
a.show;
..........
..........

Incominciamo da unitoption, dovrebbe andare tutto bene eccetto le due linee dove appare "app: CLASSProgetto" e "app := CLASS...." e la linea con "a.show"

"a.Show" ha senso se "a" è definito. Non essendo esposto il tipo non sò dirti ...

L'uso di CLASSProgetto è errato perchè CLASSProgetto è il nome di una unità. Non può essere usato in quel modo.

In ogni caso non puoi chiamare il Create (o qualsiasi altro metodo) così:

Codice: [Seleziona]
app := CLASSprogetto('pippo',50,100,clred).create;

ma così eventualmente:

Codice: [Seleziona]
app := CLASSprogetto.Create('pippo',50,100,clred); // COMUNQUE CLASSprogetto è errato

Il "codice della classe" (il primo sorgente) è errato, non hai scritto ne definizioni valide ne classi.

Come nella unita unitoption, devi usare in modo similare lo stesso scheletro di struttura della classe.

Fai inoltre attenzione alla sintassi, alle virgole, punti e virgola, due punti, begin .....

Prova a correggere e poi se non riesci ancora a compilare riposta ciò che hai fatto.

Ciao

« Ultima modifica: Gennaio 18, 2024, 09:43:11 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

francesco

  • Jr. Member
  • **
  • Post: 59
  • Karma: +0/-0
Re:nuova classe e creazione oetto
« Risposta #2 il: Gennaio 19, 2024, 07:08:35 pm »
purtroppo non è la prima volta che mi trovo in difficolta' con le classsi in Lazarus.
ho anche altri errori che non capisco es

Codice: [Seleziona]
Stage : tpaintbox;
ColoreStage : tColor; 

non vengono riconosciute

poi mi da doppia dichiarazione nelle variabili che ho tolto ma rimane

Codice: [Seleziona]
property ColoreStage : color read readcolst write Putcolst; 


e anche
Codice: [Seleziona]
Stage : tpaintbox;
che non riconosce

e anche
Codice: [Seleziona]
property ColoreStage : color read readcolst write Putcolst;

che non accetta

poi non capisco perche una unit non puo essere una classe, cè un altro modo per dichiararle?

razie dell' aiuto
francesco

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1419
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:nuova classe e creazione oetto
« Risposta #3 il: Gennaio 19, 2024, 09:31:26 pm »
poi non capisco perche una unit non puo essere una classe, cè un altro modo per dichiararle?

Se come ti ho detto osservi l'unità "unitoption", vedrai che è definita la classe TOpzioni, quello è l'unico modo per definire una classe (ovviamente non per forza devi derivarla da TForm, anzi normalmente non và fatto con TForm).

Codice: [Seleziona]
type

  { TOpzioni }

  TOpzioni = class(TForm)
    ButtonSave: TButton;
    ButtonExecute: TButton;
    EditLarghezza: TEdit;
    EditAltezza: TEdit;
    PCopzioni1: TPageControl;
    Shape1: TShape;
    Shape2: TShape;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    StaticText3: TStaticText;
    TabSheet1: TTabSheet;
    TSproprieta: TTabSheet;
    procedure ButtonExecuteClick(Sender: TObject);
  private

  public

  end;

Purtroppo il PASCAL, come più o meno tutti i linguaggi di programmazione hanno delle sintassi che vanno rispettate.

Il Pascal ha il pregio di essere sicuramente il più "leggibile" in quanto la sintassi è abbastanza essenziale anche se molto rigorosa e stringente.

Per quello che riguarda le altre segnalazioni, devi prestare attenzione e pensarci un attimo sopra: il TColor ad esempio se lo usi deve da qualche parte essere definito. Quindi devi trovare in quale unità viene definito.

Quando si è all'inizio e non si hanno usate molte unità, ci si sente un attimo spaesati ma mettendoci un pò di energia se ne esce.

TColor essendo un elemento descrittore usato nella grafica probabilmente sarà definito nella unit "Graphics", unit che devi includere nelle USES (nella sezione interface).

TPaintBox è un componente, e c'è l'hai sulla paletta dei componenti. Se lo vuoi usare a runtime, senza averlo nella Form, dovrai sempre nelle USES (e sempre nella sezione interface) inserire l'unità "ExtCtrls" (ossia controlli extra). Attenzione però, essendo un componente non esposto a design time, dovrai curare la creazione compreso anche l'abbinamento con una superficie grafica, ed eventualmente la distruzione dell'istanza creata (che normalmente viene abbinata ad una variabile).

E questo per ogni istanza, ossia per ogni variabile che dichiari come TPaintBox che istanzi (cioè che crei).

Un suggerimento: se clicchi due volte sulla Form, viene creato il metodo Create della Form ... li scrivi TColor e premi il tasto F1 ... comparirà l'Help con tutte le indicazioni utili per poterlo usare. Poi ovviamente cancella TColor.

Puoi fare così per qualsiasi elemento che non conosci, se è inserito nell'Help di Lazarus ti verrà visualizzato aiuto.

Ciao
« Ultima modifica: Gennaio 19, 2024, 09:36:34 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

francesco

  • Jr. Member
  • **
  • Post: 59
  • Karma: +0/-0
Re:nuova classe e creazione oetto
« Risposta #4 il: Febbraio 01, 2024, 05:22:51 pm »
Ho rifatto la classe

Codice: [Seleziona]

nit CLASSProgetto;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils;

type
  progetto = class

public

NomeProggetto : string;

public constructor Create (VNomeProgetto: string;VDimensioneX : integer; VDimensioneY :integer);

function readnome () :string;
procedure putnome(value : string);
function readx () :integer;
procedure putx(Value:integer);
function ready () :integer;
procedure puty(Value:integer);
function readTOP () :integer;
procedure putTOP(Value:integer);
function readleft () :integer;
procedure putleft(Value:integer);

property Nomeprogetto: string read readnome write putnome;
property DimensioneX : integer read readX write putX;
property DimensioneY : integer read readY write PutY;
property DIMtop : integer read readTOP write PutTOP;
property DIMleft : integer read readleft write Putleft;

end;

implementation

function progetto.readleft () :integer;
 begin
 readleft := dimleft;
 end;

procedure progetto.putleft(Value:integer);
begin
   dimleft := Value ;
end ;

 function progetto.readTOP () : integer;
 begin
 readtop := dimtop;
 end;

procedure progetto.putTOP(Value:integer);
begin
   dimTOP := Value ;
end ;

 function progetto.readnome () : string;
 begin
 readnome := nomeprogetto;
 end;

procedure progetto.putnome(Value:string ) ;
begin
   nomeprogetto := Value ;
end ;

function progetto.readx () : integer;
 begin
 readx := dimensionex;
 end;

procedure progetto.putx(Value:integer);
begin
   dimensionex := Value ;
end ;

function progetto.ready () : integer;
 begin
 ready := dimensioney;
 end;

procedure progetto.puty(Value:integer);
begin
   dimensioney := Value ;
end ;

end.
             


ma mi da' errore in costructor:

Compila il progetto, Destinazione: PaintFreeShapes: Codice di uscita 256, Errori: 1
classprogetto.pas(17,20) Error: Forward declaration not solved "constructor Create(AnsiString;LongInt;LongInt);"

e non mi riesce a mettere color come proprieta'

Codice: [Seleziona]

function readcolst () :color;
procedure putcolst(Value:color);

property DIMlcol : color read readcol write Putcol;   

function progetto.readcol () : color;
 begin
 ready := dimcol;
 end;

procedure progetto.putcol(Value:color);
begin
   dimcol := Value ;
end ;   




DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1419
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:nuova classe e creazione oetto
« Risposta #5 il: Febbraio 01, 2024, 07:18:53 pm »
Codice: [Seleziona]
public  constructor Create (VNomeProgetto: string;VDimensioneX : integer; VDimensioneY :integer);

implementation

//DEVI AGGIUNGERE L'IMPLEMENTAZIONE DI CREATE ... l'hai definito e devi implementarlo ...
constructor Progetto.Create (VNomeProgetto: string;VDimensioneX : integer; VDimensioneY :integer);
begin
  inherited Create;
  .......
  fai qualcosa .....
  .......
end;

end.
             


ma mi da' errore in costructor:

Compila il progetto, Destinazione: PaintFreeShapes: Codice di uscita 256, Errori: 1
classprogetto.pas(17,20) Error: Forward declaration not solved "constructor Create(AnsiString;LongInt;LongInt);"

Vedi il commento nel codice sopra ....

e non mi riesce a mettere color come proprieta'

Non devi usare "color" bensi "TColor" .... TColor è il nome del tipo. Nel mio precedente POST te l'avevo spiegato ....
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

 

Recenti

How To

Utenti
  • Utenti in totale: 802
  • Latest: maXim.FI
Stats
  • Post in totale: 19252
  • Topic in totale: 2297
  • Online Today: 118
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 107
Total: 107

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.