![]() |
Re: Icon - Symbol von Dateityp ermitteln (Speicherort)
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:
Und auch krieg ich die Daten aus dem Array in kein Stream gepackt :shock:
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;
Delphi-Quellcode:
Der Text ist unheimlich kurz und besteht nur aus nen 12 Sonderzeichen obwohl mehr drin ist. :wall:
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; |
Re: Icon - Symbol von Dateityp ermitteln (Speicherort)
ist ImageList1 ListView1.SmallIcons zugewiesen?
|
Re: Icon - Symbol von Dateityp ermitteln (Speicherort)
Zitat:
Delphi-Quellcode:
ListView1.SmallIcons existiert nicht :?:
ListItem.ImageIndex := ImageList1.AddIcon(Icon);
|
Re: Icon - Symbol von Dateityp ermitteln (Speicherort)
Guck mal im Objektinspektor, da kannst du das wunderbar zuweisen.
|
Re: Icon - Symbol von Dateityp ermitteln (Speicherort)
Ich hab da mal n fetzen Code für dich, den ich vor ca. 5 Jahren mal gefunden hab. Er zwar nicht sehr gut, aber er funktioniert (bei mir ;-)):
Diese Funktion im FormCreate-Event aufrufen:
Delphi-Quellcode:
Und dann einfach einlesen:
procedure Createimages;
var SysIL : uint; SFI : TSHFileInfo; begin LargeImages := TImageList.Create(MainForm); SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_LARGEICON); if SysIL <> 0 then begin LargeImages.Handle := SysIL; LargeImages.ShareImages := TRUE; end; SmallImages := TImageList.Create(MainForm); SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_SMALLICON); if SysIL <> 0 then begin SmallImages.Handle := SysIL; SmallImages.ShareImages := TRUE; end; MainForm.ListView.LargeImages:=LargeImages; MainForm.ListView.SmallImages:=SmallImages; end;
Delphi-Quellcode:
Wenn du das hast, musst du einfach noch SHGetFileInfo anpassen (nur die Extension und ich glaub, du musst noch einen Parameter am schluss mir OR hinzufügen)
procedure VerzeichnisEinlesen(VerzName:string);
var NewItem : TListItem; Info : TSHFileInfo; SR : TSearchRec; begin MainForm.ListView.Items.BeginUpdate; if VerzName[length(VerzName)]<>'\' then VerzName:=VerzName+'\'; with MainForm do begin ListView.Items.Clear; if FindFirst(VerzName+'*.*',faAnyFile,SR)=0 then begin repeat if (length(SR.Name)>0) and (SR.Name[1]<>'.') then begin NewItem:=ListView.Items.Add; NewItem.Caption:=SR.Name; SHGetFileInfo(PChar(VerzName+SR.Name),0,Info,SizeOf(TSHFileInfo),SHGFI_SYSIconIndex or SHGFI_TYPENAME); NewItem.ImageIndex:=Info.IIcon; NewItem.SubItems.Add(Info.szTypeName); end; until FindNext(SR)<>0; FindClose(SR); end; end; MainForm.ListView.Items.EndUpdate; end; |
Re: Icon - Symbol von Dateityp ermitteln (Speicherort)
Zitat:
lg LordPsychoter |
Re: Icon - Symbol von Dateityp ermitteln (Speicherort)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz