Autor Beitrag
hansg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

Win XP Professional SP3, Vista Ultimate 32 SP1
Delphi 6 Professional
BeitragVerfasst: Sa 25.01.03 10:27 
Hallo,
wie kann ich mit dem Befehl Diskfree von dem gerade aktiven Laufwerk einer DriveCombobox den freien Speicherplatz anzeigen lassen?

_________________
Gruß Hans
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Sa 25.01.03 11:20 
eine drive combobox gibt dir in einer ihrer eigenschaften den ausgewähten LW buchstaben zurück. mach einfach in das onchange ereignis der chombobox den code rein, der dien buchstaben abfragt und dann z.b. in einem label die grösse des LWs ausspuckt !

_________________
In the beginning was the word.
And the word was content-type: text/plain.
hansg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

Win XP Professional SP3, Vista Ultimate 32 SP1
Delphi 6 Professional
BeitragVerfasst: Sa 25.01.03 16:25 
Hallo,
wie mache ich das am besten?
Laut Hilfe liefert DiskFree die Anzahl der freien Bytes auf dem mit Drive angegebenen Laufwerk (0 = aktuelles Laufwerk, 1 = A, 2 = B usw.).
Wie bekomme ich meine Laufwerkbuchstaben (A-Z) entsprechend für die Auswertung gewandelt).

_________________
Gruß Hans
Brueggendiek
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: Sa 25.01.03 18:16 
Hallo Hans!

so:
ausblenden Quelltext
1:
2:
3:
4:
5:
function LaufwerkNummer(Laufwerk: Char): Byte;
begin
  Laufwerk := Upcase(Laufwerk);
  Result := Ord(laufwerk) - Ord('A') + 1;
end;


Gruß

Dietmar Brüggendiek
hansg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

Win XP Professional SP3, Vista Ultimate 32 SP1
Delphi 6 Professional
BeitragVerfasst: Sa 25.01.03 18:55 
Hallo Brueggendiek,

danke für den Code.
Wie übergebe ich den LW Buchstaben bzw. wie kann ich das Ergebnis an
Diskfree übergeben?

_________________
Gruß Hans
Brueggendiek
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: So 26.01.03 12:14 
Hallo Hals!

ausblenden Quelltext
1:
FreierPlatz := DiskFree(LaufwerkNummer('C'));					

bzw. wenn das in einer DriveComboBox liegt:
ausblenden Quelltext
1:
2:
3:
var Box:tDriveComboBox;
...
FreierPlatz := DiskFree(Box.Drive);


Wenn Du Schwierigkeiten hat, Prozeduren/Funktionen und Parameterübergabe anzuwenden, solltest Du vielleicht mal ein gutes Grundlagenbuch lesen oder ein paar Tutorials durcharbeiten!

Es gibt heute leider ein Problem: Borland hatte mal eine kostenlose Personal-Version von Delphi 6 zm Download - und das wurde auch auf Zeitschriften-CDs verteilt. Jetzt haben viele Delphi, aber von Programmiergrundlagen wenig Ahnung.
Dazu kommt, daß Programmieren unter Windows generell viel aufwendiger ist als damals unter DOS - Windows zwingt zu objektorientierter Programmierung, so daß der Einstieg schwerer wird. Das berühmte erste Programm sah unter DOS so aus:
ausblenden Quelltext
1:
2:
3:
begin
  WriteLn('Hallo Welt');
end.

Unter Windows plage ich mich erst mal mit der Fenster-Oberfläche herum - wer schreibt schon Konsolen-Anwendungen?

Gruß

Dietmar Brüggendiek
hansg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

Win XP Professional SP3, Vista Ultimate 32 SP1
Delphi 6 Professional
BeitragVerfasst: So 26.01.03 13:02 
Hallo,
danke für den Tip habe mal in mein Delphi5 Buch nachgelesen.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.DriveComboBox1Change(Sender: TObject);
Var
s  : String[255];
begin
  s:=Uppercase(DriveCombobox1.Drive);
  label1.Caption:=inttostr(diskfree(ord(s[1])-64));           // Bytes
  label2.Caption:=inttostr(diskfree(ord(s[1])-64) div 1024);  // MB
end;


Es funktioniert zwar, aber vom abtippen lernt man aber nichts.

_________________
Gruß Hans
Brueggendiek
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: So 26.01.03 13:55 
Hallo!

hansg hat folgendes geschrieben:
Hallo,
danke für den Tip habe mal in mein Delphi5 Buch nachgelesen.
ausblenden Quelltext
1:
2:
s  : String[255];
  s:=Uppercase(DriveCombobox1.Drive);


Da hat der Autor aber mit der Beißzange programmiert! tDriveComboBox.Drive ist ein Char, er hätte s auch als Char deklarieren können.

Meine Rechnung ist übrigens im Prinzip dasselbe, nur daß ich statt einer numerischen Konstante (64) den numerischen Wert des Buchstabens 'A' eingesetzt und die 1 addiert habe.

Das Ganze stammt noch von CP/M (Vorläufer von MS-DOS) - da war es so, daß die Routinen einen numerischen Laufwerkswert erwarteten. Peinlicherweise gab es Routinen, die das aktuelle Laufwerk (Wert=0) bearbeiten konnten und für die Laufwerke A=1, B=2 usw. erwarteten, und Routinen, die kein aktuelles Laufwerk kannten und A=0, B=1 usw. erwarteten. Erleichtert die Umrechnung natürlich ungemein :mrgreen:
Einige der Routinen wurden bei Turbo-Pascal/Delphi von CP/M über DOS nach Windows mitgeschleppt - DiskFree gehört dazu und die 'hakelige' Laufwerksübergabe wurde aus Kompatibilitätsgründen (Übernahme alter Sources) nicht modernisiert.

Übrigens hatte man unter DOS noch kein Result, die Zuweisung ging an den Namen der Function und war Write-Only!
Meine Laufwerks-Umrechnung (aus der ich den geposteten Code entnommen habe) hat einen Boolean-Parameter für Berücksichtigen des aktuellen Laufwerks und ist noch mit 2 Rechnungen für beide Fälle versehen, heute kann man nach dem Umrechnen auf der Basis A=0 noch mit einem bedingten "Inc(Result)" arbeiten.

Obwohl DiskFree uralt ist, ist das Ergebnis ein Int64 und der Wert auch bei Freiplatz über 2GB korrekt - die Windows-API-Funktion (GetDiskFreeSpace) liefert max. 2GB (viele Installationsprogramme melden max. 2GB freien Platz!) - bei Borland hat man offensichtlich aufgepasst (D5 Standard) und den Nachfolger (GetDiskFreeSpaceEx) verwendet.

Gruß

Dietmar Brüggendiek