Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
aber vielleicht kann man das auch schlanker machen???
type
TItemData = record
ItemName :String[200];
StartTimeouble;
EndTime ouble;
_Unit :String[10];
ItemText :String[30];
end;
procedure MoveDataToVarArray(const Source; var Dest; len, start:Integer);
var
S, D: PChar;
I: Integer;
begin
S := PChar(@Source);
D := PChar(@Dest);
for I := 0 to len-1 do
D[start+I] := S[I];
end;
function ArrayRecordToVariant(const Rec: Array of TItemData): OleVariant;
var
Count:Integer;
Size :Integer;
VSize:Integer;
P,VP :PChar;
n :Integer;
begin
Count:=High(Rec);
Size :=SizeOf(Rec[0]);
VSize:=Size*(Count+1);
GetMem(P,VSize);
for n:=0 to Count do
MoveDataToVarArray(Rec[n], P^, Size, n*Size);
Result:=VarArrayCreate([0,VSize-1],varByte);
VP:=VarArrayLock(Result);
try
Move(P^,VP^,VSize);
finally
VarArrayUnlock(Result);
end;
FreeMem(P);
end;
procedure MoveDataFromVarArray(var Dest; const Source; len, start:Integer);
var
S, D: PChar;
I: Integer;
begin
S := PChar(@Source);
D := PChar(@Dest);
for I := 0 to len-1 do
D[I] := S[start+I];
end;
procedure VariantToArrayRecord(const V: OleVariant;var Data: Array of TItemData);
var
Size :Integer;
VSize:Integer;
P,VP :PChar;
n :Integer;
begin
VSize:=VarArrayHighBound(V,1)+1;
Size:=SizeOf(TItemData);
GetMem(P,VSize);
VP:=VarArrayLock(V);
try
Move(VP^,P^,VSize);
finally
VarArrayUnlock(V);
end;
for n:=0 to High(Data) do
MoveDataFromVarArray(Data[n], P^, Size, n*Size);
FreeMem(P);
end;
procedure BtnToOLEVariantandBack(Sender: TObject);
const
Len = 5;
var
ItemData1,ItemData2: Array of TItemData;
OV: OLEVariant;
Size: Integer;
begin
SetLength(ItemData1,Len);
// füllen des Arrays ....
OV:=ArrayRecordToVariant(ItemData);
Size:=(VarArrayHighBound(OV,1)+1) div SizeOf(TItemData);
SetLength(ItemData2,Size);
VariantToArrayRecord(OV,ItemData2);
end
Comment