![]() |
AW: Laufwerkgrössen ermitteln
Liste der Anhänge anzeigen (Anzahl: 3)
Hi zusammen
Inzwischen hab ich auch noch weiter gesucht, auch in Sachen Bit&Byte-Umrechnung und versucht, mit der gefundenen Demo auf 'einen grünen Zweig' zu kommen. Was ich dabei gefunden habe: GetDiskFreeSpace ist offenbar veraltet. Zumindest hab ich im Embarcadero-Wikki vergebens danach gesucht. Hingegen hab ich eine Bool-Funktion ![]() Mal zum Vergleich die gefundene Anwendung und die Anzeige des Explorers: Anhang 54541 Anhang 54540 Der Code zu der Ausgabe dieses Programmes:
Delphi-Quellcode:
...und ShowMessage:
GetDiskFreeSpace(PChar(drv), SectPerCls, BytesPerCls, FreeCls, TotCls);
Showmessage( 'SectPerCls := ' + IntToStr(SectPerCls) + sLineBreak + 'BytesPerCls := ' + IntToStr(BytesPerCls) + sLineBreak + ' FreeCls := ' + IntToStr(FreeCls) + sLineBreak + ' TotCls := ' + IntToStr(TotCls)); Label11.Caption := FormatFloat('0.00', (SectPerCls * BytesPerCls * TotCls)/(1024*1024*1024)) + ' GB'; Label12.Caption := FormatFloat('0.00', (SectPerCls * BytesPerCls * FreeCls)/(1024*1024*1024)) + ' GB'; Anhang 54542 Gruss Delbor |
AW: Laufwerkgrössen ermitteln
Das sucht man auch nicht im Delphi, sondern beim Hersteller.
![]() ![]() Und wenn eine API noch nicht im Delphi drin ist, dann entweder einen fremden API-Header suchen (z.B. JEDI) oder einfach selbermachen ... steht ja beim Hersteller, wie es aussehen muß. (braucht man nur noch von C++ nach Pascal/Delphi zu übersetzen) |
AW: Laufwerkgrössen ermitteln
Zitat:
|
AW: Laufwerkgrössen ermitteln
|
AW: Laufwerkgrössen ermitteln
Zitat:
Ich würde ja denken "wenn es fehlt, dann berechnen" :stupid: Und bei den Schweizern .... Warum vergessen eigentlich immer alle die Rückgabewerte von Funktionen auszuwerten? |
AW: Laufwerkgrössen ermitteln
Zitat:
Delphi-Quellcode:
Ist doch drin - oder?
procedure TForm1.Button1Click(Sender: TObject);
var free_size, total_size: Int64; begin if GetDiskSize(DriveComboBox1.Drive, free_size, total_size) then ShowMessage('free space =' + IntToStr(free_size) + #13 + 'total size=' + IntToStr(total_size)) else ShowMessage('No disk in drive!'); end; (Abgesehen davon, dass ich dieses Beispiel nicht wirklich "schön" finde) |
AW: Laufwerkgrössen ermitteln
ähhhhmmm nein?
Zitat:
|
AW: Laufwerkgrössen ermitteln
Zitat:
|
AW: Laufwerkgrössen ermitteln
Zitat:
"i" iteriert über die Elemente des Arrays, und diesen Index übergibst Du an DiskFree(i):
Delphi-Quellcode:
Du musst aber die Nummer des Laufwerks übergeben, wobei 1=A, 2=B usw. bedeutet. Also den Inhalt des Arrayelements an der Stelle "i", und nicht "i" selber:
Result := TDirectory.GetLogicalDrives;
for i:=Low(Result) to High(Result) do begin Result[i] := GetOneDrive(Result[i]); space := DiskFree(i); <-- falscher Parameter!
Delphi-Quellcode:
.
LDrive := Ord(Result[i][1]) - Ord('A') + 1;
space := DiskFree(LDrive); Oder aber direkt GetDiskFreeSpaceEx(Result[i], Space, ...) verwenden. Diese API-Funktion arbeitet direkt mit Laufwerksbuchstaben bzw. Ordnernamen. |
AW: Laufwerkgrössen ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Hi zusammen
Ich habe ![]()
Delphi-Quellcode:
Das funktioniert einwandfei, wenn ich es so wie gesehen in einen Buttonklick-Event packe. Die Probleme beginnen erst später.
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; Meine derzeitiger Umsetzungsversuch:
Delphi-Quellcode:
Und schliesslich GetDiskNumbers:
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;
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:
Hier ist nichts anders mit Ausnahme der Variablen DriveLetter und der Format-Anweisung. Trotzdem funktioniert mein Code nicht:
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; Anhang 54568 Was mache ich falsch? Die Formatumrechnung in Gigabyte ist ziemlich der des Explorers und sogar noch genauer. Gruss Delbor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz