Newsgroup: it.comp.lang.delphi
Titolo: [FAQ] ennesima versione (poi postero' una volta alla settimana direi]

Le FAQ di IT.COMP.LANG.DELPHI
Raccolte e pseudo-mantenute da Nicola {MSX} Lugato
Versione 1.1
-------------
PRESENTAZIONE
-------------
Ho apportato le modifiche suggerite e inserito qualche nuova domanda.
Ora dovrebbero esserci 35 domande.
Intanto un po' di pubblicita':
Visita il sito di {MSX} 
http://msx.rules.it
 :)
-----------------
DOMANDE GENERICHE
-----------------
-DOMANDA:
Object Pascal ? Io conoscevo il Turbo/Borland pascal... C'è qualcosa in
comune ? Sono avvantaggiato ?
-RISPOSTA
C'è qualcosa in comune. Si sei avvantaggiato, ma non molto. Object Pascal è
una versione ampliata del
Pascal "standard" che tra l'altro implementa le classi (*), come in C++.
Quindi sai già usare buona
parte del linguaggio, ma le novità di Object Pascal sono molte e importanti.
Per fare una analogia, si potrebbe dire che Pascal sta a Object Pascal
come C sta a C++.
*: si anche pascal normale implementava le classi (la parola chiave era
Object) ma facevano molta piu'
pena.. niente a che vedere con l'Object pascal :)
-DOMANDA:
Delphi mi genera un sacco di file con estensioni strane quando salvo un
progretto. Servono tutti ?
-RISPOSTA: (Riccardo Kalb)
i file con la tilde ~ sono file di backup dei relativi file se vuoi puoi
anche cancellarli se non ti servono.
i file cfg e dof non devi mai cancellarli perchè sono impostazioni del
progetto. I dcu anche se li
cancelli non succede niente perchè vengono rigenerati nella compilazione, ma
solo se hai i rispettivi
file pas (naturalmente i pas non vanno cancellati)
-DOMANDA:
Esiste l'overloading degli operatori ?
-RISPOSTA:
No, almeno fino a Delphi5. (no anche sul 6 a quanto ne so)
-DOMANDA:
Esiste l'overloading delle funzioni ?
-RISPOSTA:
Eseste a partire da Delphi4. Per implementarli, aggiungi la direttiva
overload
sulla dichiarazione delle procedure.
-DOMANDA:
Come posso far si che la mia applicazione venga caricata ogni volta
all'avvio di Windows?
-RISPOSTA (Antonio Tarolla):
Bisogna utilizzare una chiave particolare del Registro di Windows...ecco il
codice :
var Registro : TRegistry;
begin
Registro:=TRegistry.Create;
   try
     Registro.RootKey:=HKEY_LOCAL_MACHINE;
     if
Registro.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',False) then
     if not Registro.ValueExists('NomeMiaApplicazione') then
        Registro.WriteString('NomeMiaApplicazione',(Application.ExeName));
   finally
    Registro.Free;
   end;
end;
-DOMANDA:
Come posso ottenere informazioni sul computer su cui gireranno i miei
programmi ?
Dove trovo informazioni sulle librerie installate, sull'hardware, sulla
memoria disponibile ecc ecc?
-RISPOSTA:
Le informazioni che cerchi sono tutte "sparse". Esistono pero' componenti
che ti cercano e raggruppano
tutte le informazioni. Ad esempio l'eccellente TSystemInfo della Jazarsoft,
che trovate su Torry
o su 
http://www.jazarsoft.cjb.net/
 da info su tantissimi aspetti della
macchina.
-DOMANDA:
Come faccio a sapere la directory dove viene eseguito il mio programma ?
-RISPOSTA:
Per sapere il full-path usa Application.exename, per ottenere la cartella in
cui è il tuo eseguibile utilizza ExtractFilePath(Application.exename).
-DOMANDA:
Come ottengo il nome delle directory di sistema, tipo "c:\windows", la
cartella "temp" ecc ?
-RISPOSTA:
La cartella in cui è installato Windows la ottieni mediante la funzione API
GetWindowsDirectory(), quella temporanea con GetTempPath.
Poi c'e' GetSystemDirectory, che trova la directory di sistema (generalmente
"c:\windows\system")
e GetCurrentDirectory, che ritorna la directory di corrente per il vostro
processo.
esempio:
var WinDirPath: PChar;
begin
  GetMem(WinDirPath,MAX_PATH);
  GetWindowsDirectory(WinDirPath,MAX_PATH);
  ShowMessage(WinDirPath);
  FreeMem(WinDirPath);
end;
-DOMANDA:
Come faccio a non far venire fuori l'icona della mia applicazione nella
barra delle applicazioni in basso ?
-RISPOSTA:
Nell'evento OnPaint o OnShow della form metti:
ShowWindow(application.handle,SW_HIDE);
-DOMANDA:
Come faccio a comprimere/decomprimere dei file zip dal mio programma?
-RISPOSTA:
Scarica qui il componente che fa al caso tuo:
http://ourworld.compuserve.com/homepages/African_Chief/
Esso utilizza una DLL fornita dai creatori di WinZip, che permette di fare
quello che hai chiesto.
-------------------------------------------------------
Visual Component Library (VCL) e componenti Non-Visuali
-------------------------------------------------------
-DOMANDA:
Cos'è la VCL ?
-RISPOSTA:
Per creare la tua applicazione, Delphi ti mette a disposizione la VCL
(Visual
Component Library), ovvero una raccolta di componenti e controlli che puoi
vedere
raccolti nella "barra" in alto. Fai doppioclick su un componente e vedrai
che
comparirà nella form, cioè la finestra che vedi piena di puntini. Ogni
componente
ha diverse poprietà, che puoi leggere e modificare tramite l'Object
Inspector dopo
averne selezionato uno. Esistono componenti visuali (chiamati controlli) che
saranno
visibili a runtime (quando il tuo programma sarà in funzione) e altri non
visuali,
che racchiudono altre funzioni. Lo scopo di questa raccolta, è di offrire
agli
sviluppatori degli oggetti che racchiudano ciascuno delle funzioni proprie
di
un certo argomento. Ad esempio esiste il componente OpenDialog, (che
gestisce le
finestre di dialogo per aprire un file), il componente Edit (per avere una
casella
di testo nella form), Image (per le immagini) ecc. ecc. Inoltre è possibile
creare
componenti nuovi o scaricarne dalla Rete.
-DOMANDA:
Come creo dinamicamente un controllo ?
-RISPOSTA:
Devi creare l'oggetto che vuoi (ad esempio un bottone) come qualsiasi altro
oggetto e settarci i valori, successivamente chiamare:
Oggetto.Parent := Form;
per rendere visibile l'oggetto. Dopodiche' puoi settare gli eventi,
associandoli a
procedure che abbiano la stessa firma (= lista dei parametri) e che siano
procedure "of object" (ad es. dichiarata nella sezione
public della form)
procedure TForm1.NuovoBottone;
 var Button:TButton;
begin
 Button := TButton.Create(Form1);
 with Button do
  begin
   Caption := 'Premimi !';
   Left := 100;
   Top := 100;
   Parent := Form1;
   OnClick := ClickProc;
  end;
end;
Inoltre, nel caso si abbia bisogno di avere un riferimento al controllo
anche dopo averlo creato,
si puo' dichiarare l'oggetto come globale invece che locale (o anche come
field della form).
-DOMANDA:
Esiste un componente che mi permetta di lanciare un programma dos e
catturarne l'output?
-RISPOSTA:
Guarda su torry, c'e' l'ottimo DOScommand per esempio.
-DOMANDA:
Come levo il fastidiosissimo beep che fa il TEdit quando premo invio ?
-RISPOSTA:
Su OnKeyPress metti:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then key := #0;
end;
-DOMANDA:
Come accedo velocemente ai singoli pixel di un TBitmap ?
-RISPOSTA:
Devi usare le ScanLine, che ritornano un puntatore al primo byte della
riga che gli passi. Attento che la grandezza dei pixel dipende dalla
profondità di colore.
--------------
API di Windows
--------------
-DOMANDA:
Aprire e chiudere l'unità CD-ROM "primaria"
-RISPOSTA:
Anche qui è necessaria la unit MMSystem. Ci sono sicuramente più modi per
fare la stessa cosa, il metodo più semplice consiste nell'utilizzo della
mciSendString
Per aprire :
  mciSendstring('SET CDAUDIO DOOR OPEN WAIT',nil,0, Self.Handle);
Per chiudere :
  mciSendstring('SET CDAUDIO DOOR CLOSED WAIT',nil,0, Self.Handle);
-DOMANDA:
Come faccio ad eseguire un programma esterno?
-RISPOSTA:
Ancora una volta, usa ShellExecute.
ShellExecute(Form1.handle, 'open', 'c:\windows\telnet.exe', nil , nil,
SW_SHOWNORMAL);
Oppure usa un componente, ad esempio TAppExec che trovi su torry
o qui: 
http://www.worldnet.net/~cycocrew/delphi
-DOMANDA:
Come nascondo un processo dalla task list (quella di CTRL-ALT-CANC) ?
-RISPOSTA:
usa questa procedura residente nella DLL Kernel32.dll
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer;
stdcall; external 'KERNEL32.DLL';
poi chiama:
RegisterServiceProcess(GetCurrentProcessID, x);
Metti come x 1 se vuoi nasconderla o 0 per ripristinarla.
Questa tecnica funziona solo su Windows 9x/ME.
-DOMANDA:
Mi servirebbe sapere come poter accendere e spegnere i tre led della
tastiera.
-RISPOSTA: (Andrea Magni)
Ecco qua, il tutto si basa su Get/SetKeyBoardState che riempie una struttura
(un array 0..255 di bytes) con lo stato attuale dei tasti...
var Tastiera:Tkeyboardstate;
begin
GetKeyBoardState(Tastiera);
  Tastiera[VK_CAPITAL] := 1;
  Tastiera[VK_NUMLOCK] := 1;
  Tastiera[VK_SCROLL] := 1;
SetKeyBoardState(Tastiera);
ShowMessage('Adesso li spengo');
GetKeyBoardState(Tastiera);
  Tastiera[VK_CAPITAL] := 0;
  Tastiera[VK_NUMLOCK] := 0;
  Tastiera[VK_SCROLL] := 0;
SetKeyBoardState(Tastiera);
-DOMANDA:
Ho bisogno di intercettare un evento di un tasto fuori dalla form, ad
esempio il bottone start della barra di avvio.
-RISPOSTA: (Carlo Bertuccini)
La soluzione_teorica_più correttta  per questo tipo
di problemi consiste nell'iniezione di un hook WH_GETMESSAGE (con DLL) nel
thread/processo esterno interessato e intercettare le notifiche spedite dal
componente stesso ... ad esempio per il click di un bottone viene inviata la
notifica BN_CLICKED e così via.
Esempio:
Per semplicità ho intercettato il messaggio
WM_LBUTTONDOWN perchè BN_CLICKED viene inviato in seguito a un WM_COMMAND
dopo che l'evento è avvenuto.
Ecco il codice:
[Progetto]
----------------------
Unit Unit1;
[...]
Procedure Load (TID : dWord); stdcall; External 'ExtEvent.DLL';
Procedure Remove; stdcall; External 'ExtEvent.DLL';
var
  Form1: TForm1;
  OnlyOnce : Boolean = False;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var ButtonHandle: THandle;
    ThreadID : dWord;
begin
  if (OnlyOnce = False) then begin
    OnlyOnce := True;
    ButtonHandle :=
FindWindowEx(FindWindow('Shell_TrayWnd',nil),0,'Button',nil);
    ThreadID := GetWindowThreadProcessId(ButtonHandle,nil);
    Load(ThreadID);
  end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  Remove;
  OnlyOnce := False;
end;
end.
----------------------
[DLL]
----------------------
library ExtEvent;
uses
  Dialogs,
  Messages,
  Windows;
{$R *.RES}
var
hHook : THandle;
TheHandle : THandle;
Function HookProc(Code:Integer; WPar : Wparam; LPar :Lparam) : Integer;
Stdcall;
Begin
  if (Code = HC_ACTION) then Begin
     if (PMsg(LPar)^.message = WM_LBUTTONDOWN) and
 (PMsg(LPar)^.hwnd = TheHandle) then begin
         ShowMessage('Sta per comparire la Barra di avvio (elaborazione di
WM_LBUTTONDOWN)');
     end;
  end;
  Result := CallNextHookEx(hHook,Code,WPar,LPar);
end;
Procedure Load (TID : dWord); stdcall;
Begin
   hHook:=SetWindowsHookEx(WH_GETMESSAGE,@HookProc,hInstance,TID);
end;
Procedure Remove; stdcall;
Begin
   UnHookWindowsHookEx(hHook);
end;
Exports
Load,Remove;
Begin
    TheHandle :=
FindWindowEx(FindWindow('Shell_TrayWnd',nil),0,'Button',nil);
end.
-------
BTW: Questo soddisfa la richiesta di intercettare un evento, che è ben
diverso da sapere lo stato di un bottone. Esistono infatti dei messaggi che
ci restituiscono informazioni sullo stato dei componenti, ad esempio il
messaggio BM_GETSTATE.
-DOMANDA:
Come faccio a spegnere il computer da una mia app (shutdown) ?
-RISPOSTA:
Devi usare ExitWindowsEx.
E' fondamentale il parametro EWX_SHUTDOWN. Inoltre su piattaforme NT/2K è
necessario risettare i privilegi mediante AdjustTokenPrivileges e funzioni
correlate.
-DOMANDA:
Perche' Delphi genera file exe cosi' grandi ? non si possono ridurre?
-RISPOSTA:
Delphi genera file grandi perche' e' un RAD. Creare finestre in Delphi
e' molto semplice proprio per questo, il prezzo da pagare (molto basso)
e' la dimensione dell'exe. Nulla ti vieta di togliere la vcl e tutto il
resto e programmare con le API. Questa e' la forza di Delphi: puoi scegliere
la strada comoda o quella ottimizzata :)
Ecco un esempio di programma senza VCL, che crea una finestra (notare che
con la VCL il seguente programma non necessita alcuna linea di codice :)
----------------------------------------------------
program Window1;
{ Copyright (c) 1996 by Charlie Calvert
  Standard Windows API application written in Object Pascal.
  No VCL code included. This is all done on the Windows API
  level.
  Note that you need to include both Windows and Messages!}
uses
  Windows, Messages;
const
  AppName = 'Window1';
function WindowProc(Window: HWnd; AMessage, WParam,
                    LParam: Longint): Longint; stdcall; export;
begin
  WindowProc := 0;
  case AMessage of
    wm_Destroy: begin
      PostQuitMessage(0);
      Exit;
    end;
  end;
  WindowProc := DefWindowProc(Window, AMessage, WParam, LParam);
end;
{ Register the Window Class }
function WinRegister: Boolean;
var
  WindowClass: TWndClass;
begin
  WindowClass.Style := cs_hRedraw or cs_vRedraw;
  WindowClass.lpfnWndProc := @WindowProc;
  WindowClass.cbClsExtra := 0;
  WindowClass.cbWndExtra := 0;
  WindowClass.hInstance := HInstance;
  WindowClass.hIcon := LoadIcon(0, idi_Application);
  WindowClass.hCursor := LoadCursor(0, idc_Arrow);
  WindowClass.hbrBackground := HBrush(Color_Window);
  WindowClass.lpszMenuName := nil;
  WindowClass.lpszClassName := AppName;
  Result := RegisterClass(WindowClass) <> 0;
end;
{ Create the Window Class }
function WinCreate: HWnd;
var
  hWindow: HWnd;
begin
  hWindow := CreateWindow(AppName, 'Object Pascal Window',
              ws_OverlappedWindow, cw_UseDefault, cw_UseDefault,
              cw_UseDefault, cw_UseDefault, 0, 0, HInstance, nil);
  if hWindow <> 0 then begin
    ShowWindow(hWindow, CmdShow);
    UpdateWindow(hWindow);
  end;
  Result := hWindow;
end;
type func = function(processID, OpTypeFlag:DWORD): DWORD; stdcall;
const RSP_REGISTER = 1;
const RSP_UNREGISTER = 0;
var
  AMessage: TMsg;
  hWindow: HWnd;
  reg:func;
begin
  if not WinRegister then begin
    MessageBox(0, 'Register failed', nil, mb_Ok);
    Exit;
  end;
  hWindow := WinCreate;
  if hWindow = 0 then begin
    MessageBox(0, 'WinCreate failed', nil, mb_Ok);
    Exit;
  end;
@Reg:=GetProcAddress(GetModuleHandle('KERNEL32.DLL'),'RegisterServiceProcess
');
  reg(0,RSP_REGISTER);
  while GetMessage(AMessage, 0, 0, 0) do begin
    TranslateMessage(AMessage);
    DispatchMessage(AMessage);
  end;
  Halt(AMessage.wParam);
  Reg(0, RSP_UNREGISTER);
end.
----------------------------------------------------
-DOMANDA:
Come faccio a mettere un'icona nel Tray (l'area in basso a destra vicino
all'orologio) ?
-RISPOSTA:
Devi usare l'API Shell:NotifyIcon. Ecco un'esempio di come si usa:
MyNotifyStruct: TNotifyIconData;  // dichiarata come globale
procedure TForm1.MettiIcona;
begin
  with MyNotifyStruct do begin
    cbSize:= sizeof(MyNotifyStruct);
    Wnd:= form1.handle;
    uID:= 1;
    uFlags:=  NIF_ICON or NIF_TIP or NIF_MESSAGE;
    hIcon:= UnOggettoTIcon.handle;
    uCallbackMessage:=WM_MSX;  // da usare se volete intercettare click
sull'icona
    szTip:= 'Questa scritta viene fuori si ti fermi col mouse';
  end;
  Shell_NotifyIcon(NIM_ADD, @MyNotifyStruct);
end;
Per torglierla:
  Shell_NotifyIcon(NIM_Delete, @MyNotifyStruct);
In alternativa, puoi scarcarti da torry l'ottimo componente TCoolTrayIcon,
che funziona alla
perfezione, e' semplicissimo e offre molte opzioni aggiuntive.
----------
MULTIMEDIA
----------
-DOMANDA:
Come posso gestire da codice il volume wave della scheda audio?
-RISPOSTA (Carlo Bertuccini):
Includere la unit MMSystem e poi richiamare la WaveOutSetVolume :
WaveOutSetVolume(0, 00000000);  file://azzera il volume
WaveOutSetVolume(0, $FFFFFFFF); file://imposta al massimo il volume
Nella funzione WaveOutSetVolume le prime 4 cifre del valore esadecimale che
segue la virgola si
riferiscono agli altoparlandi di sinistra, il resto a quelli di destra.
-DOMANDA:
Cme posso eseguire un file Wave senza il TMediaPlayer
-RISPOSTA (Carlo Bertuccini):
Innanzitutto bisogna sempre includere la unit MMSystem nella USES-list.
Il codice per eseguire è il seguente :
PlaySound('Percorso\nomefile.wav',0,SND_SYNC);
L'ultimo parametro indica se il suono deve essere sincrono (il file non può
essere interrotto fino al termine
della sua esecuzione) o asincrono [SND_ASYNC] (dopo aver avviato la
riproduzione si restituisce il controllo all'applicazione)
-DOMANDA:
Posso usare librerie grafiche avanzate (DirectX o OpenGL) con Delphi ?
-RISPOSTA:
Si. Per entrambe il metodo piu' classico e' procurarsi l'header tradotto in
pascal delle librerie,
includerle nel progetto e usare le API come si fa con gli altri linguaggi.
Puoi procurarti gli header
su DelphiJEDI o su altri siti Delphi (vedi links).
In alternativa puoi usare componenti gia' pronti che incapsulano queste
librerie.
Esistono ad esempio DelphiX (il migliore) e DelphiGameCreator per le DirectX
e OpenGLPanel e altri per OpenGL.
Ancora una volta, trovi tutto su torry (Dio lo benedica :)
--------------------
INTERNET PROGRAMMING
--------------------
-DOMANDA:
Come posso aprire il browser di default su un URL a scelta?
-RISPOSTA:
Usa ShellExecute:
ShellExecute (handle, nil, '
http://www.indirizzo.com
' ,nil,nil,sw_show);
Per le e-mail:
ShellExecute (handle, nil,'mailto:
cic...@server.com
', nil,nil,sw_show);
o anche:
ShellExecute (handle, nil,'mailto:
cic...@server.com
?subject=Saluti',
nil,nil,sw_show);
La funzione ShellExecute si trova nella unit ShellApi che dovresti inserire
nella tua USES list.
-DOMANDA:
Come faccio a sapere se sono connesso a Internet ?
-RISPOSTA: (Carlo Bertuccini)
Devi utilizzare le API RAS (Servizi di accesso remoto). Trovi molti esempi
e anche un traduzione dell'header C sulla DSP. Se vuoi semplificare il
lavoro scarica (sempre dallo stesso sito) il componente kzinternetdetect
che ha tra le sue proprietà/metodi un Connected che restituisce
l'informazione interessata.
Non so se ci sia una/nessuna/+ di una traduzione dell'header dell'API
RAS sulla DSP, sicuramente c'è una traduzione sul sito di Fraçoise Piette
(non ho sottomano l'URL)
-DOMANDA:
Come faccio a inviare un'email gia' pronta ?
-RISPOSTA:
Se hai la versione Client/Server, puoi usare il componente TNMSMTP.
Devi impostare l'indirizzo del tuo server SMTP, il corpo, il destiantario
nei vari campi dell'OI.
Se non hai la Client/Server puoi cercare un componente simile su Torry.
--------
DATABASE
--------
-DOMANDA: Come si fa a togliere la finestra di login per la connesione
al database?
-RISPOSTA (Alan Solo):
Imposta la proprietà LoginPrompt del TDatabse a False.
-----
KYLIX
-----
-DOMANDA:
Cos'e' Kylix ?
-RISPOSTA:
E' il porting di Delphi sotto linux, ovvero Delphi per linux.
-DOMANDA:
E' compatibile con Delphi ?
-RISPOSTA:
Domanda complessa :) Dunque, a quanto ne so, Kylix e' compatibile con
Delphi6. Questo pero' a delle condizioni:
devi usare solo i componenti della VCL (che forse ha un altro nome?)
speciale dei due strumenti, evitando
tutte le chiamate alle api e simili. In questo caso lo stesso progetto
dovrebbe compilare su entrambi.
Comunque fino a dove arriva la compatibilita' e' tutto da vedere.
-DOMANDA:
E' free ?
-RISPOSTA:
Magari! Anzi, le varie versioni di Kylix costano molto. A quanto ne so i
prezzi sono questi:
Kylix Server Developer
"Accelerate your Linux® web application development with
Kylix Server Developer edition, the RAD tool for Linux."
$1,999.00
Kylix Desktop Developer
"Accelerate your Linux® GUI development with
Kylix Desktop Developer edition, the RAD tool for Linux."
$999.00
Per prezzi piu' aggiornati, vai al sito 
www.borland.com
Sembra sia prevista una versione GPL.
-DOMANDA:
Cos'e' la CLX ?
-RISPOSTA:
Anche a me piacerebbe saperlo...
Ma non si puo' volere tutto..
-------
CREDITS
-------
Si ringraziano (in ordine sparso):
Alan Solo, Riccardo Kalb, A. Salvati, Andrea Magni, Antonio Tarolla,
Carlo Bertuccini, Charlie Calvert, Paolo Arosio,
WalkieTalkie, Unforgiven, KJK :: Hyperion, Claudio "Elder" Bertoli
-----
LINKS
-----
Torry's Delphi Pages (inglese)
 
http://www.torry.net
 
http://torry.rimini.com/
  (mirror italiano)
 Il migliore per cercare componenti aggiuntivi. Sono catalogati per
argomento, commentati e valutati
 e dispone di un motore di ricerca. Molto semplice da usare. Comprende anche
esempi, tool, docs,
 una mailing list e tratta anche Kylix. Generalmente ritenuto il meglio.
Delphi Super Page (inglese)
 
http://delphi.icm.edu.pl/
 Un sito che raccoglie componenti per Delphi e C++Builder. Ne contiene
moltissimi ma lo trovo un po'
 piu' scomodo di Torry.
Borland Community
 
http://community.borland.com/delphi
 La comunita' di sviluppatori della Borland. Credo ci si debba iscrivere
(boh?).
Borland
 
http://www.borland.it/
 Ovviamente il sito della Borland.
Top 100 Delphi sites (inglese)
 
http://www.sandbrooksoftware.com/TS/index.shtml
 i links dei 100 migliori siti sul Delphi.
The Delphi Compendium (inglese)
 
http://www.cyber-matrix.com/delphi.htm
 Tutorial, componenti, articoli ecc. ecc.
#Gameprog-Ita Abc/Delphi page (italiano)
 
http://gpi.infomedia.it/abc/delphi
 I miei tutorial. Alcuni sono orientati allo sviluppo di videogiochi e
grafica, altri sono generici,
 tra cui un tutorial da zero sulle classi.
Software Planet (italiano)
 
http://www.softwareplanet.net
 Contiene dei corsi di Delphi scritti da Tommaso Trani (almeno credo :).
Real Programmers Use Pascal (Kylix) (inglese)
 
http://www.oreilly.com/news/kylix_0800.html
 qui ci sono alcuni articoli (per la sezione generale direi), un po'
 datati pero' secondo me interessanti. (Alan Solo)
Delphi in a Nutshell - The Delphi Object Model (inglese)
 
http://www.oreilly.com/catalog/delphi/chapter/ch02.html
 (spiega il modello ad oggetti di Delphi confrontandolo con VB, Java e C++)
(Alan Solo)
Borland Forums
 news://
forums.borland.com
 (inglese)
 i newsgroup della borland, qui troverete sicuramente molte risposte
 su Delphi e sugli altri prodotti Borland
Tamaracka
 
http://www.tamaracka.com/search.htm
 (inglese)
 per cercare nei newsgroup di Borland (Alan Solo)
Componenti / Librerie / Tools (FW / OS / SW / $$) (Paolo Arosio)
 JEDI  
http://www.delphi-jedi.org
 RxLib  
http://www.rxlib.com
 ICS:  (datemi il link)
 Indy:  (datemi il link)
 FreeVCS 
http://www.thensle.de
Notizie, articoli, tips, ... (Paolo Arosio)
 
http://www.dedonline.com
           (Italiano)
 
http://www.programmazione.it
       (Italiano)
 
http://www.delphi3000.com
 
http://www.marcocantu.com
 
http://www.drbob42.com
 
http://www.delphioop.com
TurboPower
 
http://www.turbopower.com
i seguenti link sono per interbase (Alan Solo)
 
http://www.ibphoenix.com
 
http://firebird.sourceforge.net/
Ricerche (Paolo Arosio)
 
http://www.google.com
                  (generale)
Altri link (non testati) da Carlo Bertuccini
http://www.advdelphisys.com/
{ Moltissime funzioni per Delphi }
http://www.mindspring.com/~cityzoo/buglist/buglist.html
{ Vari trucchi, FAQ etc }
http://www.mhn.org/~graham/delphi.html
{ Altre FAQ }
http://www.delphiexchange.com
{ Molte altre risorse per delphi }
http://www.drbob42.com/
{ Ecco un maniaco di Delphi }
http://www.itecuk.com/delmag/
{ The Delphi Magazine }
http://www.icss.net/~nhodges/delphi.htm
{ Altri esempi e risorse per Delphi }
http://www.mclink.it/mclink/delphi/
{ Molti Link!! }
http://www.delphiseek.com
{ Un vero e proprio motore di ricerca per Delphi }
http://www.delphisource.com
{ Anche qui c'e parecchio materiale interessante }
http://www.kaposnet.hu/books/tysdelphi4/
{ Un intero libro su Delphi }
http://www.chami.com/tips/index/
{ Parecchi Tips, anche su Delphi }
------------
Cose Inutili
------------
Ed ora qualche Haiku sul delphi :)
Borland innovates.
Delphi lives where Microsoft
fears to port their code.
 Tim Sommers
drag. drop. TButton.
the form is where it happens.
now, assign OnClick.
 Tim Sommers
Windows sucks out loud
Use Kylix to port your code
Linux treats you right
 Tim Sommers
I am the source code.
compiler reduces me
to ones and zeroes.
 Tim Sommers
I sit and I think
Delphi for Linux, Awesome!
I anxiously wait.
 Micheal Bonner
Haiku Error Messages (Richard Morris)
invalid pointer
I am sure you tried to free
that pointer before
Eek, Invalid cast!
You tried to shove a square peg
into a round hole
Hey, Stack overflow
Now you have PUSHed me to far
Can't take this abuse
That is all messed up
Semicolon before Else
not in this language
$WEAKPACKAGEUNIT
or $DENYPACKAGEUNIT
one or the other
no semicolon
have you recently escaped
Visual Basic ?

 raccolti nella "barra" in alto. Fai doppioclick su un componente e vedrai
Raccolta e raccolti? Che ne pensi di raccolta e raggruppati? ^_^
Andrea

Raccolta e raccolti? Che ne pensi di raccolta e raggruppati? ^_^
...Lo "bello stile"... ;)
Ciao!
Peppe
_____
ICQ #9759626
http://members.xoom.it/joe
Togli levaccà per contattarmi via email.

 Togli levaccà per contattarmi via email.
Andrea

niente a che vedere con l'Object pascal :)
Continuate ad imbottire le FAQ di pareri personali.
(*) non e' corretto fare un confronto di questo tipo, per almeno tre
motivi :
1. C e C++ sono linguaggi standard, Pascal lo e', Turbo Pascal no,
Object Pascal (derivato da TP) no.
2. Ci sono alcuni aspetti del C che in C++ non sono piu' legali, non
vale lo stesso tra Pascal e Object Pascal.
3. L'uso delle classi in Object Pascal e' molto diverso (a mio avviso
peggiore) di quello del C++ (quindi il "come in C++" andrebbe
sotterrato).
--
Walkie...@Libero.It (ICQ# 8143647)

Continuate ad imbottire le FAQ di pareri personali.
concordo di togliere, però ora quasi quasi le lascerei,
visto che lo chiedi con quel tono.
! ( Ciao )
Alan Solo

(*) Analogia: somiglianza.
La "somiglianza", l'analogia (o come altro la vuoi chiamare) in
questione e' sbagliata.
--
Walkie...@Libero.It (ICQ# 8143647)

questione e' sbagliata.
[mettere una frase a caso, tanto č inutile]
Alan Solo

[mettere una frase a caso, tanto č inutile]
Se non sei capace di ribattere, evita di scrivere idiozie.
--
Walkie...@Libero.It (ICQ# 8143647)

Se non sei capace di ribattere, evita di scrivere idiozie.
di ribattere cosa? E' inutile, tu avrai sempre ragione, giusto?
Non so neanche perchč ti replico...
finiamola qui (ovviamente dopo il tuo solito ultimo post)

di ribattere cosa? E' inutile, tu avrai sempre ragione, giusto?
Certo.
Finquando ribatto su cose che CONOSCO, di fronte a gente che non sa
neanche di che sta parlando.
--
Walkie...@Libero.It (ICQ# 8143647)

 Object Pascal (derivato da TP) no.
Objective Pascal *č* uno standard
Delphi, grazie al cielo, non lo č

neanche di che sta parlando
bravo
ce l'hai più lungo tu
hai vinto

 sotterrato).
Non diciamo stronzate per favore.

 vale lo stesso tra Pascal e Object Pascal.
Tra l'altro quali sono questi aspetti ? Descrivili tutti cosi' possiamo
vedere.

> Walkie...@Libero.It (ICQ# 8143647)
Comunque, caro Andrea LaForgia, vedo che hai cambiato identita', ma era
meglio se cambiavi invece il tono arrogante e da saputello che hai.

Provo a dire la mia riguardo la FAQ, sperando di essere
utile (e di non sembrare troppo pedante).
--
| -DOMANDA:
| Come faccio a non far venire fuori l'icona della mia applicazione nella
| barra delle applicazioni in basso ?
Forse e' meglio scrivere:
Come impedire che appaia sulla Barra delle applicazioni il pulsante
relativo al mio programma ?
| -DOMANDA:
| Aprire e chiudere l'unità CD-ROM "primaria"
Non e' una domanda ;-)
Come posso aprire (o chiudere) il cassettino dell'unità CD-ROM "primaria"
via codice?
(Si', lo so, e' una minuzia, pero' ... abbiamo fatto trenta, facciamo
trentuno)
| -DOMANDA:
| Cos'e' la CLX ?
| -RISPOSTA:
E' un framework (una libreria di classi) progettato per semplificare lo
sviluppo di applicazioni multipiattaforma, basato sulle librerie QT di
TrollTech, simile ma non uguale alla VCL.
(Beh... sono stato un poco vago ma credo anche abbastanza corretto)
| Componenti / Librerie / Tools (FW / OS / SW / $$) (Paolo Arosio)
ICS:  
http://users.swing.be/francois.piette/indexuk.htm
 (ING)
Indy:  
http://www.nevrona.com/Indy/
 (ING)
Altri link interessanti (tutti in ING)
Delphi Automation site di Deborah Pate:
http://www.djpate.freeserve.co.uk/Automation.htm
per l'OLE Automation di molti programmi Microsoft
The Delphi Box
http://Inner-Smile.com
 .
About - Delphi Programming
http://delphi.about.com/compute/delphi/
BDE Alternatives List
http://www.kylecordes.com/bag/list.html
--
Ecco invece altre FAQ - a te la risposta :-)
a) quali sono i migliori libri per imparare ad usare Delphi?
b) come prevenire nuove istanze di un'applicazione in Delphi?
c) come posso accedere ad una variabile/funzione/procedura/costante
presente in un'altra Unit? (oppure: come posso accedere ad un componente
presente in un'altra form?)
d) come posso gestire la porta parallela/seriale con Delphi sotto Windows?
--
Infine, qualche annotazione in ordine sparso:
Inserisci nel testo anche la data dell'ultimo aggiornamento della FAQ.
Perche' non numeri progressivamente le domande in modo ci si possa
far riferimento in maniera piu' veloce e diretta?
Rendi la FAQ piu' leggibile diminuendo il numero di caratteri per riga, in
modo tale da non avere righe di lunghezza differente e con gli 'a capo'
tutti sballati - vedi p.e. la risposta sulla VCL - (o forse e' solo una
impostazione sbagliata del mio Outlook? boh!)
--
Ho finito, puo' bastare.
Spero che questo mio messaggio ti possa essere in qualche modo utile.
In ogni caso, stai facendo un ottimo lavoro. Continua cosi'!
Ciao.
ACSH
---------------------------
La fine del mondo sta per arrivare ...
salvate i documenti aperti!

presente in un'altra form?)
basta che aggiungi la unit che ti interessa nella clausola Uses, se ci
fossero delle varibili o altre cose ominime le puoi richiamare in
questo modo:
NomeDellaUnit.Variabile oppure NomeDiUnAltraUnit.Variabile
Ciao,
Alan Solo

: 

LaForgia? ecco chi mi mancava... ma io me lo ricordavo più simpatico, 
chi è questo mostro con un'antenna in testa e fiamme tra i denti? o mi 
confondo con Roal (brrr...) Zanazzi, il robot dal cuore d'oro di iclvb?
PS- sono le sette del mattino. Devo dormire *_____*

 Versione 1.1
imho 1 post al mese potrebbe essere sufficiente.
Suggerirei, infine, una sezione Modifiche dove riportare, ovv.te, le
modifiche rispetto alla release precedente (se esistono).
Saluti
Paolo Arosio

 confondo con Roal (brrr...) Zanazzi, il robot dal cuore d'oro di iclvb?
no no e' sempre stato cosi'..

 In ogni caso, stai facendo un ottimo lavoro. Continua cosi'!
Grazie, ben gentile :) Non ti ho mai visto sul NG, nuovo ?
Se si, benvenuto.
Ciao !                    {MSX}

