Ich habe mehrere Artikel über den Vergleich von VC und Delphi gelesen und bin auch daran interessiert, Code zu schreiben, um es auszuprobieren. Der Code ist wie folgt:
#Include <Windows.h>
Hwnd hwndbutton;
int cx, cy;
Lresult Callback MainwndProc (Hwnd Hwindow, Uint NMSG, WPARAM WPRM, LPARAM LPRM)
{
HDC DC;
Paintstruct PS;
RECT RC;
Schalter (NMSG)
{
Fall Wm_Create:
{
Textmetrische TM;
dc = getdc (hwindow);
SelectObject (dc, getStockObject (System_Fixed_font));
GetTextMetrics (DC, & TM);
cx = tm.tmavecharwidth * 30;
Cy = (tm.tmHeight + tm.tmexternalleading) * 2;
ReleaseC (Hwindow, DC);
hwndbutton = createwindow (
"Taste",
"Klicken Sie hier",
WS_CHILD |
0, 0, cx, cy,
Hwindow,
(Hmenu) 1,
((LPCreateStruct) LPRM)-> Hinstance,
NULL
);
Rückkehr 0;
brechen;
}
Fall Wm_destroy:
{
PostQuitMessage (0);
Rückkehr 0;
brechen;
}
Fall Wm_Paint:
{
dc = beginpaint (hwindow, & ps);
GetClientRect (hwindow, & rc);
rc.bottom = rc.bottom / 2;
DrawText (DC, "Hallo, Welt!", -1, & rc,
Dt_singline |.
Endpaint (Hwindow, & PS);
Rückkehr 0;
brechen;
}
Fall Wm_Size:
{
if (hwndbutton && (WPRM == Sizefulscreen || wprm == Sizenormal))
{
rc.left = (loword (lprm) - cx) / 2;
rc.top = hiWord (lprm) * 3/4 - cy / 2;
MoveWindow (hwndbutton, rc.left, rc.top, cx, cy, true);
}
Rückkehr 0;
brechen;
}
Fall Wm_Command:
{
if (loword (wprm) == 1 && hiword (wprm) == bn_clicked &&
(Hwnd) lprm == hwndbutton)
{
Zerstörerwindow (Hwindow);
}
Rückkehr 0;
brechen;
}
}
return defwindowproc (hwindow, nmsg, wprm, lprm);
}
// Winmain
int __stdcall winmain (Hinstance Hinst, Hinstance HPREV, LPSTR LPCMD, INT nshow)
{
Hwnd hwindowmain;
MSG MYMSG;
Wndclassex WCEX;
WCEx.cbSize = sizeof (wndclassex);
WCEX.Style = CS_HREDRAW |.
wcEx.lpfnwndProc = (WndProc) MainWndProc;
WCEX.CBCLSEXTRA = 0;
wcEx.cbwndextra = 0;
WCEx.Hinstance = hinst;
wcEx.hicon = loadicon (null, idi_application);
wcEx.hcursor = loadCursor (null, idc_arrow);
wcEx.hbrbackground = (hbrush) (color_window+1);
wcEx.lpsZClassName = "WinTestWin";
wcEx.hiconsm = loadicon (null, idi_application);
RegisterClassex (& wcEx);
hwindowmain = createwindow (
"WinTestwin",
"Hallo",
WS_OVERLADEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
0,,
0,,
Hinst,
NULL
);
Showwindow (Hwindowmain, Nshow);
UpdateWindow (hwindowmain);
Während (getMessage (& mymmsg, 0, 0, 0))
{
Translatemessage (& mymmsg);
SspatchMessage (& mymmsg);
}
return mymmsg.wparam;
}
Wählen Sie die Veröffentlichung zum Kompilieren aus, aktivieren Sie die minimale Codeoptimierung von VC6 und der vom Kompilierung generierte Ausführungscode beträgt 36,0 KB.
Übersetzen Sie es dann wie folgt in den Delphi -Code:
Programmzellen;
Verwendung
Windows, Nachrichten;
var
hwndbutton: hwnd;
CX, Cy: Ganzzahl;
Funktion mainwndProc (hwindow: hwnd; nmsg: uint; wprm: wparam; lprm: lparam): lresult; stdcall;
var
DC: HDC;
PS: Paintstruct;
RC: Trect;
TM: textmetrisch;
PCTST: PCreateStruct;
Beginnen
Fall NMSG von
Wm_create:
Beginnen
DC: = getdc (hwindow);
SelectObject (dc, getStockObject (System_Fixed_font));
GetTextMetrics (DC, TM);
CX: = tm.tmavecharwidth * 30;
Cy: = (tm.tmheight + tm.tmexternalleading) * 2;
ReleaseC (Hwindow, DC);
PCTST: = PCreateStruct (LPRM);
hwndbutton: = createwindow (
'Taste',
'Klicken Sie hier',
Ws_child oder ws_visible oder bs_pushbutton,
0, 0, cx, cy,
Hwindow,
Hmenu (1),
pctst^.Hinstance,
Null
);
Ergebnisse: = 0;
Ausfahrt;
Ende;
Wm_destroy:
Beginnen
PostQuitMessage (0);
Ergebnisse: = 0;
Ausfahrt;
Ende;
Wm_Paint:
Beginnen
DC: = beginpaint (hwindow, ps);
GetClientRect (Hwindow, RC);
rc.bottom: = rund (rc.bottom / 2);
DrawText (DC, 'Hallo, Welt!', -1, rc,
Dt_singleline oder dt_center oder dt_vcenter);
Endpaint (Hwindow, PS);
Ergebnisse: = 0;
Ausfahrt;
Ende;
Wm_size:
Beginnen
if (hwndbutton <> 0) und (wprm = sizefulscreen) oder (WPRM = SizeNormal) dann
Beginnen
rc.left: = rund ((loword (lprm) - cx) / 2);
rc.top: = rund (hiWord (lprm) * 3/4 - cy / 2);
MoveWindow (hwndbutton, rc.left, rc.top, cx, cy, true);
Ende;
Ergebnisse: = 0;
Ausfahrt;
Ende;
Wm_Command:
Beginnen
if (loword (wprm) = 1) und (hiword (wprm) = bn_clicked) und
(Hwnd (lprm) = hwndbutton) dann
Beginnen
Zerstörerwindow (Hwindow);
Ende;
Ergebnisse: = 0;
Ausfahrt;
Ende;
Ende;
Ergebnis: = DefwindowProc (Hwindow, NMSG, WPRM, LPRM);
Ende;
// Winmain
var
hwindowmain: hwnd;
MYMSG: MSG;
WCEX: Wndclassex;
Beginnen
wcEx.cbSize: = sizeof (wndclassex);
WCEx.Style: = CS_HREDRAW oder CS_VREDRAW;
wcEx.lpfnwndProc: = @MainwndProc;
WCEX.CBCLSEXTRA: = 0;
wcEx.cbwndextra: = 0;
WCEX.HINSTANCE: = MainInstance;
wcEx.hicon: = loadicon (0, IDI_Application);
wcEx.hcursor: = loadCursor (0, idc_arrow);
wcEx.hbrbackground: = hBrush (color_window+1);
wcEx.lpsZClassName: = 'WinTestWin';
wcEx.hiconsm: = loadicon (0, IDI_Application);
RegisterClassex (WCEX);
hwindowmain: = createwindow (
'WinTestwin',
'Hallo',
WS_OVERLADEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
0,,
0,,
Maininstance,
Null
);
ShowWindow (Hwindowmain, CMDShow);
UpdateWindow (hwindowmain);
Während GetMessage (MYMSG, 0, 0, 0) = TRUE DO
Beginnen
Translatemessage (MYMSG);
SISPATCHMESSAGE (MYMSG);
Ende;
Ende.
Schließlich wurde festgestellt, dass der von Delphi generierte Code nur 16,5.000 war, was mehr als halb kleiner als VC war. Dies zeigt, dass Delphi einen guten Compiler hat und die VCL -Visualisierungsfunktion ein gutes Entwicklungstool sein sollte. Meiner Meinung nach hat Delphi kein Problem bei der Entwicklung großer Systeme, und seine Leistung kann sogar VC überschreiten. . Delphi kann auch VCL zum Schreiben von Programmen verwenden.