Registriert seit: 4. Mai 2008
28 Beiträge
Delphi 7 Enterprise
|
Re: Icon - Symbol von Dateityp ermitteln (Speicherort)
14. Mai 2008, 13:10
Ich krieg die Krise. Jetzt habe ich schon x Stunden in das kleine Problem gesteckt, es funzt nicht. Es werden einfach keine Icons angezeigt!
Delphi-Quellcode:
procedure Tver.BitBtn18Click(Sender: TObject);
var name,inhalt,bytes,komma: string;
groesse,i,symbol: integer;
Icon: TIcon;
FileInfo: SHFileInfo;
ListItem: TListItem;
begin
if dateinummer >= 500 then ShowMessage('Soviele Dateien können nicht verwaltet werden. Benutzen Sie ein weiteres Bild oder löschen Sie einige Dateien aus der Liste!') else
begin
dateinummer := dateinummer + 1;
if OpenDialog3.Execute = true then
try
bytes := '';
name := OpenDialog3.FileName;
inhalt := FileToString(name);
dateien[1,dateinummer] := ExtractFileName(name);
dateien[2,dateinummer] := inhalt;
SHGetFileInfo(PChar(ExtractFileExt(name)), FILE_ATTRIBUTE_NORMAL, FileInfo,
SizeOf(TSHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON or
SHGFI_ICON or SHGFI_USEFILEATTRIBUTES);
Icon := TIcon.Create;
ListItem := Listview1.Items.Add;
try
Icon.Handle := FileInfo.hIcon;
ListItem.ImageIndex := ImageList1.AddIcon(Icon);
finally
FreeAndNil(Icon);
end;
ListItem.Caption := ExtractFileName(name);
// ListView1.Items.Add.Caption := ExtractFileName(name);
groesse := length(dateien[2,dateinummer]);
i := -1;
i := length(IntToStr(groesse));
// sprache abfragen!!! -> Die Amis haben nen andres Komma!!!
// überprüfen ob datei größer als diese 12 * 3 MB ist, um den Arbeitsspeicher zu schützen.
komma := ',';
if (i < 3) and (i > -1) then bytes := IntToStr(groesse) + ' B' else
if i < 6 then
begin
bytes := IntToStr(groesse div 1000);
bytes := bytes + komma + IntToStr(groesse mod 1000)[1] + ' KB';
end else if i >= 6 then
begin
bytes := IntToStr(groesse div 1000000);
bytes := bytes + komma + IntToStr(groesse mod 1000000)[1] + ' MB';
end;
ListItem.SubItems.Add(bytes);
ListItem.SubItems.Add('lol');
ListItem.SubItems.Add(name);
ListItem.Checked := true;
except
ShowMessage('Es ist ein Fehler aufgetreten. Die Datei konnte nicht geladen werden.');
end;
end;
end;
Und auch krieg ich die Daten aus dem Array in kein Stream gepackt
Delphi-Quellcode:
procedure Tver.Button4Click(Sender: TObject);
var strom: TMemoryStream;
i: integer;
text: string;
begin
// dateinummer = anzahl der dateien beginnend mit 1
strom := TMemoryStream.Create;
strom.Write(dateinummer,SizeOf(dateinummer));
for i:= 1 to dateinummer do
begin
text := 'Jetzt will ichs wissen!';
strom.Write(dateien[1,i],sizeof(dateien[1,i]));
strom.Write(dateien[2,i],sizeof(dateien[2,i]));
strom.Write(text,sizeof(text));
end;
text := '';
text := memoryToString(strom);
ShowMessage(IntToStr(length(text)));
strom.Free;
end;
Der Text ist unheimlich kurz und besteht nur aus nen 12 Sonderzeichen obwohl mehr drin ist.
|
|
Zitat
|