Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Freier-/Belegter Speicher von Laufwerken (https://www.delphipraxis.net/78484-freier-belegter-speicher-von-laufwerken.html)

Tonki 5. Okt 2006 19:36


Freier-/Belegter Speicher von Laufwerken
 
hallo zusammen!

wie der titel schon sagt würd ich gern ein programm bauen was mir den freien und belegten speicher eines laufwerks anzeigt :)
hab natürlich erst mal in der code library nachgeschaut und bin fündig geworden (Link zur Library)!
nun hab ich 2 probleme *grübl*

1.
hab das programm erstmal klein gebaut (was ich damit meine kommt bei frage 2 :) ). also die funktion auf einen button gelegt der mir von Laufwerk C (bootpartition) den speicher anzeigen soll! es kommen da zahlreiche fehlermeldungen das so ziemlich alle befehle nicht deklariert sind, die beim button stehn... nun weiss ich leider nicht wie ich sie deklarieren soll... also als was?
hier mein bisheriger code:
Delphi-Quellcode:
unit SpeicherCheck;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    RadioButton1: TRadioButton;
    Button1: TButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
   
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}
procedure Button1Click(Sender: TObject);
function DiskInfo(dir: String; var total, avail: Int64): Boolean;
begin
  dir := IncludeTrailingPathDelimiter(ExtractFilePath(dir));
  Result := GetDiskFreeSpaceEx(PChar(dir), avail, total, nil);
end;

var
  TotalSpace, AvailSpace: Int64;

procedure TForm2.Button1Click(Sender: TObject);
begin
  DiskInfo('C', TotalSpace, AvailSpace);

  ShowMessage(Format(
  'Gesamt: %.0n Bytes, Frei: %.0n Bytes',
  [1.0 * TotalSpace,
   1.0 * AvailSpace]));
end;



end.
nicht über die radiobuttons wundern das is teil von frage 2 ^^


nun die zweite frage von der ich die ganze zeit schreibe:
wenn ich mit ein bissl hilfe das speicher checken zum laufen bekomme würd ich gern auch andere laufwerke, also nich nur C sondern auch die andern anzeigen lassen! aber weil ich von diesem "für jede funktion mach ich jetz nen button weil ichs nich besser kann" weg will und was neues probiern mag hab ich mir gedacht das ich mir da ein paar radiobuttons reinsetze und nur einen button benutze! also für jedes laufwerk im rechner einen radiobutton den man auswählen kann und dann untendrunter nur einen einzigen button mit dem man dann den speichercheck des laufwerks was man durch die radiobuttons ausgewählt hat durchführt! vom prinzip her ist es klar -> ich muss den radio buttons sagen das sie bei dieser stelle hier
Delphi-Quellcode:
begin
  DiskInfo('C', TotalSpace, AvailSpace);

  ShowMessage(Format(
  'Gesamt: %.0n Bytes, Frei: %.0n Bytes',
  [1.0 * TotalSpace,
   1.0 * AvailSpace]));
end;
den laufwerksbuchstaben einfach ändern! nunja das is leichter gesagt als getahn vor allem weil ich auch nich weiss wonach ich suchen könnte um das in der code library zu finden... deshalb bin ich da leicht überfordert *schäm* :oops: hat da jemand vll eine lösung für mich? mag wie gesagt nich immer alles mit buttons machen...

liebe grüße

Tonki

Sunlight7 5. Okt 2006 19:40

Re: Freier-/Belegter Speicher von Laufwerken
 
Hallo,

das was mal so ohne hinzusehehen auffällt:

Delphi-Quellcode:
procedure Button1Click(Sender: TObject);
Das Ding gehört raus, dann sollten mal ein paar Fehler weniger sein.

Edit: Die Funktion DiskInfo geht einfacher:
Delphi-Quellcode:
function DiskInfo(Drive:Char; var total, avail: Int64): Boolean;
begin
  Result:=GetDiskFreeSpaceEx(PChar(Drive+':\'), avail, total, nil);
end;
Dann kannst Du (2. Frage) einfach darauf zugreifen:

Delphi-Quellcode:
var c:Char;
begin
   For c:='c' to 'z' do begin
      // Hier noch prüfen, ob Laufwerk eine Festplatte ist
      DiskInfo(c, total, avail);
      ...
   end;
end;
Edit2: Da sehe ich nochwas:
"var TotalSpace, AvailSpace: Int64;" gehört gleich nach
"procedure TForm2.Button1Click(Sender: TObject);"
Dann klappts auch mit dem Nachbarn ähm Compiler.

Tonki 5. Okt 2006 20:03

Re: Freier-/Belegter Speicher von Laufwerken
 
huhu!
erstmal vielen dank für die schnelle antwort!!! :)

und hab gleich die nächste frage ^^
bleibt der befehl für den button gleich oder muss ich den dann auch ändern? so wie ich das sehe hast du ja nur die funktion oben geändert bzw verkürzt *nachdenk* :)


edit 1:
hm den code für meine 2. frage versteh ich leider garnicht... ich kann mir denken das er hinter die radiobuttons geschrieben werden muss und das ich für die variable 'z' die du im beispiel angegeben hast eben den laufwerknamen angeben muss denn ich haben will! aber der code ergibt für mich irgendwie keinen sinn bzw ich versteh nix von dem was da steht :shock:

mein code für den radiobutton sieht jetzt so aus:
Delphi-Quellcode:
procedure TForm2.RadioButton1Click(Sender: TObject);
var c:Char;
begin
   For c:='c' to 'c' do begin
      // Hier noch prüfen, ob Laufwerk eine Festplatte ist
      DiskInfo(c, total, avail);
      ...
   end;
end;
bekomm da einige fehlermeldungen...
unter anderem bei: total avail und bei ...

Sunlight7 5. Okt 2006 20:20

Re: Freier-/Belegter Speicher von Laufwerken
 
Delphi-Quellcode:
procedure TForm2.RadioButton1Click(Sender: TObject);
   var c:Char;
       total, avail:Int64; <- Das hier hast Du vergessen
begin
   For c:='c' to 'z' do begin
      // Hier noch prüfen, ob Laufwerk eine Festplatte ist
      DiskInfo(c, total, avail);
      ListBox1.Items.Add('Freier Speicher auf Laufwerk '+c+': '+IntToStr(avail div 1024 div 1024)+' MB))'; // Beispiel
   end;
end;
Der aufruf von DiskInfo funktioniert jetzt nur mehr mit einem Buchstaben (Char) im 1. Parameter.
"For c:='c' to 'z' do begin" bewirkt, das alle Laufwerke von C: bis Z: abgefragt werden.

Tonki 5. Okt 2006 20:29

Re: Freier-/Belegter Speicher von Laufwerken
 
langsam glaub ich irgendwie das mein IQ der eines brotes ist ^^ habs immernoch net gepeilt und es funktioniert auch immernoch nich...

da kommt mir dann noch die frage -> so wie ich das jetz verstanden hab bräuchte ich dann nur einen radiobutton wenn er alle laufwerke von c bis z abfragt aber ich hätte da gern sowas wie eine auswahl :) also das ein radiobutton die variable C um einen anderen laufwerksbuchstaben ersetzt und nich alle abtastet... dafür bräuchte ich ja keinen radiobutton das könnt ich in den standartbutton mit einbauen das er das machen soll :)

kann aber natürlich auch sein das ich das (wie immer -.-*) falsch verstanden hab in dem fall hab ich nix gesagt ^^

mein code sieht jetzt wie folgt aus:
Delphi-Quellcode:
unit SpeicherCheck;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    RadioButton1: TRadioButton;
    Button1: TButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    procedure Button1Click(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
   
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

function DiskInfo(Drive:Char; var total, avail: Int64): Boolean;
begin
  Result:=GetDiskFreeSpaceEx(PChar(Drive+':\'), avail, total, nil);
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  TotalSpace, AvailSpace: Int64;
begin
  DiskInfo('C', TotalSpace, AvailSpace);

  ShowMessage(Format(
  'Gesamt: %.0n Bytes, Frei: %.0n Bytes',
  [1.0 * TotalSpace,
   1.0 * AvailSpace]));
end;

procedure TForm2.RadioButton1Click(Sender: TObject);
var c:Char;
total, avail:Int64;
begin
   For c:='c' to 'z' do begin
      // Hier noch prüfen, ob Laufwerk eine Festplatte ist
      DiskInfo(c, total, avail);
      ListBox1.Items.Add('Freier Speicher auf Laufwerk '+c+': '+IntToStr(avail div 1024 div 1024)+' MB))'; //
   end;
end;

end.
im radiobutton sind wieder nahezu alle parameter nicht deklariert =(

Sunlight7 5. Okt 2006 20:48

Re: Freier-/Belegter Speicher von Laufwerken
 
Zitat:

Zitat von Tonki
im radiobutton sind wieder nahezu alle parameter nicht deklariert =(

Welche, die ListBox?
Das war nur ein Beispiel, damit das funkt mußt Du eine ListBox ins Formular setzten.

Das geht auf meinem IQ :mrgreen:
Delphi-Quellcode:
ListBox1.Items.Add('Freier Speicher auf Laufwerk '+c+': '+IntToStr(avail div 1024 div 1024)+' MB))'; // Beispiel
So ist es richtig, Code nicht probiert, nur so getippt und vertippt :oops:
Delphi-Quellcode:
ListBox1.Items.Add('Freier Speicher auf Laufwerk '+c+': '+IntToStr(avail div 1024 div 1024)+' MB')); // Beispiel
Nen RadioButton brauchts nicht, wenn Du mehr auswahl haben willst nimm ne TCheckBox!

Tonki 5. Okt 2006 21:18

Re: Freier-/Belegter Speicher von Laufwerken
 
ok habs geändert und es kommen auch keine fehlermeldungen mehr! :)
nur noch ne frage ^^ wofür is die listbox da? sollte da was drin stehn? das ergebnis kommt immernoch in nem extra fenster

edit:
ah ok habs selbst heraus gefunden :) jetz wirds in der listbox angezeigt!
gibts noch ne möglichkeit nur die laufwerke anzeigen zu lassen die wirklich vorhanden sind? mir wird jetz nämlich bei jedemlaufwerk das net vorhanden is angezeigt das 15120MB frei sind... kann eigentlich ja net sein weils die laufwerke nich gibt ^^ das find ich etwas unschön... ich könnt natürlich einfach in code anstatt von c-z von c-h anzeigen lassen dann hätte sich das aber vll hat ja irgendjemand mehr laufwerke und dann isses wieder zu ungenau also müsste es ja da eine möglichkeit geben nur die vorhandenen anzeigen zu lassen :) aber da meine eigentliche frage jetzt beantwortet ist mach ich den thread schonmal als beantwortet :) der rest is noch ein bissl verschönerung ^^

Sunlight7 5. Okt 2006 21:21

Re: Freier-/Belegter Speicher von Laufwerken
 
Zitat:

//Beispiel
Das war nur ein Beispiel, wie es verwendet werden könnte. :zwinker:
Weil ich nicht genau wußte, was du vor hast.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz