System

Grafik

Oberfläche

Multimedia

Dateien

Sonstige

Special:

Guide to Game Developement(eng)

2D vs. 3D: Fight of the Century(eng)

Puzzledesign(eng)

Grundlagen der KI

Weitere Tipps zur KI

Download:
Delphi vs Visual C++

 

Dateien:
Das Windowsverzeichnis erfahren Eine Textdateie auslesen / schreiben
Ein Verzeichnis erstellen/löschen Dateierweiterung ändern
Eine Datei löschen Eine Verknüpfung erstellen
Einzeilige Dateien lesen und schreiben Eine Datei zeilenweise lesen
Nach ausreichend Festplattenplatz sehen Eine Datei patchen
TBitmap Inhalt als BMP-Datei speichern Dateinamen sinnvoll kürzen
2 Bitmaps auf Gleichheit prüfen
2 Textdateien auf Gleichheit prüfen
Erstellungsdatum einer Datei ändern
Feststellen, ob eine Diskette/CD im Laufwerk ist
Dateien in den Papierkorb verschieben
Den Suchen-Dialog aufrufen
Den Aktuellen Programmpfad ermitteln

 

 

 

 

 

 

 

 

Das Windowsverzeichnis finden

procedure myclass.buttonclick(Sender:tobject);
var WinDir:array[0..255]of char;
    i:integer;
begin
 i:=GetWindowsDirectory(WinDir,25); {WinDir is the Windows directory}
  showmessage(WinDir);
end;

 

Ein Verzeichnis erstellen/löschen

mkdir('c:\myapp');       // erstellen
RmDir('C:\MYAPP');  // löschen

 

Nach ausreichend Festplattenplatz sehen

var
   DskSpc : Longint;       // vorhandener Speicher
   MinDSpace : Longint; // benötigter
begin
  MinDSpace:=1024000; // Menge des Benötigtem angeben
  DskSpc:=DiskFree(3); // freien Speicher von C(3) lesen
  If DskSpc < MinDSpace then   //freien mit benötigtem vergleichen
           ShowMessage('Not enough Diskspace');
end;

oder...

frei := DiskFree(ord(laufwerk) - 64); // "laufwerk" ist ein Char-Typ, z.B.'C'

 

Eine Datei löschen

Var
F : File;
begin
AssignFile(F,'C:\MYAPP\MYAPP.EXE');
Erase(F);
end;

 

TBitmap Inhalt als BMP-Datei speichern

Image1.picture.savetofile('Bild.BMP');

 

Ein Editfeld in "Junkfile.txt" hinterlegen

Var
  OutFile : TextFile;
  fname,OutString : string;
begin
  fname:='JUNKFILE.TXT';
  AssignFile(OutFile,fname);
  Rewrite(OutFile);
  OutString:=Edit1.Text;
  Writeln(OutFile,OutString);
  CloseFile(OutFile);
end;

 

Ein Editfeld aus "Junkfile.txt" lesen

Var
  InFile : TextFile;
  fname,InString : string;
begin
  fname:='JUNKFILE.TXT';
  AssignFile(InFile,fname);
  Reset(Infile);
  Readln(InFile,InString);
  Edit1.Text:=InString;
  CloseFile(InFile);
end;

 

Hiermit wird überprüft, ob zwei Bitmaps absolut identisch sind

function istgleich(bm1,bm2:TBitmap):boolean;
var x,y:integer;
p1,p2:PByteArray;
begin
result:=false;
if (bm1.width<>bm2.width)or(bm1.height<>bm2.height)
or(bm1.transparent<>bm2.transparent)      //falls nicht benötigt,löschen
or(bm1.pixelformat<>bm2.pixelformat)then exit;
for x:=0 to bm1.height-1 do begin
p1:=bm1.scanline[x];
p2:=bm2.scanline[x];
for y:=0 to bm1.width-1 do
if p1[y]<>p2[y] then exit;
end;
result:=true;
end;

Und jetzt wird überprüft, ob sie identisch sind

