Thema: Delphi NM_RETURN - Problem

Einzelnen Beitrag anzeigen

silentAMD

Registriert seit: 27. Sep 2003
203 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: NM_RETURN - Problem

  Alt 1. Sep 2004, 13:50
@Assarbad: eigentlich erstelle ich nur eine listview und ein treeview:

Code:
        hTreeView := CreateWindowEx(WS_EX_CLIENTEDGE,
                                    WC_TREEVIEW,
                                    nil,
                                    WS_CHILD or WS_TABSTOP or WS_VISIBLE or
                                    TVS_HASLINES or TVS_LINESATROOT or TVS_HASBUTTONS or TVS_SHOWSELALWAYS,
                                    0,0,0,0,
                                    hwnd,
                                    HMENU(IDC_TREEVIEW),
                                    HInstance,
                                    nil);
                                   
        hListView := CreateWindowEx(WS_EX_CLIENTEDGE,
                                    WC_LISTVIEW,
                                    nil,
                                    WS_CHILD or WS_TABSTOP or WS_VISIBLE or
                                    LVS_REPORT or LVS_SHOWSELALWAYS or LVS_NOCOLUMNHEADER,
                                    0,0,0,0,
                                    hwnd,
                                    HMENU(IDC_LISTVIEW),
                                    HInstance,
                                    nil);
in der listview will ich nach einlesen der ordner in den treeview und der dateien ins listview diese dateien dann per return und doppelklick öffnen:

Code:
WM_NOTIFY:
      begin
      with PNMListView(lParam)^ do
        case hdr.code of
          NM_RETURN,
          NM_DBLCLK:
            OpenFile(hdr.hwndFrom);
        end;
      end;

// hier noch die procedure zum öffnen der dateien:

procedure OpenFile(const hLV: HWND; openwi: Boolean = FALSE);
var
  path: PChar;
begin
  if(ListView_GetSelectedCount(hLV) <> 1) then
    exit;

  path := PChar(GetPath(hTreeView,TreeView_GetSelection(hTreeView)));

  if not(FileExists(path + GetListItemText(hLV))) then
  begin
    ShowErrorMessage(hLV, GetLastError);
    exit;
  end;

  case openwi of
    TRUE: ShellExecute(hLV, nil, 'rundll32.exe', PChar('shell32.dll,OpenAs_RunDLL ' + path + GetListItemText(hLV)), nil, SW_NORMAL);
    FALSE: ShellExecute(hLV, nil, @GetListItemText(hLV)[1], nil, path, SW_NORMAL);
  end;

  if(GetLastError <> 0) and (GetLastError <> 1155) then
    ShowErrorMessage(hLV, GetLastError);

  if(GetLastError = 1155) and not openwi then
    if MessageBox(hLV, @(ShowErrorMessage(hLV, GetLastError, FALSE) + 'Möchten Sie manuell ein geeignetes Programm auswählen?')[1], ID_APP, MB_ICONQUESTION or 4) = IDYES then
      OpenFile(hLV, TRUE);
end;
wenn ich dies alles selbst erstelle (also ohne resource) dann klappt das öffnen wunderbar, nur fehlt dann die tab-funktion (nochmal danke an luckie für den hinweis... ). deshalb habe ich dank luckies tipp dies hier noch eingebaut, damit tab funktioniert:

Code:
  hwndMain := CreateWindow(PChar(MainWindowClass),
                         ID_APP,
                         WS_OVERLAPPEDWINDOW or WS_VISIBLE or WS_CLIPCHILDREN or WS_CLIPSIBLINGS,
                         GetSystemMetrics(SM_CXSCREEN) div 2 - ID_MINWIDTH div 2,
                         GetSystemMetrics(SM_CYSCREEN) div 2 - ID_MINHEIGHT div 2,
                         ID_MINWIDTH,
                         ID_MINHEIGHT,
                         0,
                         0,
                         HInstance,
                         nil);


while GetMessage(Msg, 0, 0, 0) do
    if not(IsDialogMessage(hwndMain, Msg)) then
      begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
      end;
und mit dieser funktion habe ich das gleiche problem wie wenn ich alles per resource erstelle (ist noch im anhang vom ersten post...)


und auf die frage, was ich für einen stil der dialog haben soll, weiß ich immernoch keine antwort... (eigentlich befindet sich ja der komplette code, eben nur mit resource, im anhang, aber kommt sowieso immer das gleiche problem...)


mfg
  Mit Zitat antworten Zitat