Autor Beitrag
kompas
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44



BeitragVerfasst: Fr 06.08.10 18:57 
hallo!

Also hier, sowie ich noch ein anfänger binn, so befasse ich mich zeit einigen tagen, über tutoriale zu lesen, und hier, trat ich gleich auf ein sehr gut erklärten Tutorial für ein Fenster gleich zu haben.
Und sowie dieser Tutorial sehr gut Erklärt ist, werde ich diesen Tutorial Auf Deutsch euch übersetzen, denn ich als anfänger habe gleich Alles Verstanden, so Denke ich auch, die Andere Delphi programmierer Anfänger, werden auch in gut Verstehen.

Also eine klein Gedult, für das ich euch mit Alle Richtige Deutsche Wörter diesen Tutorial übersetze.

So hier starten mal gleich mit der Erklärung, so dass man nicht gleich die Nerven Verliert.

1)Fenster sowie unter C++

Kurze Erklärung :
Diesen Tutorial erklärt wie man arbeiten soll für ein Fenster Programmieren, mit Hilfe von den Rausgeholten Verfahrensweg (Prozeduren) und Funktionen von den Windows DLL. Es sollte Angesagt werden, bei der Öffnung von dem Delphi editor, ein Standard Projekt wurde bereit hergestellt und so wurde bereit ein Fenster automatisch erstellt, dies ist nicht der fall unter c++. So werden wir dann mal Anschauen wie man ein Fenster programmieren kann, sowie das Basis Fenster, aber zumindest eher blitzt schnell und mit eine hohe menge weniger unerwünschte Eigenschaften. Und so kann man auch betrachten dass die Datei Größe deutlich reduziert worden ist, und wir werden auch Verstehen der warum.
kompas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44



BeitragVerfasst: Fr 06.08.10 20:19 
Und so starten wir mal gleich….

Die Vorbedingungen:
Hier sind die Schritte, um gut zu starten oder beginnen:
a) Zunächst müssen Sie, wie Üblich Delphi Editor starten.
[url=www.hostingpics.net/...?id=408914start.jpg]user defined image[/URL]
b) Dann müssen sie zu dem Projekt Menu Gehen.
[url=www.hostingpics.net/...hp?id=16865401..jpg]user defined image[/URL]
c) Und hier wird gefolgt sowie ich diese weitere Screenshoot selbst bearbeitet habe.
Achtung bitte hier gebe es ein 3x bild, also 3200 pixel hoch. (3 weiteren Phasen arbeit).
[url=www.hostingpics.net/...php?id=47976502.jpg]user defined image[/URL]

und hier dann die weitere Phasen...
d) Und so danach dass man dies alles bestätigt hat, dann kann man sich erzeugen, dass alles Verschwunden ist (es ist nix mehr zu sehen). Und so bleibt uns nur noch übrig die Projekt Datei „Project1.Dpr“ Anschauen.
Für dies folgt wieder sowie bei meinen weitere screenshoot.
[url=www.hostingpics.net/...php?id=74195603.jpg]user defined image[/URL]
kompas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44



BeitragVerfasst: Fr 06.08.10 20:56 
also jetzt für phases (e) hier diesen weitere schritt geht sowie hier Geschrieben ist.

e) Und so, ändern wir mal zum start dies Uses.
ausblenden Quelltext
1:
2:
 uses
    Windows,  Messages;

Hier werden wir nur diese beiden Units benötigen. (die Form Units wird Weggepustet also „Erase oder Delete“.
Und dann bleibt euch nur noch als Aufgabe die Speicherung übrig.
Also hier wird als „.Dpr“ datei Gespeichert.

So und hier, müssen sie etwas gedult haben, denn der mensch muss sich auch ernähren...
kompas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44



BeitragVerfasst: Fr 06.08.10 22:30 
Eben bevor hatte ich über die Datei Größe von dem Finale .EXE danach dass er Kompiliert worden ist Angedeutet, und so ist jetzt die Zeit für euch zu Verraten der Warum so es ist.

Die Antwort ist einfach oder leicht, denn mir benötigt nur die Unit Form zu unserem Programm zu Addieren und dass Programm wird gleich 100 kilo-byte mehr in Gewicht oder Größe haben.
Dies ist alles schön, aber mir darf nicht Vergessen, wenn diese Unit Forms unsere Datei vergrößert, wenn man ihn nicht dazu fügt, Behindert uns er unsere kopf zu Verbrechen, für jedes Fenster zu Programmieren und ebenso jede Änderung von dem Programm zu Verwalten.
Kurz Gefasst, diese Unit enthalt eine menge Papierkram über die fernster Kontrolle Verwaltung also ihre Erschaffung, ihre Ereignisse (Event), Eigenschaften (proprierty)…., Also starten wir mal gleich für die Vorteile zu kennen zu lernen von seine Fenster selbst zu Erschaffen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 Function WindowProcedure(hWnd: HWND;
                         uMsg: UINT;
                         wParam: WPARAM;
                         lParam: LPARAM): LRESULT; Stdcall;
Begin
     Case uMsg Of
         WM_DESTROY: PostQuitMessage(0);
     End;

     Result := DefWindowProc( hWnd, uMsg, wParam, lParam );
End;

Function Window Procedure…..
Diese Funktion Empfängt die Meldungen wie das Fenster bekommt. Sie Enthalt 4 Einstellungen und sie sind von eine Einzelne Form wie nicht umgeändert werden kann, denn alle Fenster müssen mit diese Funktion Verwaltet Werden. Das einzige Ding hier, wie nicht wichtig ist, ist der Namen wie man ihr Erteilen will. Hier zum Beispiel könnte man wen man lust hat, die Prozedur als „BerthaProcedure“(….) Benennen, und dies hätte ja kein Problem aufgelöst.

Ebenfalls bevor hatte ich Angedeutet, das die Haupt Funktion von diese Prozedur, ist jede Meldung wie das Fenster Bekommt zu Empfangen. Hier ist es nicht nötig in dem Fenster anzusagen, was das Fenster muss bearbeiten für jede Meldung oder Aktion wie sie Bekommt, denn hier gebe es dass kommando Befehl „DispatchMessage“, wie als Aufgabe hat, jede Meldung wie an dass Fenster Bestimmt ist, jede Meldung sie gleich selbst Ausführen (execute) oder sie zu den Richtigen Komponente von dem Fenster Auszuliefern (Dispatch).

so hier das andere Teil.

Sprechen wir mal über die Einstellungen (Parameter) von diese Prozedur:
hWnd
Diese Einstellung ist ein Fenster Identifikator (identifier), diese Enthalt die Adresse von dem Fenster Welche die Meldung soll Bekommen.
uMsg
Dieser zweite Parameter enthält die Meldung. Der Beispiel Kode hier oben benutzt, hatte die Weitere Meldung in dem Fenster angesagt:
„WM_DESTROY“. Diese Meldung warnt wenn ein Anfrage von Programm Schließung Vorkommt.
wParam, IParam
Diese Parameter enthalten weitere Parameter mit der Beziehung von der Gesendeten Meldung. Diese Parameter können bis zu 32bits Data enthalten. Hier zum Beispiel eine Sachlage (situation)wo sie Benutzt werden, oder Gerufen sind:

Die Maus Bewegt sich auf dem Fenster, hier Automatisch bekommt die Prozedur die weitere Meldung: „WM_MOUSEMOVE“. Die Einstellung wParam enthalt, wenn sie Vorhanden ist, die Tastatur Drucktaste wie Gleichzeitig mit der Maus Bewegung Gedrückt ist. Die Koordinaten von der Maus sind Gespeichert oder eher Eingelagert mit der Folgenden art und Weise: X Axis Bewegungen Koordinaten = LOWORD(IParam) und Y Axis Bewegungen Koordinaten = HIWORD(IParam).

PostQuitMessage;
Diese Prozedur Stoppt der Programm, und sendet die Meldung „WM_QUIT“. Naher werden wir anschauen womit oder wie weit die Meldung das Programm Betrifft.

DefWindowProc(hWnd, uMsg, wParam, IParam );
Bevor war Geschrieben dass Einigen Aufgefangen Meldungen müssen durch ein Hand geschriebenen Kode ausgeführt werden, und einigen anderen Meldungen sind gar nicht so wichtig. Wenn zum Beispiel die Fenster Größe Umgeändert wurde, dann wird die Weitere Meldung bei dem Fenster Eintreten: „WM_SIZE“. In dem Fall das die Änderung von der Fenster Größe keine Weitere Änderung an unserem Programm Bringt, So hat dann dass Fenster nur die Größe Umgeändert, und so Gebe es eine Funktion wie alle Unützlische Meldungen weg Pustet. Die Funktion „DefWindowProc(…)“ Enthalt die Möglichkeiten die Meldungen zu Auszuführen nach den Basis Aktionen. Hier bei dem Beispiel, wurde es getan am Ende der Anweisung (Instruction) Case, wo im Gesagt wurde wen die Meldung kein „WM_DESTROY“ Meldung ist, so soll sie Ausgeführt werden, als normale Ausführung


Zuletzt bearbeitet von kompas am Fr 06.08.10 23:58, insgesamt 1-mal bearbeitet
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 06.08.10 23:54 
Sorry, wenn ich Dich hier bremse, aber bitte beherzige diesen, von Christian gerade auch an anderer Stelle beworbenen Link, da dieser Thread vollständig unverständlich ist.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.

Für diesen Beitrag haben gedankt: elundril
kompas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44



BeitragVerfasst: Sa 07.08.10 00:02 
hallo BenBE!

Wass ist den hier Unverständlich?

Denn hier, befasse ich mich kein Tutorial zu schreiben, wo die Anfänger nicht etwass Verstehen.
Aber sowie der Tutorial Author, in Seinem Tutorial nicht nur von der Normale Delphi Syntax Spricht, aber er schreibt sehr gut über die Funktionen, so dass die Anfänger es Verstehen wenn sie ihren Programm Schreiben.

Denn es gebe hundert und hundert Tutoriale.
Aber kein Anfänger Versteht es sie Richtig, denn sie Beschreiben nur programm Syntax.

also sag man bloß jetzt, dass du noch nie diesen link Gekennt hast?
msdn.microsoft.com/e...633570(v=VS.85).aspx

denn hier, dies ist nicht weiter als die Erklärungen, aber made bei microsoft.

und für den moment, habe ich eine Pause müssen eingelegen,so dass ein Profis, meine Geschriebene Sätze Nach kontroliert!!!
kompas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44



BeitragVerfasst: So 08.08.10 00:09 
So, sowie niemanden mehr Antwortet, denke ich Elundril ist zu frieden, oder er hat Verstanden, von wass mein Tutorial Spricht.

Und so seht es dann in dem .Dpr file aus.
[url=www.hostingpics.net/...php?id=95276104.jpg]user defined image[/URL]

So ab hier, haben wir genug erfahren über die Fenster Prozedur Bestand. Und so werden wir jetzt mit unserem Delphi „Main“ Programm Befassen. Und so zum Start werden wir mal die drei Variabel (Variable) Anschauen, wie benötigt sind in dem Ganze Programm Ablauf.

ausblenden Quelltext
1:
2:
3:
4:
 Var
   WndClass       :TWndClassEx;
   MaFenetre      :THandle;
   Msg            :TMSG ;



Also fangen wir mal Mit WndClass an:

Diese Variabel, wie eine Struktur von dem Typ „TWndClassEx“ enthalt, Bezeichnet jede Benötigten Eigenschaften (Attribut) für ein Fenster zu Bearbeiten. Diese Variabel wird an den Parameter von der Funktion „CreateWindowEx“ Zugeteilt. Hier werde ich nicht jedes Mitglied von den Funktionen Erklären, denn dies währe zu tief als Erklärung, Also hier wenn ihr mehr über die Funktionen Erfahren wollt. Rate ich euch zu der Microsoft Web Seite zugehen, und in die Sektion MSDN Selbst anschauen.
Und für die Personen wie sich die Frage Stellen welche Differenz es Gebe zwischen „WndClass“ und „WndClassEx“. Eine Davon ergibt die Möglichkeiten als Erstens icon zu setzen (assign) wen dass Fenster Vermindert ist (minimised window), und die Andere Differenz liegt bei der Struktur Größe.


MaFenetre (Mein Fenster)

Enthalt die Adresse von dem Fenster wie Hergestellt wird. Diese Adresse ist Wichtig und mir soll sie in eine Globale Variabel (Global variable) einlegen (conserve). Diese Variabel Gestatt zu welche teil von dem Fenster die Meldung adressiert ist, von der Funktion „WindowProcedure“. Folglich wenn man ein knopf (Button)wollte herstellen, wie selbst ein Fenster ist, hier müsste man in dem Programm ansagen dass seine Fenster Eltern Rangordnung (Window Parent hierarchy) das Fenster „MeinFenster“ ist. Und so wird die Meldung direkt von dem Haupt Fenster selbst behandelt wo sie die Meldung an ihrem untern Fenster Knopf (Button) zugeteilt hätte.

Msg Variabel

Diese Weitere Variabel empfängt die Meldung wie das System enthalten hat. Diese Variabel werden wir benutzen, für einen Direkten Kontakt mit dem Fenster und mit den Ereignissen wie zugeteilt sind zu haben.

Hier also den delphi Kode wie die Haupt Sektion von unserem Programm Bedeckt:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
 Begin
     With WndClass Do
     Begin
          cbSize         := Sizeof( WNDCLASSEX );
          Style          := CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS;
          lpfnWndProc    := @WindowProcedure;
          cbClsExtra     := 0;
          cbWndExtra     := 0;
          hInstance      := hInstance;
          hIcon          := LoadIcon(0, IDI_APPLICATION);
          hCursor        := LoadCursor( 0, IDC_ARROW );
          hbrBackground  := COLOR_WINDOW;
          lpszMenuName   := Nil;
          lpszClassName  := 'Ma Fenêtre';
          hIconSm        := LoadIcon(0, IDI_APPLICATION);
     End;



Hier also in dem Inneren von der „With“ Anweisung, bevor seine Herstellung haben wir einigen Eigenschaften von dem Fenster Spezifisiert. Bei diesen Eigenschaften, möchte ich euch aufmerksam machen auf das Mitglied (member) „IpfnWndProc“ von der Variabel „WndClass“. Dieses Mitglied Anfragt ein Adressenverweis (pointer) auf die Prozedur wie den Befehl von dem Fenster abfangen wird, hier dieses Mitglied muss auf unsere Prozedur „WindowProcedure“ sein Adressenverweis festlegen (point to our procedure) wo Voher genant worden ist. Andere Wichtige Sache, das Mitglied „hInstance“ Anfragt die Instanz von unserem Programm oder eher die Adresse von unserem „*.Exe“, aber hier macht euch, euere Hosen nicht voll, die Delphi Entwickler haben uns nicht Vergessen, Es gebe schon eine Variabel wie dies alles Behalt, und diese benennt sich „hInstance“. Nun ja! Diese Enthalt der Selben Namen wie das Mitglied von der Struktur. Letzte Wichtige Sache, das Mitglied „IpszClassName“ Muss der Class Namen behalten, mit welchem sie selbst Wollen dass das Fenster dargestellt soll sein, hier hatte ich „MaFenêtre“ benutzt. Normale Weise holt man der Namen von eine Globale Konstant raus, aber hier für dieses Beispiel, sagen wir mal das dies zum Selbe kommt.

Und so sieht es dann in dem .Dpr File aus
[url=www.hostingpics.net/...php?id=59536905.jpg]user defined image[/URL]

So Sehen wir mal wie man speichern kann, oder eher sehen wir mal wie man unsere neue Klasse Bestätigen (Validate class)können.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 If RegisterClassEx(WndClass) = 0  Then
     Begin
          MessageBox(0, 
                PChar(' Scheiterung bei der Speicherung der Klasse!'),
                PChar('Fehler'),
                MB_ICONEXCLAMATION Or MB_OK Or MB_SYSTEMMODAL );
          Exit;
     End;


Eine Bestätigung von eine Klasse wird immer durch die Funktion „RegisterClassEx oder RegisterClass“ Ausgeführt. Wenn diese Klasse von dem System Anerkannt ist, oder Akzeptier ist, dann wird diese Funktion eine Zahl zurücksenden wie ungleich von 0 ist.

So Gehen wir mal jetzt zu der Fenster Herstellung:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
 MaFenetre := CreateWindowEx( WS_EX_CLIENTEDGE,
                                  'Ma Fenêtre',
                                  'Créer sa fenêtre sous Delphi !',
                                   WS_OVERLAPPEDWINDOW,
                                   50,
                                   50,
                                   640,
                                   480,
                                   0,
                                   0,
                                   hInstance,
                                   Nil );

     If (MaFenetre = NULL) Then
     Begin
          MessageBox(0, PChar('Échec lors de la 
                          création de la fenêtre !'),
                              PChar('Erreur'),
                              MB_ICONEXCLAMATION Or 
                              MB_OK Or MB_SYSTEMMODAL );
          Exit;
     End;


Das Fenster ist Hergestellt mit Hilfe der „CreateWindowEx oder CreateWindow“ Funktion, Diese Sendet ein Handel zurück wie das Fenster identifiziert. Hier was die Parameter von diesen Funktionen Anbelangt, Ratte ich euch die MSDN Sektion von Microsoft anschauen. Nach der Herstellung von dem Fenster benötigt man ein Kontrolle zu bearbeiten, ob das Fenster hergestellt ist, in dem fall dass das Fenster nicht Hergestellt ist, so muss man dass Programm Beenden, für die Fehler zu Verhindern.

Also hier dies ist dann die Weitere Phase unter dem .Dpr file.
[url=www.hostingpics.net/...php?id=43254006.jpg]user defined image[/URL]

Hier also Achtung, sowie ich auf den Screenshoot angedeutet habe, bitte noch nicht die Fenster Kontrolle Bearbeiten, denn es fehlt noch ein Letztes Teil von dem Programm.
kompas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44



BeitragVerfasst: So 08.08.10 19:02 
Also Bis jetzt ist das Fenster noch nicht Sehbar, hier muss man zuerst noch den Befehl Erteilen, und dies ist diese letzte Arbeit Phase:

ausblenden Quelltext
1:
2:
 UpdateWindow( MaFenetre );
     ShowWindow( MaFenetre, SW_NORMAL );



Es ist nicht alles, dass man nur dass Fenster Anschaue befehl erteilt hat, hier, sowie dass Fenster zum Ersten mal Auftaucht, hier muss man auch Aktualisieren (Update). Und so wird hier weiterhin „UpdateWindow“ zugeteilt wie das Fenster Aufrisschen wird wen er die Meldung „WM_PAINT“ sieht oder liest.

Und jetzt Sehen wir mal der System von den Meldungen Verwaltungen von unserem Programm an sowie die Haupt Wiederholung (loop) von diesem:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 Repeat
           If PeekMessage( Msg, 0, 0, 0, PM_REMOVE ) Then
           Begin
                TranslateMessage( Msg );
                DispatchMessage( Msg );
           End

     Until Msg.Message = WM_QUIT;
     Halt( Msg.wParam );

end.


Was ist denn die Haupt Wiederholung (Repeat = Loop)? Die Haupt Wiederholung Besteht darin jede Meldung wie das Fenster Bekommt unter die Lupe zu nehmen, und dies bis sie die Meldung „WM_QUIT“ Bekommt. Diese Meldung muss von dem Befehlkommando „PostQuitMessage“ Niedergelegt sein. Denn wenn sie die Meldung „WM_DESTROY“ Bekommt, dass Fenster sendet sich selbst automatisch die Meldung „WM_QUIT“.
Wenn ihr euch nicht mehr erinnert, dann geht ein bisschen in diesem Tutorial Zurück, (unter WindowProcedure). Die Funktion „Peekmessage“ wird benutzt für eine Meldung abzuholen wie bei der Windows Warteschlange gelagert ist. Danach dass die Meldung in der Windows Schlange schnell gelesen worden ist, gebe es die Möglichkeit die Meldung Auslöschen oder in bei diesem Platzt zu behalten. Für die Meldung Auszulöschen benutzt man die Konstant „WM_REMOVE“ (constant) als Letzten Parameter bei der Funktion „PeekMessage“.
Und in dem Fall dass man eher die Meldung bei dem Platzt will behalten, hier wird man eher die Konstant „WM_NOREMOVE“ als Letzten Parameter von der „Peekmessage“ Funktion benutzen.

In dem Inneren der Anweisung (Instruction) „IF“ enthalt zwei Funktionen. Die Erste hilft die bekommenen Meldungen umzusetzen gemäß dem Format. Vermuten wir mal als Beispiel dass eine Tastatur gedrückt worden ist und dass euere Tastatur die Italienische Format enthalt, hier wehre es nicht bequem das die Tastatur als Englisch anerkannt wehre…. Kurz, und so „TranslateMessage“ wie eine art Vorbehandlung ist, wie sich mit der Anpassung von den Meldungen mit euere Benutzeroberfläche (interface) behandelt. Und so kommt die Berühmte Funktion „DispatchMessage“ vor. Ich denke ich überrasche niemanden wenn ich ansage dass diese Funktion fähig ist die bekommene Meldung zu einer anderen Funktion weiterzuleiten wie diese Meldung entmystifizieren kann.
Aber wohin gehen denn die Meldungen wie zu unserem Fenster zugeteilt müssen werden?
Also diese werden weitergeleitet zu der Prozedur: „WindowProcedure“.

Die Prozedur Halt erzeugt ein Kode von einem Falschen zurück Sendung von dem Programm. In diesem fall, das Programm Verlässt sein Platzt und erteilt die Kontrolle an dem Betriebsystem weiter. Schließlich dieses Selbe Befehlkommando unter Delphi wehre „Application.Terminate“; die Zurück Sendung von dem Kode ist immer von dem Mitglied „wParam“ von der Variabel „Msg“ zurückgeholt.
Warum Benötigt man ein zurück Sendung von einem Kode?
Denn es ist eine Vereinbarung, oder eher Bennennen wir es ist als eine Grundform.

Ah! Ist es jetzt Fertig?
Ja, also Kompilieren sie dies alles, und schauen sie die Differenz an, Bzw. die Datei Größe von euere Programm. Und die Vollständige Differenz liegt in dem fall dass man die Unit Form in dem Projekt einziehen benötigt, wo die Größe beträchtlich von dem Programm Erhöht werdet. Aber dies liegt jetzt an euch, ob ihr selbst eher entscheidet über eine Schnelligkeit bei der Herstellung oder bei dem Programm Ausführung wollen!

Und hier also die Letzten Screenshoot von der Arbeit unter .Dpr, und hier werden sie auch Verstehen, der Warum dass eine Fehler Meldung Bekomme habe, und wie ich sie Erradiert habe.
[url=www.hostingpics.net/...php?id=41342407.jpg]user defined image[/URL]

Und so weiterhin, hier der Vollständige Delphi kode, wie ich für mein .Dpr file benutzt habe, für den Test.
Also Fehler Frei.

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
 program Project1;

uses
  Windows, Messages;

{$R *.res}

Function WindowProcedure(hWnd: HWND;
                         uMsg: UINT;
                         wParam: WPARAM;
                         lParam: LPARAM): LRESULT; Stdcall;
Begin
     Case uMsg Of
        WM_DESTROY:  PostQuitMessage(0);
     End;

     Result := DefWindowProc( hWnd, uMsg, wParam, lParam );
End;

Var
     WndClass       :TWndClassEx;
     MaFenetre      :THandle;
     Msg            :TMSG ;

Begin
     With WndClass Do
     Begin
          cbSize         := Sizeof( WNDCLASSEX );
          Style          := CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS;
          lpfnWndProc    := @WindowProcedure;
          cbClsExtra     := 0;
          cbWndExtra     := 0;
          hInstance      := hInstance;
          hIcon          := LoadIcon(0, IDI_APPLICATION);
          hCursor        := LoadCursor( 0, IDC_ARROW );
          hbrBackground  := COLOR_WINDOW;
          lpszMenuName   := Nil;
          lpszClassName  := 'Ma Fenêtre';
          hIconSm        := LoadIcon(0, IDI_APPLICATION);
     End;

     If RegisterClassEx(WndClass) = 0  Then
     Begin
          MessageBox(0, PChar('Echec lors de l''enregistrement de la class !'),
                              PChar('Erreur'),
                              MB_ICONEXCLAMATION Or MB_OK Or MB_SYSTEMMODAL );
          Exit;
     End;

      MaFenetre := CreateWindowEx( WS_EX_CLIENTEDGE,
                                  'Ma Fenêtre',
                                  'Créer sa fenêtre sous Delphi !',
                                  WS_OVERLAPPEDWINDOW,
                                  50,
                                  50,
                                  640,
                                  480,
                                  0,
                                  0,
                                  hInstance,
                                  Nil );


     If ( MaFenetre = 0) Then
     Begin
          MessageBox(0, PChar('Echec lors de la création de la fenêtre !'),
                              PChar('Erreur'),
                              MB_ICONEXCLAMATION Or MB_OK Or MB_SYSTEMMODAL );
          Exit;
     End;

     UpdateWindow( MaFenetre );
     ShowWindow( MaFenetre, SW_NORMAL );

     Repeat
           If PeekMessage( Msg, 0, 0, 0, PM_REMOVE ) Then
           Begin
                TranslateMessage( Msg );
                DispatchMessage( Msg );
           End
     Until Msg.Message = WM_QUIT;

     Halt( Msg.wParam );

end.


Und Ebenso viel Spaß für eine menge Ereignisse sowie WM_SIZE, WM_PAINT, WM_MOUSEMOVE, WM_ONTOP, WM_ACTIVATE… und denkt daran für die Parameter IParam und wParam zu benutzen…..

Und für die Personen, wie es nicht mitbekommen haben über die Abkürzung WM wie bevor dem Befehl benennt ist, also WM = Windows Message

Und hier also kann man diesen Kode als Basis benutzen, für später Menu, und andere Fenster einfügen.. also dies ist dann wieder eine neuen Tutorial oder ein Andere Sache.

Tutorial übersetzt von Kompas und die Basis von diesem Tutorial befindet sich bei diesem Internet link.
Hier bei der Übersetzung, habe ich selber alle Screenshoot bearbeitet, so dass es richtig Verständlich ist für die Anfänger.
eraquila.iquebec.com...i/compo/cmethode.htm

Also alle Wege führen nach Rom, nur muss man Wissen Welchen Weg dass man benutzen will.