procedure TForm1.Button2Click(Sender: TObject);
var bm1,bm2:TBitmap;
begin
bm1:=TBitmap.create;
bm2:=TBitmap.create;
bm1.loadfromfile('c:\bilder\corel009.bmp');
bm2.loadfromfile('c:\bilder\corel009.bmp');
if istgleich(bm1,bm2) then showmessage('Die Bilder sind gleich');
bm2.loadfromfile('c:\bilder\corel008.bmp');
if not istgleich(bm1,bm2) then showmessage('Die Bilder sind ungleich');
bm2.free;
bm1.free;
end

 

Hiermit wird überprüft, ob zwei Textdateien absolut identisch sind

function VergleicheTextDateien(datei1,datei2:string):string;
var ts1,ts2:TStringlist;
begin
result:='gleich';
ts1:=TStringlist.create;
ts2:=TStringlist.create;
ts1.loadfromfile(datei1);
ts2.loadfromfile(datei2);
if not ts1.equals(ts2) then result:='un'+result;
ts2.free;
ts1.free;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
showmessage('Die Dateien sind '+ VergleicheTextDateien('c:\test1.txt','c:\test2.txt'));
end;

 

Das Erstellungsdatum einer Datei ändern

function zeitsetzen(datei,datumzeit:string):integer;
var
i:integer;
h:Thandle;
begin
i:=DateTimeToFileDate(StrToDateTime(datumzeit));
h:=FileOpen(datei,fmOpenwrite);
result:=FilesetDate(h,i);
FileClose(h);
end;

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
s:='31.12.2000 17:01:15';
if zeitsetzen('c:\autoexec.bat',s)<>0 then showmessage('Fehler aufgetreten!');
end;

 

Feststellen, ob eine Diskette/CD im Laufwerk ist

function DiskInDrive(Laufwerk:Char):Boolean;
var SRec:TSearchRec;
    I:Integer;
begin
  Result:=False;
  {$I-}
    I:=FindFirst(Laufwerk+':\*.*',faAnyFile,SRec);
    FindClose(SRec);
  {$I+}
  Case I Of
    0: Result:=True;
    2,18: Result:=True;
  End;
  DiskInDrive:=Result;
end;

 

Dateien in den Papierkorb verschieben

uses ShellApi,...
function papierkorb(dateien:string):integer;
var sfo:tshfileopstruct;
begin
fillchar(sfo,sizeof(sfo),0);
with sfo do begin
wnd:=application.handle;
wfunc:=fo_delete;
fflags:=fof_noconfirmation or fof_allowundo;
pfrom:=pchar(dateien+#0);
end;
result:=shfileoperation(sfo);
end;

procedure TForm1.Button1Click(Sender: TObject);
var d1,d2,d3,ges:String;
begin
d1:='C:\temp\test1.diz';
d2:='C:\test2.diz';
d3:='C:\test3.diz';
ges:=d1+#0+d2+#0+d3+#0;
papierkorb(ges);
end;

 

Den Suchen-Dialog aufrufen

uses DDEMan,...
procedure SearchInFolder(Folder:string);
begin
  with TDDEClientConv.Create(Form1) do begin
    ConnectMode := ddeManual;
    ServiceApplication := 'Explorer.exe';
    SetLink('Folders', 'AppProperties');
    OpenLink;
    ExecuteMacro(PChar('[FindFolder(, '+Folder+')]'), true);
    CloseLink;
    Free;
  end;
end;

 

Die Dateierweiterung ändern

NewFileName:=ChangeFileExt(FileListBox1.Filename,'.bak');
if not RenameFile(FileListBox1.Filename,NewFilename) then
  ShowMessage('Umbenennung fehlgeschlagen!');

 

Textdateien lesen und schreiben

memo1.Lines.LoadFromFile('test.txt'); // Datei laden
memo1.Lines.SaveToFile('test.txt'); // Datei speichern

 

Um eine Verknüpfung zu erstellen bedarf es schon einer etwas aufwendigeren Procedure.

Sicherlich ist es auch möglich eine bereits existierende Verknüpfung zu nehmen und zu verändern.

Angeblich soll diese Anwendung nicht unter Delphi 4 funktionieren. Aber ich habe es noch nicht ausprobiert

unit Shellink;

interface

uses
Windows, SysUtils, Classes, Menus, ShlObj, Ole2, CommCtrl;

type TShellLinkInfo = record
Error : Boolean;
LinkName : string[255];
Description : string[225];
FileName : string[225];
WorkingDirectory : string[225];
Arguments : string[225];
WindowState : Integer;
HotKey : TShortCut;
IconFileName : string[225];
IconIndex : Integer;
end;

function GetHotKey(AHotKey: Word): TShortCut;
function SetHotKey(AHotKey: TShortCut): Word;
function CreateShellLink(ShellLinkInfo: TShellLinkInfo): Boolean;
function GetShellLinkInfo(LinkName: string): TShellLinkInfo;

implementation

function GetHotKey(AHotKey: Word): TShortCut;
const
Sh: array[Boolean] of TShiftState = ([], [ssShift]);
Ct: array[Boolean] of TShiftState = ([], [ssCtrl]);
Al: array[Boolean] of TShiftState = ([], [ssAlt]);
var
Shift: TShiftState;
begin
Shift := Sh[(Hi(AHotKey) and HOTKEYF_SHIFT = HOTKEYF_SHIFT)]
+ Ct[(Hi(AHotKey) and HOTKEYF_CONTROL = HOTKEYF_CONTROL)]
+ Al[(Hi(AHotKey) and HOTKEYF_ALT = HOTKEYF_ALT)] ;
result := ShortCut(Lo(AHotKey), Shift);
end;

function SetHotKey(AHotKey: TShortCut): Word;
var
Key: Word;
Shift: TShiftState;
begin
ShortCutToKey(AHotKey, Key, Shift);
Key := Swap(Key);
if ssShift in Shift then Key := Key + HOTKEYF_SHIFT;
if ssCtrl in Shift then Key := Key + HOTKEYF_CONTROL;
if ssAlt in Shift then Key := Key + HOTKEYF_ALT;
Key := Swap(Key);
result := Key;
end;

function CreateShellLink(ShellLinkInfo: TShellLinkInfo): Boolean;
var HRes: HResult;
Link: IShellLink;
PerFile: IPersistFile;
str: string;
Buffer: array[0..255] of Char;
HotKey: Word;
Shift: TShiftState;
Size: Integer;
W: PWideChar;

begin
result:=True;

Size:=(Length(ShellLinkInfo.LinkName)+1) * sizeof(WideChar);
GetMem(W, Size);
StringToWideChar(ShellLinkInfo.LinkName, W, Size);

HRes:=CoInitialize(nil);
HRes:=CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IID_IShellLink, Link);
if not Succeeded(HRes) then result:=False;

Link.AddRef;

HRes:=Link.QueryInterface(IID_IPersistFile, PerFile);
if not Succeeded(HRes) then result:=False;

//Beschreibung
StrPCopy(Buffer, ShellLinkInfo.Description);
Link.SetDescription(@Buffer);

//Ziel
StrPCopy(Buffer, ShellLinkInfo.FileName);
Link.SetPath(@Buffer);

//Arbeitsverzeichnis
StrPCopy(Buffer, Copy(ExtractFilePath(ShellLinkInfo.FileName), 1, Length(ExtractFilePath(ShellLinkInfo.FileName))-1));
Link.SetWorkingDirectory(@Buffer);

//Argumente
StrPCopy(Buffer, ShellLinkInfo.Arguments); //übergeben eines Parameterstrings
Link.SetArguments(@Buffer);

//FensterStatus
Link.SetShowCmd(ShellLinkInfo.WindowState); //SW_SHOWNORMAL,SW_SHOWMINNOACTIVE,SW_SHOWMAXIMIZED;

//HotKey
Link.SetHotKey(SetHotKey(ShellLinkInfo.HotKey));

//Icon
StrPCopy(Buffer, ShellLinkInfo.IconFileName);
Link.SetIconLocation(@Buffer, ShellLinkInfo.IconIndex); //Bsp.: 0 = erstes (also das Programmicon) der Resource

