Einzelnen Beitrag anzeigen

Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#2

Re: n00b-frage zu records/arrays/typecasting

  Alt 19. Jul 2006, 11:12
Du musst explizit Typen erstellen, damit du Arrays als Parameter nutzen kannst:
Delphi-Quellcode:
type
  rRec1 = record
            foo:byte;
            flag:boolean;
          end;
  rRec2 = record
            bar:string;
            flag:boolean;
          end;

  TMyArrayA = array [0..12] of rRec1;
  TMyArrayB = array [0..100] of rRec2;
  // damits dynamisch wird, so machen (SetLength nicht vergessen):
  {
  TMyArrayA = array of rRec1;
  TMyArrayB = array of rRec2;
  }

function hasFlag(aData:array):boolean;

var
arrayA: TMyArrayA;
arrayB: TMyArrayB;

implementation

// Das hier im OnCreate oder so einfügen, falls du die dynamischen Array oben nutzt:
{
SetLength(arrayA, 13); // entspricht array [0..12]
SetLength(arrayB, 101); // entspricht array [0..100]
}


//irgendein flag auf true?
function hasFlag(aData: TMyArrayA):boolean; overload;
var x:cardinal;
begin
  result := false;
  for x := low(aData) to high(aData) do
    if aData[x].flag = true then
    begin
      result := true;
      break;
    end;
end

function hasFlag(aData: TMyArrayB):boolean; overload;
var x:cardinal;
begin
  result := false;
  for x := low(aData) to high(aData) do
    if aData[x].flag = true then
    begin
      result := true;
      break;
    end;
end;
Soweit ich weiss, dürfte ein Typecast unter den Recordtypen nicht funktionieren,
deshalb musst du überladene Prozedureen schreiben, damit du *bequem* prüfen kannst.
(Diese ist dann mit hasFlag() aufrufbar und nimmt TMyArrayA als auch TMyArrayB an)
Manuel
  Mit Zitat antworten Zitat