Newsgroup: it.comp.lang.delphi
Titolo: Delphi e le API di Windows

Sono nuovo della programmazione Delphi e quindi volevo sapere come
utilizzare le API di Windows (che con VisualBasic utilizzavo di frequente)
con questo stupendo linguaggio di programmazione.
Grazie a tutti.
Lorenzo

Lorenzo Villani wrote:

La maggior parte delle api vengono importate tramite la unit windows.
Ecco un esempio di importazione della funzione sleep.
procedure Sleep(milliseconds: Cardinal); stdcall; external
'kernel32.dll' name 'Sleep';
Saluti.
-- 
I'am what I'am, I do what I can

 utilizzare le API di Windows (che con VisualBasic utilizzavo di 
frequente)
in Delphi puoi utilizzare le API in maniera piuttosto semplice, visto che 
centinaia (se non migliaia) di funzioni (le API sono tutte funzioni -e non 
procedure- ma smentitemi se sbaglio) di sistema sono già importate da 
Windows.pas, come ti ha già accennato Setec Astronomy.
Per cominciare, guardati sulla documentazione la direttiva external 
("External declarations").
Essendo tutte quelle di cui protresti aver bisogno, già importate da 
Windows.pas (unit usata di default per i nuovi progetti), non avrai mai 
alcun bisogno di scrivere dichiarazioni nel tuo codice del tipo:
function GetShortPathName(lpszLongPath: PChar; lpszShortPath: PChar;
  cchBuffer: DWORD): DWORD; stdcall;
Per quanto riguarda i tipi, come DWORD, dovrebbero essere dei tipi IDL, 
cioè dei tipi standard di Windows (anche qui smentitemi se sbaglio).
La difficoltà iniziale è capire come un tipo standard di Windows debba 
essere tradotto in un tipo Delphi, ma per quanto riguarda le dichiarazioni 
questo problema è appunto già risolto da Windows.pas. Altri problemi ci 
potrebbero essere nell'uso di questi tipi (alle volte sono puntatori a 
record, altre volte sono più semplicemente dei puntatori a caratteri o 
normali Integer).
La direttiva stdcall è richiesta perchè Delphi di default usa un sistema 
di passaggio di parametri diverso da (e credo più efficente di) Windows. 
Vedi l'help "Calling conventions".
In VB invece dovevi ridichiarare ogni volta le API che intendevi usare, se 
non ricordo male.
Ma c'è di più: alcune API particolarmente utili sono state inglobate in 
"funzioni Delphi" (cioè con parametri Pascal). Ce ne sono molte, le prime 
che mi vengono in mente sono DeleteFile o FindFirst/FindNext/FindClose 
(funzioni "wrapper").
Non sono un grande esperto di API, ma se hai problemi specifici posta il 
codice che vediamo di aiutarti.
-- 
Mauro Falzari 
   [ 
http://digilander.libero.it/mauro.falzari
 ]
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)

 utilizzare le API di Windows ...
Se disponi del file pas che le traduce in Pascal metti il nome del file
nelle uses (verifica che il path in cui si trova la unit sia fra quelli
inclusi alla compilazione) ed usi la funzione cosi' come e' importata.
Oltre a windows.pas che ne contiene diverse delle piu' usate spesso si
usa ShellApi (che contiene fra l'altro ShellExecute).
Considera poi che il progetto Jedi e' nato in origine per fornire la
traduzione in (Object) Pascal di _tutti_ gli header W32. Puoi quindi
trovare unit per l'importazione di specifiche dll:
http://www.delphi-jedi.org/
; inoltre, le jcl costituiscono un wrap di
livello piu' alto per molti servizi di sistema, astraendo fra l'altro
dalle specifiche implementazioni (w9x, Nt, 2k...)
http//
sourceforge.net/project/jcl
.
Un esempio di uso di MessageBox (che almeno i pulsanti sono nel locale
di Windows <g>)
uses ...windows...
if windows.MessageBox(Application.Handle,
  PChar('Le fragole sono rosse'#13#10'Il caminetto è acceso'),
  PChar('Qui Radio Londra'),
  MB_ICONEXCLAMATION + MB_OKCANCEL + MB_DEFBUTTON2) = ID_OK then
  windows.Beep(440, 2000)
else windows.Beep(110, 500);
Saluti
Paolo Arosio
-- 
"La dimostrazione dell'esistenza di specie intelligenti nell'universo
 e' che non ci vengono a trovare"