Einzelnen Beitrag anzeigen

TonyMontana
(Gast)

n/a Beiträge
 
#13

Re: ListView Item Text herausfinden

  Alt 20. Jan 2008, 16:23
Also ich habs finally doch schon bereits Gestern hinbekommen, evtl. findet der ein oder andere ja noch nen Fehler:

Delphi-Quellcode:
var
lvc: TLVColumn;
///////////////////////////////////
                   ImageListSm := ImageList_Create(16,16,ILC_COLOR32,0,1);
                   ImageList_AddIcon(ImageListSm,LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON2)));
                   SendDlgItemMessage(handle, IDC_LISTVIEW1, LVM_SETIMAGELIST, LVSIL_SMALL, ImageListSm);
                   ImageListNo := ImageList_Create(32,32,ILC_COLOR32,0,1);
                   ImageList_AddIcon(ImageListNo,LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON2)));
                   SendDlgItemMessage(handle, IDC_LISTVIEW1, LVM_SETIMAGELIST, LVSIL_NORMAL, ImageListNo);
                   lvc.mask := LVCF_TEXT or LVCF_WIDTH;
                   lvc.pszText := 'Datei';
                   lvc.cx := 250;
                   SendMessage(GetDlgItem(handle, IDC_LISTVIEW1), LVM_INSERTCOLUMN, 0, Integer(@lvc));
                   lvc.pszText := 'Size';
                   lvc.cx := 180;
                   SendMessage(GetDlgItem(handle, IDC_LISTVIEW1), LVM_INSERTCOLUMN, 1, Integer(@lvc));
                   SetView(GetDlgItem(handle, IDC_LISTVIEW1), LVS_REPORT);
und

Delphi-Quellcode:
var
i: integer;
lvitem: TLVItem;
iItem: Integer;
///////////////////////
  i := filesize;
  lvitem.mask := LVIF_TEXT or LVIF_IMAGE;
  lvitem.iImage := 0;
  lvitem.pszText := 'bla';
  lvitem.cchTextMax := MAX_PATH;
  iItem := SendDlgItemMessage(dialoghandle, IDC_LISTVIEW1, LVM_INSERTITEM, 0, Integer(@lvitem));
  ListView_SetItemText(GetDlgItem(dialoghandle, IDC_LISTVIEW1), iItem, 1, pchar(inttostr(i div 1024)+'K'));
Noch ne Frage am Rande...

Ich habe folgendes:
Delphi-Quellcode:
var
pc: pchar;
///////////////////////////////////
                             getmem(pc, MAX_PATH);
                             lvitem.cchTextMax := MAX_PATH;
                             lvitem.pszText := pc;
                             ...
                             freemem(pc);
Ist das so korrekt? ODER soll ich getmem(pc, MAX_PATH + 1); reservieren (weil ja die variable pc ja null-terminiert ist und deshalb nen byte mehr braucht als in cchTextMax angegeben!)? und muss man für die Klassen TLVItem und TLVColumn jetzt Speicher reservieren oder nicht? Und ist es ratsam, zeromemory(@lvitem, SizeOf(lvitem)); zu benutzen? Das initialisiert ja sozusagen nur die klasseninstanz reserviert aber keinen Speicher, ODER? Jedenfalls läuft es fehlerfrei... Soll aber auch bei anderen Fehlerfrei laufen.

An dieser Stelle schon mal Danke an Luckie!!!!

Mir hat das WinAPI Tut hier durchaus etwas geholfen.

BTW: Die MSDN macht mich fertig, sau unübersichtlich und dann muss ich auch noch von c nach delphi umdenken ...

----------
EDIT:
Ok also ich habe mir jetzt auch mal angesehen, was ihr so gepostet hattet. Gehe ich richtig in der Annahme, dass GetMem hier 255 Bytes für die Zeichen reserviert und AUTOMATISCH noch ein extra Byte für das #0-Byte? Muss man sich also um das #0-Byte speichertechnisch keine Sorgen machen??? Jedenfalls versth ich gerade nicht, warum da 255 Bytes alloziert (heißt das so?) werden und dann die cchTextMax Variable auf 256 gesetzt wird... Oder bezieht sich cchTextMax auf die Länge in Bytes PLUS das #0-Byte???
Delphi-Quellcode:
    GetMem(Buffer, 255);
    ...
      lvi.cchTextMax := 256;
  Mit Zitat antworten Zitat