Hi zusammen
Ich habe
hier ein Beispiel für GetDiskFreeSpaceEx gefunden:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var freeCaller, total: Int64;
begin
GetDiskFreeSpaceEx('C:', freeCaller, total, nil);
label1.caption:='Freier Speicher: '+IntToStr(freeCaller)+' Bytes';
label2.caption:='Gesamter Speicher: '+IntToStr(total)+' Bytes';
end;
Das funktioniert einwandfei, wenn ich es so wie gesehen in einen Buttonklick-Event packe. Die Probleme beginnen erst später.
Meine derzeitiger Umsetzungsversuch:
Delphi-Quellcode:
function TPopUpWindow.DedectBiggestFreeSpace: Char;
var i :integer; PopupWindow: TPopupWindow;
begin
PopupWindow := TPopupWindow.Create(Self);
PopupWindow.PopupMode := pmExplicit;
PopupWindow.PopupParent := HomeOfficerFeMain;
PopupWindow.RzPageControl1.ActivePage := PopupWindow.RzPageControl1.Pages[0];
PopUpWindow.Position := poMainFormCenter;
PopUpWindow.GetAllDrives;
end;
function TPopUpWindow.GetAllDrives: TStringDynArray;
var total, freeCaller: int64; i: Integer;
UsedSpace, TotalSpace, DriveLetter,
FreeSpace, Space: String; DrivesArray : TStringDynArray;
begin
DrivesArray := TDirectory.GetLogicalDrives; //Result enthält all Laufwerke, auch die Partitionen
for i:=Low(DrivesArray) to High(DrivesArray) do
begin
DriveLetter := GetOneDrive(DrivesArray[i]);
GetDiskNumbers(DriveLetter);
end;
end;
function TPopUpWindow.GetOneDrive(const Drive: string): string;
{Returns the display name for the drive with the given root path.}
var FI: TSHFileInfo; // info about drive
begin
if ShellAPI.SHGetFileInfo(PChar(Drive), 0, FI, SizeOf(FI),
ShellAPI.SHGFI_DISPLAYNAME ) = 0 then
RaiseLastOSError;
Result := FI.szDisplayName;
end;
Und schliesslich GetDiskNumbers:
Delphi-Quellcode:
procedure TPopUpWindow.GetDiskNumbers(DriveLetter: String);
var freeCaller, total : Int64; Freespace, Totalspace, UsedSpace :String;
begin
GetDiskFreeSpaceEx(PChar(DriveLetter), freeCaller, total, nil);
LbxVolumen.Items.Add('Disk: '+ DriveLetter);
LbxVolumen.Items.Add('Freier Speicher: '+IntToStr(freeCaller)+' Bytes');
LbxVolumen.Items.Add('Gesamter Speicher: '+IntToStr(total)+' Bytes');
LbxVolumen.Items.Add('----');
LbxVolumen.Items.Add('Freier Speicher: ' + FormatFloat('000.00', (freeCaller)/(1024*1024*1024)) + ' GB');
LbxVolumen.Items.Add('Gesamter Speicher: ' + FormatFloat('0.00', (total)/(1024*1024*1024)) + ' GB');
LbxVolumen.Items.Add('--------------------');
end;
Im gegenzug nach dem Beispiel von Delphitreff:
Delphi-Quellcode:
procedure TPopUpWindow.Button1Click(Sender: TObject);
var freeCaller, total: Int64;
begin
GetDiskFreeSpaceEx('C:', freeCaller, total, nil);
label1.caption:='Freier Speicher: '+IntToStr(freeCaller)+' Bytes';
label2.caption:='Gesamter Speicher: '+IntToStr(total)+' Bytes';
end;
Hier ist nichts anders mit Ausnahme der Variablen DriveLetter und der Format-Anweisung. Trotzdem funktioniert mein Code nicht:
Was mache ich falsch? Die Formatumrechnung in Gigabyte ist ziemlich der des Explorers und sogar noch genauer.
Gruss
Delbor