Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Speichergröße von Datenträgern auslesen (https://www.delphipraxis.net/113984-speichergroesse-von-datentraegern-auslesen.html)

himitsu 17. Mai 2008 21:03

Re: Speichergröße von Datenträgern auslesen
 
Zitat:

Meldung: 'Format'%12.On' ungültig oder nicht kompatibel mit Argument'. ...
12.0 ... Null (Zahl) und nicht O (Buchstabe)

Zitat:

werden Int-Typen nicht implizit in Float-Typen umgewandelt? Das heißt, Int64 lässt sich problemlos Double verwenden.
Nein, "n" erwartet explizit einen Real-Typ.
Delphi-Quellcode:
Format('%12.0n', [freeSpace / 1])

RWarnecke 17. Mai 2008 21:07

Re: Speichergröße von Datenträgern auslesen
 
Zitat:

Zitat von Luckie
Dann müsste es schon bei der Variablenzuweisung einen Fehler geben.

Das glaube ich nicht ganz. Ich bin der Meinung, dass Ihn das Format ein wenig aus der Bahn schmeißt und er einige Typen durcheinander schmeisst.

@mind87:
Wie sieht denn jetzt Dein Code aus und hast Du da noch Fehler drin ? Wenn ja, welche und was möchtest Du erreichen ?

FAlter 17. Mai 2008 21:11

Re: Speichergröße von Datenträgern auslesen
 
Hi,

das bezog sich nicht auf Format mit %f oder %n oder so, sondern auf Luckies Aussage

Zitat:

Dann müsste es schon bei der Variablenzuweisung einen Fehler geben.
Wegen Zuweisung Int64 --> Double bei

[dqlphi]freeSpace := DiskFree(Ord(s) - 64); [/delphi]

Bei Format ist es etwas anderes. Das meinte ich aber gar nicht.

Mfg
FAlter

mind87 17. Mai 2008 21:13

Re: Speichergröße von Datenträgern auslesen
 
Zitat:

Zitat von RWarnecke
Zitat:

Zitat von Luckie
Dann müsste es schon bei der Variablenzuweisung einen Fehler geben.

Das glaube ich nicht ganz. Ich bin der Meinung, dass Ihn das Format ein wenig aus der Bahn schmeißt und er einige Typen durcheinander schmeisst.

@mind87:
Wie sieht denn jetzt Dein Code aus und hast Du da noch Fehler drin ? Wenn ja, welche und was möchtest Du erreichen ?

Delphi-Quellcode:
procedure TForm1.ComboBox1Change(Sender: TObject);
 var
  freeSpace, totalSpace: double;
  s,drive: Char;
  total:integer;
begin
case combobox1.ItemIndex of
0:
begin
drive:='C';
end;
1:
begin
drive:='D';
end;
2:
begin
drive:='E';
end;
3:
begin
drive:='F';
end;
4:
begin
drive:='G';
end;
5:
begin
drive:='H';
end;
end;
  s:=drive;

  totalSpace:= DiskSize(Ord(s) - 64);
  freeSpace:= DiskFree(Ord(s) - 64);

  Edit_gspeicher.text:= Format('%12.0n', [totalSpace]);
  Edit_fspeicher.text:= Format('%12.0n', [freeSpace]);
  Label6.Caption := IntToStr(Round((totalSpace - freeSpace) / totalSpace * 100)) +
    ' Percent used.';
  total:=round((totalspace-freespace)/totalspace*100);
  progressbar1.position:=total;
end;
Solange ich totalspace und freespace nicht integer setze, funktioniert die Ausgabe mit den Tausenderstellen (%12.0n). Macht doch keine Probleme das ich die in double verwende oder?

mkinzler 17. Mai 2008 21:16

Re: Speichergröße von Datenträgern auslesen
 
Also dein Code ist sehr srtange, warum nicht
Delphi-Quellcode:
totalSpace:= DiskSize( combobox1.ItemIndex +3);
?

RWarnecke 17. Mai 2008 21:19

Re: Speichergröße von Datenträgern auslesen
 
Das sieht doch gut aus, warum möchtest Du jetzt die Werte freespace und totalspace auf Integer setzen ? Zumal Integer ja der falsche Typ wäre. Denn die Funktionen DiskSize und DiskFree aus der Unit SysUtils den Type Int64 zurückgeben. Deshalb geht Integer nicht.

Der Integer geht nur von -2147483648 bis 2147483647. Alles was darüber hinausgeht, muss Du für ganze Zahlen mit Int64 deklarieren.

Ich lege es Dir Nahe, mal in der Online-Hilfe von Delphi nachzulesen, was es für Variablen-Typen gibt.

mind87 17. Mai 2008 21:32

Re: Speichergröße von Datenträgern auslesen
 
Zitat:

Zitat von RWarnecke
Das sieht doch gut aus, warum möchtest Du jetzt die Werte freespace und totalspace auf Integer setzen ? Zumal Integer ja der falsche Typ wäre. Denn die Funktionen DiskSize und DiskFree aus der Unit SysUtils den Type Int64 zurückgeben. Deshalb geht Integer nicht.

Der Integer geht nur von -2147483648 bis 2147483647. Alles was darüber hinausgeht, muss Du für ganze Zahlen mit Int64 deklarieren.

Ich lege es Dir Nahe, mal in der Online-Hilfe von Delphi nachzulesen, was es für Variablen-Typen gibt.

Luckie hatte das eben angedeutet. Von daher war ich mir nicht sicher ob integer oder double bzw. int64.

Danke an alle, für die erstklassige und schnelle Hilfe. Echt klasse :-)

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 Uhr.
Seite 3 von 3     123   

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