![]() |
Mit Delphi 2005 NonVCL-Anwendung aus Dialogvorlage erstellen
Hallo,
ich würde gerne eine NonVCL-Anwendung erstellen die das Anwendungsfenster aus einer Dialogvorlage erstellt. Ich habe mir deswegen mal Assabards NonVCL-Tutorial angeschaut und bin so ähnlich wie dort beschrieben vorgegangen. Zuerst starte ich also MS Visual C mit dem ich die Dialogvorlage erstellt habe (als rc-Datei). Dann passte ich die Datei entsprechend an und schmiss den ganzen MFC-Blödsinn raus damit ich die Datei mit dem Ressourcen-Compiler von Delphi entsprechend umwandeln konnte. Folgendes wandelte ich dann auch um (ohne Probleme):
Code:
So, nun öffnete ich Delphi und erstellte eine neue Anwendung, da ich nichts geeignetes für die NonVCL lieh ich mir dazu eine Konsolenanwendung aus und schmiss den ganzen Konsolen-Blödsinn raus.
//main2.rc -> Umgewandelt in main2.res
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL 100 DIALOGEX 0, 0, 249, 191 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_TOOLWINDOW CAPTION "Route Installer for Bve" FONT 8, "Arial" BEGIN CONTROL "",101,"Static",SS_BLACKFRAME,9,22,109,85 EDITTEXT 102,128,22,114,57,ES_AUTOHSCROLL | NOT WS_BORDER LTEXT "<AUTHOR>",103,128,86,113,8 LTEXT "<URL>",104,128,99,113,8 CTEXT "<ROUTE>",105,9,3,233,16 GROUPBOX "Setup",106,9,118,231,27 LTEXT "<BVE>",107,16,130,134,9 PUSHBUTTON "...",108,156,128,16,12 PUSHBUTTON "Install now...",109,178,126,58,15 GROUPBOX "Installation process",110,9,154,231,26,NOT WS_VISIBLE CONTROL "Progress1",111,"msctls_progress32", NOT WS_VISIBLE | WS_BORDER,15,164,220,11 PUSHBUTTON "OK", IDOK, 61, 65, 40, 14 PUSHBUTTON "Abrechen", IDCANCEL, 160, 65, 40, 14 END Daraus entstand dann folgender Programmcode in der DPR-Datei:
Delphi-Quellcode:
Trotz einiger Variationen konnte ich nach dem kompilieren & starten der Anwendung kein entsprechendes Anwendungsfenster entdecken, das Programm beendete sich auch gleich nach dem Start ohne mein Zutun.
program routeinstaller2;
uses windows, messages; {$WARNINGS OFF} {$R main2.res} var hdlg: DWORD = 0; function dlgfunc(hwnd: hwnd; umsg: dword; wparam: wparam; lparam: lparam): bool; stdcall; begin result := true; case umsg of WM_INITDIALOG: begin end; WM_CLOSE: EndDialog(hWnd, 0); WM_DESTROY: begin PostQuitMessage(0); end; {WM_COMMAND: if hiword(wparam) = BN_CLICKED then begin case loword(wparam) of IDCANCEL, IDOK: sendmessage(hwnd,WM_CLOSE,0,0); end; end;} else result := false; end; end; begin hdlg := DialogBox(hInstance, MAKEINTRESOURCE(100), 0, @dlgfunc); end. Liegt es vielleicht am neuen Delphi oder habe ich woanders etwas falsch gemacht ? Ich wäre euch echt dankbar wenn ihr mir hierbei (wieder mal) helfen könntet. Vielen Dank ! Mit freundlichen Grüßen, Thomas Tschofenig |
Re: Mit Delphi 2005 NonVCL-Anwendung aus Dialogvorlage erste
Zitat:
Code:
...nicht vergessen.
[b]begin[/b]
[color=#ff0000][b]InitCommonControls;[/b][/color] hdlg := DialogBox(hInstance, MAKEINTRESOURCE(100), 0, @dlgfunc); [b]end.[/b] |
Re: Mit Delphi 2005 NonVCL-Anwendung aus Dialogvorlage erste
Delphi-Quellcode:
-> "Undefinierter Bezeichner"
InitCommonControls;
Muss etwa in die uses-Klausel noch was rein ? Seltsam, seltsam... Trotzdem danke erstmal ! Mit freundlichen Grüßen, Thomas |
Re: Mit Delphi 2005 NonVCL-Anwendung aus Dialogvorlage erste
InitCommonControls ist in der unit CommCtrl.
// Wass ich noch erklären wollte, so etwas kommt vor wenn du auf dem Dialog Controls erstellt hat, die auf die Common Controls zugreifen z.B. die ProgressBar. |
Re: Mit Delphi 2005 NonVCL-Anwendung aus Dialogvorlage erste
Zitat:
Das mache ich so, und ich spare mir damit jede Menge Arbeit, wenn ich das Skript dann doch noch mal im Editor des Visual Studio 6 bearbeiten muss/möchte. |
Re: Mit Delphi 2005 NonVCL-Anwendung aus Dialogvorlage erste
Zitat:
@Thomas233: Nimm mal lieber Luckies Tutorials. Meins ist so veraltet und existiert auch nur noch, weil ich zu faul war es zu entfernen :lol: ... Auf die Common Controls bin ich ja garnicht eingegangen. Übrigens, wenn man ein Richedit benutzt, muß man auch vorher eine DLL laden (je nach Richedit-Version) ;) ;) |
Re: Mit Delphi 2005 NonVCL-Anwendung aus Dialogvorlage erste
Hallo,
ah, deswegen. Danke. Das mit dem Ressourcen-Skript ist kein Problem, ich schmeisse einfach nach jeder Änderung das MFC-Zeug raus, ist kein besonderer Aufwand. Ich behalte die rc-Datei ausserdem ja eh für spätere Änderungen. @MathisSimmack: Hmm..kann mir eigentlich auch noch vorstellen das da irgendwas gekürtzt wird (bzw. die Verweise auf die Header geändert werden), denn was sollte Delphi mit der MFC anfangen ? Oder liege ich da falsch ? @Olli: Ach deswegen wollt`s so nicht ;-) @turboPascal: Danke ! Hab da gleich wieder drei Fragen: 1) Kann man den Dialog irgendwie einfärben (im Skript oder nachträglich)? 2) Wenn ich Text darstellen möchte, was eignet sich dann am besten dafür ? Ich hab ein Edit genommen, ist aber nicht die optimale Lösung weil da keine Zeilenümbrüche gehen. Ein Memo wäre da optimal (ich mag aber jetzt nicht extra deswegen eines entwickeln *g* 3) Ich möchte nachträglich ein Bitmap auf dem Dialog anzeigen (in einem bestimmten Bereich. Momentan habe ich deswegen ein Bild-Control aus MS VC genommen und es auf dem Dialog platziert (leer gelassen). Könnte es so funktionieren oder gäbe es eine bessere Lösung ? Bin mit NonVcl leider noch nicht so vertraut. Vielen Dank im Vorraus ! Liebe Grüße, Thomas |
Re: Mit Delphi 2005 NonVCL-Anwendung aus Dialogvorlage erste
Zitat:
Zitat:
Zitat:
|
Re: Mit Delphi 2005 NonVCL-Anwendung aus Dialogvorlage erste
Zitat:
Zitat:
Zitat:
Vielen Dank Volker ! Mit freundlichen Grüßen, Thomas Tschofenig |
Re: Mit Delphi 2005 NonVCL-Anwendung aus Dialogvorlage erste
Zitat:
Zitat:
Nachtrag: direkt im Resource-Skript allerdings "\r\n" (C-Notation) Zitat:
Delphi-Quellcode:
- hDlg = Fensterhandle des Dialogs
SendDlgItemMessage(hDlg, 123, STM_SETIMAGE, IMAGE_BITMAP, hBitmap);
- 123 = ID des Static-Controls - hBitmap = Bitmap-Handle, Rückgabewert von LoadBitmap/LoadImage Macht man normalerweise bei WM_INITDIALOG. Ich denke, dass man für die Ressourcenverwaltung dann selbst zuständig bist (also abschließend ein DeleteObject mit dem Handle machen). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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