Newsgroup: it.comp.lang.pascal
Titolo: Aiuto grafica

In realta il mio problema è generalizzabile a tutte le librerie, non solo
quella grafica.
Quando creo il file .exe del mio programma che, ad esempio fa uso della
libreria Graph, se provo ad eseguirlo su un altro computer che non ha il
Pascal o che semplicemente non ha la libreria Graph nella stessa mia
directory, NON ME LO ESEGUE perché non la trova.
Come faccio per rendere il mio programma eseguibile dappertutto?
Ciao e Grazie.
Alberto.

 wrote in message
ol9F4.50874$pn3.6...@news.infostrada.it...

abbi pazienza entro qualche giorno ti mando un esempio (se riesco a
ritrovarlo, perchè è una cosa che ho fatto diverso tempo fa)
ciao
frolix8

trovato !
ti mando questi 3 file che spiegano il tutto.
in poche parole devi crearti delle units che contengono i drivers ,
aggiungerle sulla uses con le altre (crt,dos,etc.) e usare l'istruzione
registerbgidriver così come è spiegato nell'esempio.
per crearti le units (bgifont e bgidriv nell'esempio) devi prima crearti i
vari obj con il programma binobj.exe che mi pare stia nella directory bin
del tp7
"binobj.exe egavga.bgi"  ti crea egavga.obj eccetera eccetera.
spero di essere stato chiaro e di non aver detto qualche puttanata perchè,
come ho già detto, mi sono occupato di questo problema almeno un anno fa.
comunque è tutto spiegato negli esempi.
ciao
frolix8
siccome non vedo la mia precedente risposta con gli allegati all'interno del
newsgroup, ti mando i 3 file dell'esempio all'interno della risposta
----------------------------------------------------------------------------
--------------------------------------
{************************************************}
{                                                }
{   BGI Demo Program                             }
{   Copyright (c) 1992 by Borland International  }
{                                                }
{************************************************}
program BgiLink;
{ This program demonstrates how to link graphics driver and font files
  into an EXE file. BGI graphic's drivers and fonts are kept in
  separate disk files so they may be dynamically loaded at runtime.
  However, sometimes it is preferable to place all auxiliary files
  directly into an .EXE. This program, along with its make file
  (BGILINK.MAK) and two units (BGIDRIV.PAS and BGIFONT.PAS) links all
  the drivers and fonts directly into BGILINK.EXE.
  Have these 3 programs in the current drive or directory, or
  have them available via a path:
    MAKE.EXE     - Make utility that will build BGILINK.EXE
    BINOBJ.EXE   - utility program to convert any file into an .OBJ file
  Place in the current drive or directory the following files:
    BGILINK.PAS  - this sample program
    BGIDRIV.PAS  - Pascal unit that will link in all BGI drivers
    BGIFONT.PAS    - Pascal unit that will link in all BGI fonts
    *.CHR        - BGI font files
    *.BGI        - BGI driver files
    BGILINK.MAK  - "make" file that builds BGIDRIV.TPU, BGIFONT.TPU, and
                   finally BGILINK.EXE
  DIRECTIONS:
  1. Run MAKE on the BGILINK.MAK file by typing the following command
     at a DOS prompt:
       make -fBGIlink.mak
     Using BINOBJ.EXE, this will first build .OBJ files out of the driver
     files (*.BGI) and then call Turbo Pascal to compile BGIDRIV.PAS.
     Next, the font files (*.CHR) will be converted to .OBJs and
     BGIFONT.PAS will be compiled. Finally, BGILINK.PAS will be compiled
     (it uses BGIDRIV.TPU and BGIFONT.TPU).
  2. Run BGILINK.EXE. It contains all the drivers and all the fonts, so it
     will run on any system with a graphics card supported by the Graph
     unit (CGA, EGA, EGA 64 K, EGA monochrome, Hercules monochrome,
     VGA, MCGA, IBM 3270 PC and AT&T 6400).
  EXPLANATION
    BGILINK.PAS uses BGIDRIV.TPU and BGIFONT.TPU in its uses statement:
      uses BGIDriv, BGIFont;
    Then, it "registers" the drivers it intends to use (in this case,
    all of them, so it will run on any graphics card). Then it registers
    all of the fonts it will use (again all of them, just for demonstration
    purposes) and finally it does some very modest graphics.
    You can easily modify BGILINK.PAS for your own use by commenting out
    the calls to RegisterBGIdriver and RegisterBGIfont for drivers and
    fonts that your program doesn't use.
    For a detailed explanation of registering and linking drivers and fonts,
    refer to the RegisterBGIdriver and RegisterBGIfont descriptions in
    the printed documentation.
}
uses Graph,     { library of graphics routines }
     BGIDriv;   { all the BGI drivers }
var
  GraphDriver, GraphMode, Error : integer;
procedure Abort(Msg : string);
begin
  Writeln(Msg, ': ', GraphErrorMsg(GraphResult));
  Halt(1);
end;
begin
  { Register all the drivers }
  if RegisterBGIdriver(@bgiDriver) < 0 then
    Abort('EGA/VGA');
  GraphDriver := Detect;                  { autodetect the hardware }
  InitGraph(GraphDriver, GraphMode, '');  { activate graphics }
  if GraphResult <> grOk then             { any errors? }
  begin
    Writeln('Graphics init error: ', GraphErrorMsg(GraphDriver));
    Halt(1);
  end;
  MoveTo(5, 5);
  OutText('Drivers and fonts were ');
  MoveTo(5, 20);
  OutText('file!');
  Rectangle(0, 0, GetX, GetY + TextHeight('file!') + 1);
  Readln;
  CloseGraph;
end.
----------------------------------------------------------------------------
-----------------------------------------
{************************************************}
{                                                }
{   BGI Demo Program                             }
{   Copyright (c) 1992 by Borland International  }
{                                                }
{************************************************}
unit BGIFont;
{ Sample unit to accompany BGILINK.PAS. This unit links all the BGI graphics
  fonts into a single TPU file. This makes it easy to incorporate the font
  files directly into an .EXE file. See BGILINK.PAS for more information.
}
interface
procedure GothicFontProc;
procedure SansSerifFontProc;
procedure SmallFontProc;
procedure TriplexFontProc;
implementation
procedure GothicFontProc; external;
{$L GOTH.OBJ }
procedure SansSerifFontProc; external;
{$L SANS.OBJ }
procedure SmallFontProc; external;
{$L LITT.OBJ }
procedure TriplexFontProc; external;
{$L TRIP.OBJ }
end.
----------------------------------------------------------------------------
-----------------------------------------
{************************************************}
{                                                }
{   BGI Demo Program                             }
{   Copyright (c) 1992 by Borland International  }
{                                                }
{************************************************}
unit BGIDriv;
{
  Sample unit to accompany BGILINK.PAS. This unit links the BGI graphics
  driver into a single TPU file. This makes it easy to link the driver files
  directly into an .EXE file. See BGILINK.PAS for more information.
}
interface
procedure bgidriver;
implementation
procedure bgidriver; external;
{$L EGAVGA.OBJ }
end.

               Attenzione all'anti-spam XXX
Quarta Legge delle Modifiche:
	Dopo attente e scrupolose analisi di un campione, ti verra' detto
	che era il campione sbagliato e che non ha niente a che fare col
	problema.

 esempio).
Stai parlando del file graph.tpu? perché i file  con estensione bgi non mi
sembra di usarli. Almeno non volontariamente.

 sembra di usarli. Almeno non volontariamente.
Quando entri in modalità grafica le funzioni e procedure contenute nella
unità graph,
si servono di alcuni file, tra cui egavga.bgi, *.chr (se usi i caratteri
ecc.)...
Quindi li usi involontariamente....
Phones

[CUT]

               Attenzione all'anti-spam XXX
- Cos'e' quella cosa che e' gialla e se premi un bottone diventa rossa?
- Un canarino nel frullatore.
		-- Da it.hobby.umorismo

 wrote in message
8cnq3l$5eh$3...@lacerta.tiscalinet.it...

non credo proprio si possa mettere tutto nel sorgente. come fai a mettere un
driver nel sorgente ?  comunque secondo me quello veramente utile è quello
per l'EGAVGA, se usi la GRAPH. io infatti mi sono fatto una tpu che contiene
solo quella. la TPU dei fonts ti serve solo se vuoi appunto usare font
diversi.
quindi devi solo fare BINOBJ EGAVGA.BGI (mi pare) per ottenere EGAVGA.OBJ,
poi ti crei la tpu BGIDRIV come nell'esempio e nel tuo sorgente devi solo
usare l'istruzione
 if RegisterBGIdriver(@bgiDriver) < 0 then  quello che vuoi tu.
se non vuoi fare tutto questo (ma ci vuole poco, te lo assicuro) devi sempre
portarti dietre l' EGAVGA.BGI nella stessa directory in cui tieni il tuo
.EXE
ciao
FROLIX8

 .EXE
C'è un modo per fare un collegamento a DLL, cioè un file esterno, però con
nome a mia scelta ?
Phones

Ciao e Grazie.
Basta che durante la compilazione inserisci anche le librerie.
Questo e' automatico per le unit, ma non per i file esterni, come nel
caso del EGAVGA.BGI, per esempi.
Segui questo procedimento:
1) Trasformi, per mezzo del programma BINOBJ.EXE, il file egavga.bgi
in egavga.obj.
Il programma BINOBJ di usa in questo modo;
Il primo parametro e' il file binario, in questo caso egavga.bgi.
Il secondo parametro e' il file object, nel nostro caso mettiamo
egavga.obj, ma puoi dargli il nome che vuoi.
Il terzo parametro e' il nome del driver; ricordati questo nome,
perche' ti servira' all'interno del programma.
2) Prima di iniziare il programma, scrivi {$L nome_file}
Nel nostro caso {$L egavga.obj}
Dichiari una procedura come
		Procedure nome_driver; external;
Dopodiche', prima della dichiarazione del'initgraph, scrivi:
		registerbgidriver(@nome_driver);
Se al terzo parametro, nel passaggio precedente, hai dato come nome
driver "egavgadrv", allora scriverai
		registerbgidriver(@egavgadrv);
Ti riporto un esempio:
********************************
{$L Egavga.obj}	        { Il mio file obj si chiama EGAVGA.OBJ}
 uses Graph;
var
  grDriver: Integer;
  grMode: Integer;
  ErrCode: Integer;
{ Dichiaro il driver tramite procedura}
Procedure EgaVgaDrv;External;	
begin
  Registerbgidriver(@egavgadrv);
  grDriver := Detect;
  InitGraph(grDriver, grMode,'');
  ErrCode := GraphResult;
  if ErrCode = grOk then
  begin  { Do graphics }
    Line(0, 0, GetMaxX, GetMaxY);
    Readln;
    CloseGraph;
  end
  else
    Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end.
********************************
Dopodiche' compilo il tutto ... il file ora lo puoi portare dove vuoi
senza doverti portare appresso anche il fiel EGAVGA.BGI.
<=- Negus -=>
www.infinito.it/utenti/negus80
 ... pascal, c++, asm