HRes:=PerFile.Save(W, False);
if not Succeeded(HRes) then result:=False;

Link.Release;
PerFile.Release;
CoUninitialize;

FreeMem(W, Size);
end;

function GetShellLinkInfo(LinkName: string): TShellLinkInfo;
var HRes: HResult;
Link: IShellLink;
PerFile: IPersistFile;
Buffer: array[0..255] of Char;
IntBuffer: Integer;
WordBuffer: Word;
Size: Integer;
W: PWideChar;
Data: TWin32FindData;

begin
result.Error:=False;

Size:=(Length(LinkName)+1) * sizeof(WideChar); GetMem(W, Size);
StringToWideChar(LinkName, W, Size);

HRes := CoInitialize(nil);
HRes := CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IID_IShellLink, Link);
if not Succeeded(HRes) then result.Error:=True;

HRes:=Link.QueryInterface(IID_IPersistFile, PerFile);
if not Succeeded(HRes) then result.Error:=True;

HRes := PerFile.Load(W, STGM_READ);
if not Succeeded(HRes) then result.Error:=True;

result.LinkName:=LinkName;

//Beschreibung
Link.GetDescription(@Buffer, MAX_PATH-5);
result.Description := StrPas(Buffer);

//Ziel
Link.GetPath(@Buffer, MAX_PATH-5, Data, SLGP_UNCPRIORITY);
result.FileName := StrPas(Buffer);

//Arbeitsverzeichnis
Link.GetWorkingDirectory(@Buffer, MAX_PATH-5);
result.WorkingDirectory := StrPas(Buffer);

//Argumente
Link.GetArguments(@Buffer, MAX_PATH-5);
result.Arguments := StrPas(Buffer);

//FensterStatus
Link.GetShowCmd(IntBuffer); //SW_SHOWNORMAL, SW_SHOWMINNOACTIVE, SW_SHOWMAXIMIZED
result.WindowState := IntBuffer;

//HotKey
Link.GetHotKey(WordBuffer);
result.HotKey := GetHotKey(WordBuffer);

//Icon
Link.GetIconLocation(@Buffer, MAX_PATH-5, IntBuffer);
result.IconFileName := StrPas(Buffer);
result.IconIndex := IntBuffer;

Link.Release;
PerFile.Release;
CoUninitialize;

FreeMem(W, Size);
end;

end.

 

Den Aktuellen Programmpfad ermitteln

Path := ExtractPathFile(ParamStr(0));

 

Eine Datei zeilenweise lesen

Procedure TForm1.Button1Click(Sender: TObject);
Var
FName: TextFile;
S1, S2 : String;
Begin
FName := 'C:\Windows\Win.ini';
Reset(FName);
Readln(FName, S1);
Readln(FName, S2);
Memo1.Lines.Add('One the first line was this text: ' + S1);
Memo1.Lines.Add('One the second line was this text: ' + S2); 
End;

 

Eine Datei patchen(verändern)

procedure TForm1.Button1Click(Sender: TObject);
var
 f: file;
 l: longint;
 datei, altstring, neustring, s: string;
begin
  altstring := 'Windows 95 wird gestartet...';
  neustring := 'Windows 95 stürzt ab...     ';
  datei := 'C:\kopie von io.sys';

  s := altstring;
  assignFile(f, datei);
  reset(f,1);
  for l := 0 to filesize(f)-length(altstring)-1 do
  begin
   Application.ProcessMessages;
   seek(f,l);
   blockread(f,altstring[1],length(altstring));
   if altstring = s then
   begin
    seek(f,l);
    blockwrite(f,neustring[1],length(neustring));
    label1.caption := 'Status: Stelle gefunden und gepatcht!';
   end;
   Application.ProcessMessages;
  end;
  closeFile(f);
end;

 

Einen Dateinamen sinnvoll kürzen
z.B. c:\windows\bureau\boom.wav -> boom.wav

Edit1.Text := ExtractFileName(OpenDialog1.Filename);

Hosted by www.Geocities.ws

1