![]() |
Re: NM_RETURN - Problem
@MathiasSimmack: VIELEN VIELEN DANK :hello: :hello: :hello: :party: :balloon:
Dass du dir so viel Arbeit machst: RESPEKT!!!! :hello: |
Re: NM_RETURN - Problem
ach ja noch was: jetzt wo es mit resourcen tabu ist, wie bekommt man die buttons so hin, wie von einer resource??? die "normal" erstellten funktionieren nämlich nicht so recht (DEFPUSHBUTTON kann man mit enter betätigen, da er den focus hat) und sehen besch****n aus :kotz:
|
Re: NM_RETURN - Problem
Mal seh´n ob du noch jubelst, wenn meine Rechnung bei dir eintrifft. :mrgreen:
|
Re: NM_RETURN - Problem
Zitat:
Wenn du ein Options- o.ä. Fenster benötigst, dann spricht nichts dagegen, das als Ressource zu gestalten. So mache ich´s ja auch. Ich programmiere das Hauptfenster bzw. die Controls (List-View, Tree-View, was auch immer) per API. Wenn ich dann aber einen Eintrag anklicke, dann erscheint ein Dialog. Und das ist ´ne Ressource. Nimm als Beispiel die Registry-Demo aus den Tutorials. |
Re: NM_RETURN - Problem
Zitat:
Zitat:
und ich persönlich habe programmieren mit vcl meistens durch code-beispiele und weniger durch theorie (verstehen) gelernt. wenn man den code dann bearbeiten möchte, lernt man anhand von fehlern super dazu! (ein buch hätte mich nicht auf denkfehler hinweisen können :wink: ) |
Re: NM_RETURN - Problem
Zitat:
Zitat:
Aber trotzdem habe ich mich immer bemüht, eine halbwegs lesbare Form beizubehalten. ;) Als Beispiel, was mir auch in ein paar älteren Quellcodes von -pieps- (Name zensiert! :mrgreen:) aufgefallen ist - Ich deklariere Konstanten und Variablen usw. immer nur erst ab dem Zeitpunkt, ab dem ich sie brauche. Sprich:
Delphi-Quellcode:
Benötige ich dann eine der Variablen doch mal vorher, dann übergebe ich sie meist per Konstante an die Funktion/Prozedur. Bei den o.g. Beispielkonstanten allerdings lasse ich mit mir reden und verschiebe sie auch mal weiter nach vorn, weil sich ihre Werte ja im Programm nicht ändern können.
const
IDC_LISTVIEW = 1; IDC_BUTTON = 2; var hLV, hButton : HWND; function wndproc(wnd: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): LRESULT; stdcall; { ... } Auf die Weise wundere ich mich nie, wenn irgendwas schief geht, weil sich an einer mir entfallenen Stelle im Quellcode vielleicht doch mal der Inhalt einer (globalen) Variable ändert. Weil: Das kann dann nicht passieren. :) usw. |
Re: NM_RETURN - Problem
@silentAMD:
Nochmal (hatten wir schon in einem anderen ähnlichen Thread) - wie ist der Stil des Dialogs. Ach und noch was. Kannst du bitte die fragliche Ressource posten (in code-Tags). Danke! @Mathias: Zitat:
Das ist ja ein häßlicher Stil ;) ... wenn ich mir heute manchmal Programme von mir von vor 4 Jahren anschaue könnte ich auch ulfen - aber was soll's auf Änderungen habe ich auch keinen Bock mehr. Für Newbies muß das reichen. Zitat:
|
Re: NM_RETURN - Problem
@Assarbad: eigentlich erstelle ich nur eine listview und ein treeview:
Code:
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:
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);
Code:
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... :oops: ). deshalb habe ich dank luckies tipp dies hier noch eingebaut, damit tab funktioniert:
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;
Code:
und mit dieser funktion habe ich das gleiche problem wie wenn ich alles per resource erstelle (ist noch im anhang vom ersten post...)
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 auf die frage, was ich für einen stil der dialog haben soll, weiß ich immernoch keine antwort... :wink: (eigentlich befindet sich ja der komplette code, eben nur mit resource, im anhang, aber kommt sowieso immer das gleiche problem...) mfg |
Re: NM_RETURN - Problem
Also erstmal ist die Ressource komplett verkrüppelt. Du benutzt das gleiche Format wie ich in meinem uralten nonVCL-Tut. Wenn Luckie das (immernoch) verwendet, sollte er es schnellstens korrigieren. Das Format kennt nämlich nur der BRCC32.
Außerdem sind die Bemaßungen komplett krank. Das ListView ist größer als der ganze Dialog wenn man es in Visual-Studio lädt. |
Re: NM_RETURN - Problem
Ich erstell meine Dialog Ressourcen noch mit dem VC6 Ressourcen Editor und damit wurden auch die im Tutorial erstellt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz