Welcome to the new Friends-of-FPC!

Here you can find all kinds of information about the FreePascal Compiler. We have many tutorials and howtos as well as a selection of tools to help you with your programming. We also have some example codes for you. And if you want to contribute some information/ sources/ tools yourself you can do so.
Also we have finally relaunched the FoFPC forum. It's your chance for some Q&A about everything FreePascal.

Friends-of-FPC

Tutorials: Learn how to code with FreePascal.

Source Codes: A collection of examples, miscellaneous source codes and open source stuff.

Tools and Help Files: Intro- duction of some tools that might help you with FPC.

Community

Forum: Ask or answer questions about the FreePascal Compiler, programming or just babble about coding.

Contribute! Contribute your own Tutorial, Source Codes or Tools and send them to us!

Website

About: Information about Friends-of-FPC.org.

Grundlagen der Grafikprogrammierung - Teil 2 - by Delax

In diesem Teil gehen wir es locker an und lassen Grafikprogrammierung mal ganz außen vor. Vielmehr geht es erst einmal um das Betriebssystem: Windows.

Andre LaMothe sagte mal "In Windows zu programmieren ist wie zum Zahnarzt zu gehen: Man weiß das es gut für einen ist, aber niemand mag es." Ich für meinen Teil habe Windows-Programmierung lange Zeit höflich vermieden. Als es dann doch Zeit war verbrachte ich 3 Wochen in der Hölle, aber inzwischen mag ich es sogar. Wirklich. Ganz ehrlich. Mist, das glaube ich mir nicht mal selber ;)

Wenn wir heute von Windows reden, meinen wir eine Version von Win32, also Win95, 98, NT4 oder 2000. Diese sind Multitasking und Multithreading fähig. Das bedeutet: mehrere Programme können gleichzeitig ausgeführt werden und diese Programme können aus mehreren Unterprogrammen und Aufgaben bestehen, die ebenfalls gleichzeitig ausgeführt werden. So - und jetzt zur Realität.

Windows hat im Kern den sogenannten Scheduler. Dieser macht nichts anderes, als jedem Programm welches gerade startet eine Prozessnummer zuzuweisen. Aus der Sicht von Windows ist jedes Programm ein Prozess. Jene Prozessnummern werden nun in eine Prozessliste eingetragen. Unter NT kann man sich diese Prozessliste bequem anzeigen lassen: CRTL, ALT, DEL und dann "Task Manager" und "Prozessliste". Der Scheduler ruft die Prozesse in der Prozessliste nacheinander für Sekundenbruchteile auf. Gleichzeitig läuft da also gar nichts, nur so schnell das man den Eindruck hat.

Und hier liegt auch schon ein Vierbeiner vergraben, denn die Entscheidung wie lange welcher Prozess läuft liegt bei Windows. Win kann und wird (!) euch gnadenlos den Teppich unter eurer Applikation weg ziehen, wenn es mal gerade Lust drauf hat. Der User hat kaum einen Einfluß darauf, da nützt auch das erhöhen der Priorität eurer Programme wenig.

Windows ist "event driven". Das bedeutet das Windows alles erst einmal als Ereignis (event) sieht, welches es dann als Nachricht (message) weiter verarbeitet. Allerdings sieht es so aus, das Windows die Nachrichten an euer Programm weiter leitet und ihr dann etwas mit diesen Nachrichten anfangen müsst. Ein Event kann z.B. ein Tastendruck des Nutzers sein aber auch die Aktivierung des Bildschirmschoners...

Wenn Windows Nachrichten an unser Programm weiter gibt brauchen wir eine Art Schnittstelle um diese Nachrichten zu verarbeiten. Dazu aber später noch mehr als euch lieb ist.

Sehen wir uns erst einmal ein simples Windows Programm an.

{$APPTYPE GUI}
{$MODE DELPHI}
program WinHello;

uses
  Windows;

begin
    MessageBox(0, 'Hello World', 'Hi there!', mb_Ok);
end.

Hier als Datei zum download

Das Programm gibt einfach nur ein Nachrichtenfenster aus. Kompiliert es mal und schaut es euch an. Um es zu kompilieren müsst ihr allerdings dem Compiler mitteilen, das es sich um ein Windows Programm handelt. Das macht ihr mit dem Parameter "-TWin32". Bei EditPlus werdet ihr vor dem kompilieren danach gefragt - von der Kommandozeile aus gebt "ppc386.exe source1.pp -TWin32" ein. Doch jetzt zur Obduktion ;)

{$APPTYPE GUI} - APPTYPE zeigt an, um welche Art Programm es sich handelt. hier ein Windows Programm innerhalb der Windows Oberfläche (Gegenteil: Konsolen Applikationen für Windows).

{$MODE DELPHI} - Dies weist den Compiler an, in den Delphi Modus zu wechseln.

MessageBox(0, 'Hello World', 'Hi there!', mb_Ok);

Hierzu ist etwas mehr Erklärung nötig. MessageBox gibt eine Windows Nachrichtenbox aus. Die Parameter dahinter bestimmen Aussehen und Verhalten der Box. Im Windows Guide steht folgendes über die Standard Windows MessageBox:

MessageBox(hwnd, lptext, lpcaption, utype);

Gehen wir einmal die Parameter durch:

hwnd - In unserem Falle NULL. Es ist das Handle der Box und zeigt an an welche Applikation die Box gebunden ist. Indem wir NULL setzen ist der Desktop das übergeordnete Fenster.

lptext - Das ist der Text den ihr ausgeben wollt - in unserem Falle "Hello World!"

lpcaption - Der Titel unseres Fenster "Hi there!"

utype - Das ist der einzig aufregende Parameter. Hier könnt ihr festlegen welche Buttons (OK, Cancel, Retry, ...) euer Fenster haben soll und welche Icons (Ausrufezeichen, ...) angezeigt werden sollen. Es gibt eine Menge Parameter, die hier angegeben werden können. Alle hier zu zeigen würde den Rahmen sprengen (und ist auch nicht Sinn der Sache). Schnappt euch ein Windows Tutorial und schlagt nach, was alles möglich ist.

So. Das war unser kleines Programm. Dummerwesie ist jedes Programm nicht ganz so einfach, deshalb macht an der Stelle erst einmal eine Pause und Compiliert das obere Programm. Schaut es euch an, spielt mit den Parametern und schaut dann, was dabei heraus kommt.

Obwohl ich alles langsam durchgehe soll das kein Windows API Kurs sein, sondern eher ein ganz schneller Überblick sein, gerade genug um ein Fenster zu öffnen. Bei entsprechender Nachfrage kann ich das zwar vertiefen, aber im Moment halte ich Windows sehr einfach.

So...bis zum nächsten Mal...

Delax/ Sundancer Inc.
[delax@sundancerinc.de]

Back to previous page

Useful Links









Link to us