Plusieurs petites questions et demande de fonction sur Delphi - Delphi/Pascal - Programmation
Marsh Posté le 10-12-2002 à 10:06:11
1. chaine3 := chaine1 + chaine2;
2. ExtractFilePath(Application.ExeName) + 'database.mdb'
3.
|
4. je sais plus GetVolumeInformation probablement
5. Y a GetDriveType qui donne le type, doit y avoir une fonction qui liste les lecteurs existants aussi
6. Je mets un TADOConnection, je lui spécifie le ConnecionString à utiliser, puis j'y lie un TADOQuery, ça suffit
7. Application.ProcessMessages; et Application.HandleMessage; (le premier bouffera 100% de CPU dans une boucle où y a que ça, mais le second sera peut-être moins "temps réel", faut tester les deux donc)
Marsh Posté le 10-12-2002 à 10:40:15
exact pour le 4... la preuve par google
http://greatis.com/delphi/drives-cdlabel.html
Marsh Posté le 10-12-2002 à 13:53:28
Ooouhhh... vous avez combien d'années d'expériences pour rire ? Vous êtes vraiment trop bon. ( Quel âge aussi ? )
Marsh Posté le 10-12-2002 à 14:24:54
22 ans, j'ai découvert Delphi à l'école il y a presque 3 ans
Avant ça j'avais déjà un peu utilisé C++Builder et appris le C/C++ avant.
Marsh Posté le 10-12-2002 à 15:46:39
On ne peut pas faire d'array pour une fonction ? Ça me serait grandement utile...
function GetCDLetter: array[0..25] of string; stdcall;
var
N: Byte;
Drv: string;
Drives: set of 0..25;
begin
Integer(Drives):=GetLogicalDrives;
for N:=0 to 25 do
if N in Drives then
begin
Drv:=Char(N+Ord('A')+':\';
if(GetDriveType(PChar(Drv))=5) then
begin
GetCDLetter[n] := Drv;
// Result:=Drv;
// Exit;
end;
end;
end;
function GetCDLabel(Drive: string): string; stdcall;
var
VolumeName: array[0..255] of Char;
FileSystemType: array[0..255] of Char;
SerialNum: DWORD;
MaxFilenameLength: DWORD;
Flags: DWORD;
begin
if (GetVolumeInformation(
PChar(Drive),
VolumeName,
256,
@SerialNum,
MaxFilenameLength,
Flags,
FileSystemType,
256)) then Result:=VolumeName
else Result:='No CD Present';
end;
Marsh Posté le 10-12-2002 à 15:47:22
On ne peut pas faire d'array pour une fonction ? Ça me serait grandement utile...
function GetCDLetter: array[0..25] of string; stdcall;
var
N: Byte;
Drv: string;
Drives: set of 0..25;
begin
Integer(Drives):=GetLogicalDrives;
for N:=0 to 25 do
if N in Drives then
begin
Drv:=Char(N+Ord('A')+':\';
if(GetDriveType(PChar(Drv))=5) then
begin
GetCDLetter[n] := Drv
// Result:=Drv;
// Exit;
end;
end;
end;
function GetCDLabel(Drive: string): string; stdcall;
var
VolumeName: array[0..255] of Char;
FileSystemType: array[0..255] of Char;
SerialNum: DWORD;
MaxFilenameLength: DWORD;
Flags: DWORD;
begin
if (GetVolumeInformation(
PChar(Drive),
VolumeName,
256,
@SerialNum,
MaxFilenameLength,
Flags,
FileSystemType,
256)) then Result:=VolumeName
else Result:='No CD Present';
end;
Marsh Posté le 10-12-2002 à 15:51:14
quel est l'intérêt d'un array de string pour stocker 1 lettre à chaque fois ?
je capte pas ce que tu veux faire en fait...
si tu veux la liste des lettres au début de la fonction tu mets Result := '';
puis à la place de
if(GetDriveType(PChar(Drv))=5) then
begin
Result := Drv;
Exit;
end;
tu mets
if(GetDriveType(PChar(Drv))=5) then
begin
Result := Result + Drv;
end;
Marsh Posté le 10-12-2002 à 15:52:42
Exemple : Label1.Caption:=GetCDLabel(GetCDLetter());
Je ne reçois que les informations du premier lecteur de CD. J'aimerais pouvoir 'tous' les voir...
Marsh Posté le 10-12-2002 à 15:59:48
antp a écrit : quel est l'intérêt d'un array de string pour stocker 1 lettre à chaque fois ? |
Euh non. Drv sera utilisé pour la prochaine boucle et on aura une donnée erronée. Finalement tout ce que je vais reçevoir c'est 'No Cd Present'
Marsh Posté le 10-12-2002 à 16:01:25
bhen oui mais bon après c'est à toi à appeler GetCDLabel pour chacune des lettre contenues dans la chaîne renvoyée par GetCDLetter
Marsh Posté le 10-12-2002 à 07:51:23
Je me pose certaines questions sur Delphi... vous pouvez surement m'aider !
1. Comment on concatène 2 chaînes de caractères ? ( strcat c'est dla belle merdouille qui fonctionne avec des PChar )
2. Pour linker une base de données... y'aurait pas un moyen de faire comme en VB : application.path & 'database.mdb'; ?
3. Comment on fait pour faire une ConnexionString pour une base de données avec ça ?
???
4. Comment savoir le nom (label ) du CD dans le lecteur ?
5. Comment détecter les lecteurs de CD-Rom ?
6. Si je veux faire des requêtes SQL à ma BD, j'ai seulement besoin d'un ADOQuery ? ( En spécifiant la ConnexionString dans le code si je peux y arriver... )
7. Il y a un équivalent à "DoEvent" ?