un bel flame, ovviamente generato dal solito Andrea LaForgia..
Ehi bello... i flame li generano coloro che parlano senza sapere,
ricordatelo... (quindi non e' il caso che citi)...
--
Walkie...@Libero.It (ICQ# 8143647)

 > d) come posso gestire la porta parallela/seriale con Delphi sotto
Windows?
Per pilotare le due porte non esistono delle API specifiche, ma il risultato
si può ottenere con le stesse funzioni utilizzate le operazioni su file,
ovvero:
CreateFile -- Per ottenere un Handle alla porta
WriteFile e ReadFile -- rispettivamente Scrittura e Lettura dati
CloseHandle -- Libera l'Handle ottenuto da CreateFile
Una soluzione per non ricorrere alle nude API consiste nell'utilizzare
componenti pronti come TComPort
Ciao! :)
--
- Carlo -
c.b...@libero.it

Calvert. Ma, come dicevo, il tutto è soggettivo.
io cmq, direi di mettere qualcosa, io non mi posso esprimere perchè
sono cresciuto con i prof. ;), l'help, il manuale qualche articolo qua
e la su internet ... e voi del NG! :)
pero' qualche riferimento bisogna metterlo, quella domanda sarà la
piu' gettonata in assoluto, anche se puo' essere soggetiva piu' delle
altre, pero'... :)
Ciao,
Alan Solo

 altre, pero'... :)
Io propongo invece di cambiare la domanda ...
"Di quale documentazione ho bisogno per cominciare?"
E poi possiamo fornire risposte pių ampie rispetto al "miglior libro", non
credi?
Ciao.


credi?
già, forse è meglio... è molto + anti-flame ;)
Ciao,
Alan Solo

 Non diciamo stronzate per favore.
Dato che non conosco bene la differenza, potresti essere
così gentile da spiegarmela ?(Non voglio fare ironia, non la
so davvero!)

 ha scritto nel
messaggio news:3b2d9ad0...@news.libero.it...

Il tuo problema non è nella conoscenza della programmazione,
ma nel fatto che non sai l'italiano. Quando io (o


 PS- sono le sette del mattino. Devo dormire *_____*
Scusa ma non ci interessa; hai ragione, ma non scrivercelo.
Per il resto concordo.
2° cosa: ma questo segno *_____*(o altre volte vedo ^__^)
che vuol dire?