Einzelnen Beitrag anzeigen

Benutzerbild von cheatzs
cheatzs

Registriert seit: 31. Aug 2003
Ort: Altenburg
81 Beiträge
 
#1

ListView: LVM_GETITEMTEXT -> Runtime Error

  Alt 3. Feb 2005, 21:14
Hi Leutz,
hab das Problem, dass ich beim Auslesen einer Zelle einer ListView im Report-Style einen Runtime Error erhalte:

Delphi-Quellcode:
Item.cchTextMax := SendMessage(hWndGradesListView,LVM_GETITEMTEXT,GradesListViewEdit_Item,Integer(@Item))+1;
SendMessage(hWndGradesListView,LVM_GETITEMTEXT,GradesListViewEdit_Item,Integer(@item));

Das Ganze im Zusammenhang mit einer Message Procedure (vom ListView gesubclassed)

Delphi-Quellcode:
var
  GradesListViewEdit_Item : Integer;
...

function GradesListView_WndProc(hWnd: hWnd; uMsg: UINT; wP: WPARAM;
  lP: LPARAM):LRESULT; stdcall;
var
  pt : TPoint;
  nItem,nSubItem : Integer;
  rc : Trect;
  FindRect : Boolean;
  Item : TLVItem;
begin
  case uMsg of
    WM_LBUTTONDOWN:
     begin
       if not GradesListViewEditEnabled then
       begin
         //Bestimmt das SubItemRect ...
         GetCursorPos(pt);
         ScreenToClient(hWndGradesListView,pt);
         nItem := SendMessage(hWndGradesListView,LVM_GETSELECTIONMARK,0,0);
         if nItem > -1 then
         begin
           FindRect := FALSE;
           nSubItem := 0;
           while (not FindRect) and (nSubItem < 10) do
           begin
             rc.top := nSubItem+1;
             rc.left := LVIR_BOUNDS;
             SendMessage(hWndGradesListView,LVM_GETSUBITEMRECT,nItem,Integer(@rc));
             if (rc.left < pt.x) and (rc.right > pt.x) and (rc.top < pt.y) and (rc.bottom > pt.y) then
               FindRect := TRUE;
             if not FindRect then
               Inc(nSubItem);
           end;
           if nSubItem = 10 then
             nSubItem := -1
           else
           begin
             GradesListViewEditRect := rc;
             GradesListViewEdit_Item := nItem;
             GradesListViewEdit_SubItem := nSubItem;

             Item.iItem := nItem;
             Item.iSubItem := nSubItem+1;

             //Diese 2 Zeilen führen zum Runtime Error
             Item.cchTextMax := SendMessage(hWndGradesListView,LVM_GETITEMTEXT,GradesListViewEdit_Item,Integer(@Item))+1;
             SendMessage(hWndGradesListView,LVM_GETITEMTEXT,GradesListViewEdit_Item,Integer(@item));
             //Nur wenn ich alle beide Zeilen auskommentiere, kommt kein Fehler mehr, aber dafür auch kein Text ;)
             GradesListViewEdit_Text := String(Item.pszText);
           end;
         end;
       end;
     end;
  end;
  Result := CallWindowProc(GradesListViewOldMessageProc,hWnd,uMsg,wP,lP);
end;
Hab keine Ahnung warum ... hab auch schon das entsprechende Macro ListView_GetItemText probiert ... ebenfalls Runtime Error!

Danke im Vorraus für eventuelle Vorschläge!
Thomas Low
THX und viel Spaß beim Coden
Cheatzs
  Mit Zitat antworten Zitat