Delphi-Quellcode:
PTimeBinar = ^TTimeBinar;
TTimeBinar = record
Stunden : array[1..5] of boolean;
Minuten : array[1..6] of boolean;
Sekunden : array[1..6] of boolean;
end;
PostMessage(Form1.Handle,WM_TIME_ANNOUNCING,1,Integer(@PTimeBinar));
procedure TForm1.OnTimeAnnounce(var Msg: TMessage);
var
p : TTimeBinar;
begin
case Msg.WParam of
1:
begin
p := PTimeBinar(Msg.LParam)^;
end;
{..}
PTimeBinar(Msg.LParam)^ =
Interpretiere Msg.LParam als PTimeBinar - bei diesem Typ handelt es sich um nen Pointer, weswegen auch folgender Schritt möglich ist - und dereferenziere diesen nach p (heißt kopiere den Inhalt des Pointers in die lokale, nichtsaussagende Variable p)
Falls du keine Berechnungen damit durchführen musst bzw. wenn die Änderung auch die echten Daten betreffen darf, wäre es besser, direkt mit Pointern zu arbeiten - sprich du machst folgendes:
Delphi-Quellcode:
var
p : PTimeBinar;
{..}
p := PTimeBinar(Msg.LParam);
EDITH:
Übrigens, in Delphi gibts die Konvention, Typendeklarationen mit
T zu beginnen wie korrigierterweise
TTimeBinar.
Dasselbe gilt auch für Pointer zu den definierten Typen, die..
mit
P wie in
PTimeBinar begonnen werden und
direkt über die Typendeklaration ihren Platz zu suchen haben...
Warum ich dir das klar mache.. nun
PostMessage(Form1.Handle,WM_TIME_ANNOUNCING,1,Integer(PTimeBinar));
Ne Variable, die nen Typnamen hat ("PTimeBinar"), ist verwirrend und irritierend =P
Edith, die Zweite; Potenzieller Bug:
Verwende keine Pointer auf lokale Variablen, da zur Laufzeit diese immer wieder überschrieben werden können (zB. durch ständiges aufrufen derselben Methode, wo sich die Daten, auf die gepointet wird, befinden)!