Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi NM_RETURN - Problem (https://www.delphipraxis.net/22651-nm_return-problem.html)

silentAMD 24. Mai 2004 21:29

Re: NM_RETURN - Problem
 
@MathiasSimmack: VIELEN VIELEN DANK :hello: :hello: :hello: :party: :balloon:
Dass du dir so viel Arbeit machst: RESPEKT!!!! :hello:

silentAMD 24. Mai 2004 21:33

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:

MathiasSimmack 24. Mai 2004 21:33

Re: NM_RETURN - Problem
 
Mal seh´n ob du noch jubelst, wenn meine Rechnung bei dir eintrifft. :mrgreen:

MathiasSimmack 24. Mai 2004 21:36

Re: NM_RETURN - Problem
 
Zitat:

Zitat von silentAMD
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:

Wo kommt denn da ein Button vor? Bzw. wo soll denn einer hin?
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.

silentAMD 24. Mai 2004 21:40

Re: NM_RETURN - Problem
 
Zitat:

Wo kommt denn da ein Button vor? Bzw. wo soll denn einer hin?
naja, wenn du mein prog kennst (ArchivROM-Viewer in VCL), wirst du sicherlich die suchfunktion bemerkt haben. da ist ja ein button. und jetzt versuche ich alles auf API umzuschreiben :coder:


Zitat:

Oder war das der Versuch, meinen und Luckies Code so unkenntlich wie möglich zu machen, damit man nicht merkt woher du ihn hast?
... naja, mit etwas hilfe der Win32-API-Tutorials, die sehr gelungen sind!!! :mrgreen: :thuimb:
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: )

MathiasSimmack 25. Mai 2004 07:56

Re: NM_RETURN - Problem
 
Zitat:

Zitat von silentAMD
naja, wenn du mein prog kennst (ArchivROM-Viewer in VCL), wirst du sicherlich die suchfunktion bemerkt haben.

Ach so ... :oops: ... nee, kenne ich nicht.

Zitat:

und ich persönlich habe programmieren mit vcl meistens durch code-beispiele und weniger durch theorie (verstehen) gelernt.
Ja, das stimmt schon ... Und ich kann mich bspw. an Beiträge wie "Die 1024 Bytes des Monats erinnern". Das war in der alten DOS International (PC MAGAZIN). Da haben Programmierer ihre Programme "vergewaltigt" und alles in eine Zeile gequetscht, nur beim Quellcode unter den geforderten 1024 Bytes zu bleiben. Okay, das war witzig, aber kein Mensch hat durchgesehen. Darum habe ich dann irgendwann begonnen, den Code wieder lesbarer zu gestalten. Wobei ich aber zugeben muss, dass sich mein Stil im Laufe der Zeit auch mehrfach verändert hat.

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:
const
  IDC_LISTVIEW = 1;
  IDC_BUTTON = 2;
var
  hLV,
  hButton : HWND;

function wndproc(wnd: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): LRESULT;
  stdcall;
{ ... }
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.

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.

Assarbad 31. Aug 2004 20:51

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:

Zitat von MathiasSimmack
Ich deklariere Konstanten und Variablen usw. immer nur erst ab dem Zeitpunkt, ab dem ich sie brauche.

Pfui Ede ... also Geyer ... ähem Geier.
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:

Zitat von MathiasSimmack
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.

Das klingt sauber. Bei mir sind Konstanten oft in einer extra Include oder direkt hinter dem implementation Schlüsselwort.

silentAMD 1. Sep 2004 13:50

Re: NM_RETURN - Problem
 
@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... :oops: ). 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... :wink: (eigentlich befindet sich ja der komplette code, eben nur mit resource, im anhang, aber kommt sowieso immer das gleiche problem...)


mfg

Assarbad 1. Sep 2004 14:45

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.

Luckie 1. Sep 2004 14:57

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.
Seite 2 von 4     12 34      

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