Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Arry of Boolean = funkzt nicht (https://www.delphipraxis.net/27651-arry-boolean-%3D-funkzt-nicht.html)

Master_BB 13. Aug 2004 14:35


Arry of Boolean = funkzt nicht
 
hya,
ich habe derzeit ein objekt erstellt welches viele daten zu einem programm,
das kopiert werden soll, sammelt. So eine Variable bzw property ist ProgPathList : TStringList.
So nun brauch ich eine sammelvariable die zu jedem eintag in der Stringlist
einen Boolischen wert speichert.

nun wollte ich eine property anlegen die so aussieht
property PathChecked : Array of boolean ...
und da kommt ein fehler das sich dynamische arrays mit boolischen variablen nicht so recht vertragen.

kann mir jemand sagen wie ich das anders hinkrieg das zu jedem String der Stringliste
ein boolischer wert gespeichert werden kann.

Greetz
Master_BB

maximov 13. Aug 2004 14:43

Re: Arry of Boolean = funkzt nicht
 
Missbrauch einfach die sl.objects[i] als boolean! mit ein bissche gecaste sollte das kein problem sein. zb: sl.addObject('stringDing',pointer(true));

teebee 13. Aug 2004 14:44

Re: Arry of Boolean = funkzt nicht
 
z.B. so:
Delphi-Quellcode:
 StringList.Objects[x] := TObject(True);
Spart eine zweite Liste.
Gruß, teebee

Snoop007 13. Aug 2004 14:50

Re: Arry of Boolean = funkzt nicht
 
oder aber

Code:
type
 TMyBoolArray = array of Boolean;
 TMyClass = class
 public
 property PathChecked : TMyBoolArray;
für eine dynamisch grosse liste allerdings solltes du dann bei write die liste um ein element erweitern

das ganze machst du dann mit Setlength(<array>,<grösse>)

Master_BB 13. Aug 2004 15:24

Re: Arry of Boolean = funkzt nicht
 
hey danke snoop7,
jedoch warum muß ich die liste erhöhen?
Es ist doch ein dynamisch großer array, sprich unendlich lang wie die Stringliste.
oder seh ich das falsch?

easywk 13. Aug 2004 15:44

Re: Arry of Boolean = funkzt nicht
 
Hi.

Das siehst du falsch. Das dynamisch bezieht sich darauf, dass man die Größe verändern kann, man muss es aber auch machen. Nach der einfachen Deklaration hat das Array erstmal gar keinen Speicherplatz - wenn du etwas drinnen ablegen willst, must du die Länge definieren. Und dazu brauchst du halt setlength().

cu

Master_BB 13. Aug 2004 15:55

Re: Arry of Boolean = funkzt nicht
 
hm irgentwie krieg ich immer fehler wenn ich mit dem array arbeite.
ich glaub der bereich des arrays haut noch nicht hin.
in der write procedure des PathChecked hab ich das jetzt so gemacht

Set Length(FPathChecked, Succ(Length(PathChecked)));
FPathChecked := Value;

aber irgentwie hauts noch net hin obwohl ich doch jedes mal nach dem code her den array um 1s erhöhe.

Chewie 13. Aug 2004 16:17

Re: Arry of Boolean = funkzt nicht
 
Du musst dein Value einem Element des Arrays zuweisen, nicht dem Array selbst.

Master_BB 13. Aug 2004 16:43

Re: Arry of Boolean = funkzt nicht
 
ich kriegs nicht gebacken
kann nicht einer mal meines korriegiert posten? brauch diese funktion sonst komm ich nicht weiter.

Delphi-Quellcode:
type TBla = class
  private
    FPathChecked : TBoolArray;
    procedure SetPathChecked(const Value: TBoolArray);
  public
    property PathChecked : TBoolArray      read FPathChecked   write SetPathChecked;
  end;


procedure TPathItem.SetPathChecked(const Value: TBoolArray);
begin
  SetLength(FPathChecked, Succ(Length(PathChecked)));
  FPathChecked := Value;
end;
greetz

MacGuyver 13. Aug 2004 16:44

Re: Arry of Boolean = funkzt nicht
 
Moin auch!

Ja, das ist doch eine StringListe. Pack das doch einfach in den String rein. An das Ende ein | (Pipe) und dann ein * für True. Da kannst du auch 0 und 1 ran hängen. Ist egal. Beim Auslesen die Zeile mit Copy(String,Pos('|',String) + 1,1) auslesen und wenn ein Stern zurück kommt, war das Ding True. Du kannst dir auch mehere Pipe-Symbole aneinander hängen. Ein paar lockere Funktionen Scheiben:

Delphi-Quellcode:
Function PipeStrCount( aSt : String):Integer;
Function PipeStrItem( aSt : String; aNr : Integer):String;
Function PipeStrLongest( aSt : String):Integer;
Procedure PipeStrSetStr( Var aSt : String; aNeu : String; aNr : Integer);
Nur mal zur Inspiration. Dann kannste zweidimensional ohne Ende speichern.

Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:02 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz