Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: fr33d0m - Ottobre 09, 2013, 09:05:39 pm

Titolo: [RISOLTO] Convertire una unit Delphi
Inserito da: fr33d0m - Ottobre 09, 2013, 09:05:39 pm
Ciao,
sto tentando di convertire una unit scritta in Delphi ma ho degli errori in fase di compilazione.
L'errore è nella sezione 'uses':
Codice: [Seleziona]
  USES
    Graphics,            // TColor, TCanvas
    ExtCtrls,             // TImage
Egli errori sono questi:
Codice: [Seleziona]
GraphicsPrimitivesLibrary.PAS(14,5) Fatal: Can not find Graphics used by GraphicsPrimitivesLibrary, ppu=..\..\..\lcl\units\i386-win32\graphics.ppu, package LCLBase
GraphicsPrimitivesLibrary.PAS(15,5) Fatal: Can not find ExtCtrls used by GraphicsPrimitivesLibrary, ppu=..\..\..\lcl\units\i386-win32\extctrls.ppu, package LCLBase
Inutile dire che entrambi i files (graphics.ppu e extctrls.ppu) si trovano esattamente in LazarusDir\lcl\units\i386-win32\
Titolo: Re:Convertire una unit Delphi
Inserito da: Legolas - Ottobre 09, 2013, 09:31:35 pm
Due cose, che non so se ti aiuteranno a risolvere il problema, ma fa sempre bene ricordare: metti un {$MODE DELPHI} all'inizio della unit e cancella eventuali residui di compilazione di delphi :)
Titolo: Re:Convertire una unit Delphi
Inserito da: fr33d0m - Ottobre 09, 2013, 09:46:18 pm
... metti un {$MODE DELPHI} all'inizio della unit
Quello è stato messo in automatico quando ho fatto la conversione.
La cosa strana è che durante la conversione la unit ExtCtrls non è stata riconosciuta valida e l'ho quindi commentata, mentre la Graphics è stata riconosciuta.
Ho anche provato a scrivere i nomi con tutte le lettere minuscole, come i files stessi delle unit, ma non è cambiato niente.
 ???
Titolo: Re:Convertire una unit Delphi
Inserito da: Legolas - Ottobre 09, 2013, 10:12:31 pm
Uhm... Graphics e ExtCtrls fanno parte del package LCLBase. Forse il convertitore non lo ha aggiunto automaticamente alle dipendenze del pacchetto che stai convertendo
Titolo: Re:Convertire una unit Delphi
Inserito da: fr33d0m - Ottobre 10, 2013, 12:23:03 pm
Non è un pacchetto ma una unit a sè ed è usata per creare un oggetto a runtime.
Ho provato anche a convertire il progetto di esempio che usa questa unit e si è compilato tutto perfettamente.  ::)
Peccato che poi in fase di run il debugger solleva questa eccezione:

Failed to create win32 control, error: 1407 : Impossibile trovare la classe della finestra.
In file 'win32wscontrols.pp' at line 259


e poi mestamente crasha tutto.  :(
Titolo: Re:Convertire una unit Delphi
Inserito da: Legolas - Ottobre 10, 2013, 01:59:46 pm
Se riesci a postare la unit originale con il progetto di esempio, vedo di provare a debuggare :-)
Titolo: Re:Convertire una unit Delphi
Inserito da: fr33d0m - Ottobre 10, 2013, 02:10:58 pm
Ti giro il link:
http://www.efg2.com/Lab/Graphics/Surface3D.htm (http://www.efg2.com/Lab/Graphics/Surface3D.htm)
Nella pagina c'è il link per scaricare l'esempio.

Grazie mille in anticipo.  ;D
Titolo: Re:Convertire una unit Delphi
Inserito da: Legolas - Ottobre 10, 2013, 04:06:50 pm
Trovato l'inghippo :)

Nel file Surface3D.lpr:

Codice: delphi [Seleziona]
{...cut...}
begin
  Application.Initialize;  // <-- AGGIUNGI QUESTO! 
  Application.CreateForm(TSurface, Surface);
  Application.Run;
end.
Titolo: Re:Convertire una unit Delphi
Inserito da: fr33d0m - Ottobre 10, 2013, 06:57:38 pm
 :o
Grande! Non l'avrei mai trovato...
Titolo: Re:[RISOLTO] Convertire una unit Delphi
Inserito da: Legolas - Ottobre 10, 2013, 07:33:56 pm
Figurati, ho semplicemente cercato il codice dell'errore su google  ;D
Se poi riesci anche ad eliminare il flickering quando disegna, magari faccelo sapere ;)
Titolo: Re:[RISOLTO] Convertire una unit Delphi
Inserito da: brunello - Ottobre 12, 2013, 05:16:51 pm
per il flickering imposta a false il RepaintNeeded, ciao Brunello

  DrawSurface (Surface.Image.Canvas, false)