Immer dieses Rumraten und "Wo steht denn das und dies, ich weiß nicht wie man danach sucht"?
Einfach mal
IDE auf und machen, zack zack zack! *Peitschen-Smiley*
Hier, der Bequemlichkeit halber musst du das nur kopieren.
Und nein, der Aufruf von MessageBox hat nichts mit der
VCL zu tun, das ist der direkte Aufruf auf die
WinAPI-Funktion (
https://docs.microsoft.com/en-us/win...ser-messagebox).
Ja, das ist ein Konsolenprojekt.
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
SysUtils,
Windows;
type
TThreadParams =
packed record
Number: Integer;
Text:
String;
end;
PThreadParams = ^TThreadParams;
function ThreadFunc(
tp: PThreadParams): Integer;
var Number : Integer; Text :
string; s :
string;
begin
// Parameter lokalen Variablen zuweisen.
Number := PThreadParams(
tp)^.Number;
Text := PThreadParams(
tp)^.Text;
s := '
Zahl: ' + IntToStr(Number) + #13#10 + '
Text: ' + Text;
// ExitCode enthält Rückgabewert der Messagebox.
Result := MessageBox(0, PChar(s), '
Thread', MB_YESNO
or MB_ICONINFORMATION);
// Reservierten Speicher für Parameter wieder freigeben.
Dispose(
tp);
end;
procedure RunThread;
var
tp : PThreadParams;
Thread : THandle;
ThreadID : Cardinal;
ExitCode : Cardinal;
begin
// Speicher für Struktur reservieren.
New(
tp);
// Daten den feldern der Struktur zuweisen.
tp.Number := 42;
tp.Text := '
Die Antwort.';
// Thread erzeugen.
Thread := BeginThread(
nil, 0, @ThreadFunc,
tp, 0, ThreadID);
// Auf Beendigung des Threads warten.
WaitForSingleObject(Thread, INFINITE);
// Rückgabewert ermitteln...
GetExitCodeThread(Thread, ExitCode);
// ...und auswerten.
case ExitCode
of
IDYES: Writeln('
Benutzer hat "Ja" angeklickt.');
IDNO: Writeln('
Benutzer hat "Nein" angeklickt.');
end;
// Thread-Handle schliessen udn somit das Thread-Objekt zerstören.
CloseHandle(Thread);
end;
begin
try
RunThread;
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
Readln;
end.