Einzelnen Beitrag anzeigen

Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Item in Fremder ListView doppelt anklicken

  Alt 5. Mai 2008, 20:09
Hallo,

Das ist nicht ganz trivial. Ich habe es mal so hingebracht:

Delphi-Quellcode:

uses
  CommCtrl, uProcessMemMgr {siehe Anhang};

function LVDblClickItemByIndex(hwndLV: HWND; ItemIndex: Word): Boolean;
// Führt einen Doppelklick (Enter) auf ein Item in einer fremden ListView aus
// hwndLV: Handle der ListView
// ItemIndex: Index des Items, angefangen bei 0
// Diese Methode funktioniert u.U nur, wenn kein anderes Item markiert ist.
const
  MaxTextLen = 1024;
var
  MemMgr: TProcessMemMgr;
  LVItem: TLVItem;
  iLVitemsCount: Integer;
  PrItem: PLVItem;
begin
  Result := False;
  MemMgr := CreateProcessMemMgrForWnd(hwndLV);
  try
    PrItem := MemMgr.AllocMem(SizeOf(TLVItem));
    iLVitemsCount := ListView_GetItemCount(hwndLV);
    if ItemIndex < iLVitemsCount then
    begin
      FillChar(LVItem, SizeOf(LVItem), 0);
      // Item Eigenschaften setzen
      LVItem.mask := LVIF_TEXT;
      LVItem.iItem := ItemIndex;
      MemMgr.Write(LVItem, PrItem, SizeOf(TLVItem));
      if not ListView_GetItem(hwndLV, PrItem^) then Exit;
      MemMgr.Read(PrItem, LVItem, SizeOf(TLVItem));
      if ListView_GetItem(hwndLV, PrItem^) then
      begin
        // Item "Selected" Eigenschaften setzen
        LVItem.state := LVIS_SELECTED;
        LVItem.stateMask := LVIS_SELECTED;
        // Item markieren
        MemMgr.Write(LVItem, PrItem, SizeOf(TLVItem));
        if Boolean(SendMessage(hwndLV, LVM_SETITEMSTATE, ItemIndex, LongInt(PrItem))) then
        begin
        // Enter senden
          PostMessage(hwndLV, WM_KEYDOWN, VK_RETURN, 0);
          PostMessage(hwndLV, WM_KEYUP, VK_RETURN, 0);
        // SendMessage(hwndLV, WM_LBUTTONDBLCLK, ItemNumber, LongInt(PrItem));
          Result := True;
        end;
      end;
    end;
  finally
    MemMgr.Free;
  end;
end;
Angehängte Dateien
Dateityp: pas uprocessmemmgr_121.pas (10,9 KB, 23x aufgerufen)
Thomas
  Mit Zitat antworten Zitat