Einzelnen Beitrag anzeigen

-Lucky-

Registriert seit: 4. Mai 2008
28 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Icon - Symbol von Dateityp ermitteln (Speicherort)

  Alt 14. Mai 2008, 12: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) + ' Belse
    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.
  Mit Zitat antworten Zitat