Registriert seit: 27. Sep 2003
203 Beiträge
Turbo Delphi für Win32
|
Re: NM_RETURN - Problem
1. Sep 2004, 14: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
|