Liste der FAQ Einträge "Logik, Arrays"
Bitweises Testen von Bytes Bitweises XOR Array setzen/zurücksetzen Arbeiten mit Collections |
Bitweises Testen von Bytes
1. if (vbit1 AND 128) = 128 then ...;
2. type
TByteBit = 0..7;
TByteBits = set of TByteBit;
...
// Prüfen, ob Bit n gesetzt:
if n in TByteBits( vbit1 ) then ...
Bitweises XOR
type
TByteBit = 0..7;
TByteBits = set of TByteBit;
function SetXOR (s1, s2: TByteBits): TByteBits;
var b1: Byte absolute s1;
b2: byte absolute s2;
begin
Result := TByteBits (b1 xor b2);
end;
Array setzen/zurücksetzen
var
test : array[0..1000] of Boolean;
begin
FillChar(Test, SizeOf(Test), Integer(True|False));
.. oder..
FillChar(Test, SizeOf(Test), Ord(True|False));
end;
Arbeiten mit Collections
Eigenschaft wie 'FieldDefs' in TTable sind bekannt unter dem
Namen 'Collection'. Um selbst solche Collectionen in eigenen Komponenten zu
erstellen, ist relativ viel Code nötig. Hier ist ein Beispiel, wie ein
solcher Code aufgebaut sein muss.
unit Collection;
interface
uses classes;
type
TYourComponent = class ; { Den Typen deiner Komponente muss als }
{ forward deklariert sein, da er selbst in der TMyCollection benutzt wird }
TMyCollectionItem = class (TCollectionItem)
private
FProp: string;
procedure SetProp(const Value: string);
protected
procedure DefineProperties (Filer : TFiler) ; override ;
function GetDisplayName : string ; override ;
public
constructor Create (Collection : TCollection) ; override ;
destructor Destroy ; override ;
procedure Assign (Source : TPersistent) ; override ;
published
{ Hier werden deine eigene Collection Properties definiert }
{ Als Bsp. ist lediglich Prop definiert worden }
property Prop : string read FProp write SetProp;
end;
TMyCollection = class (TCollection)
private
FOwner : TYourComponent ; { Benutze hier den Typ deiner Komponente }
function GetItem(Index: integer): TMyCollectionItem;
procedure SetItem(Index: integer; const Value: TMyCollectionItem);
protected
function GetOwner : TPersistent ; override ;
procedure Update (Item : TCollectionItem) ; override ;
public
constructor Create (AOwner : TYourComponent) ;
function Add : TMyCollectionItem ;
property YourComponent : TYourComponent read FOwner ;
property Items[Index : integer]: TMyCollectionItem read GetItem write SetItem ; default ;
end;
TYourComponent = class (TComponent)
private
FItems: TMyCollection;
procedure SetItems(const Value: TMyCollection);
public
constructor Create (AOwner : TComponent) ; override ;
published
property Items : TMyCollection read FItems write SetItems;
end;
implementation
{ TMyCollectionItem }
procedure TMyCollectionItem.Assign(Source: TPersistent);
begin
inherited Assign (Source) ;
end;
constructor TMyCollectionItem.Create(Collection: TCollection);
begin
inherited Create (Collection) ;
end;
procedure TMyCollectionItem.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties (Filer) ;
end;
destructor TMyCollectionItem.Destroy;
begin
inherited Destroy ;
end;
function TMyCollectionItem.GetDisplayName: string;
begin
if (FProp = '')
then GetDisplayName := inherited GetDisplayName
else GetDisplayName := FProp ;
end;
procedure TMyCollectionItem.SetProp(const Value: string);
begin
FProp := Value ;
end;
{ TMyCollection }
function TMyCollection.Add: TMyCollectionItem;
begin
Result := TMyCollectionItem(inherited Add) ;
end;
constructor TMyCollection.Create(AOwner: TYourComponent);
begin
inherited Create (TMyCollectionItem) ;
FOwner := AOwner ;
end;
function TMyCollection.GetItem(Index: integer): TMyCollectionItem;
begin
Result := TMyCollectionItem(inherited GetItem(index)) ;
end;
function TMyCollection.GetOwner: TPersistent;
begin
Result := FOwner ;
end;
procedure TMyCollection.SetItem(Index: integer;
const Value: TMyCollectionItem);
begin
inherited SetItem (Index,Value) ;
end;
procedure TMyCollection.Update(Item: TCollectionItem);
begin
//
end;
{ TYourComponent }
constructor TYourComponent.Create(AOwner: TComponent);
begin
inherited Create (AOwner) ;
FItems := TMyCollection.create (Self) ;
end;
procedure TYourComponent.SetItems(const Value: TMyCollection);
begin
FItems := Value;
end;
end.