Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Boolean.ToString (https://www.delphipraxis.net/202514-boolean-tostring.html)

Delbor 12. Nov 2019 18:35

Delphi-Version: 10.2 Tokyo

Boolean.ToString
 
Hi zusammen

Eigentlich wollte ich mir nur mal eine kleinen Spickzettel schreiben und hab in der prozedur AddNewNode einige Listeneinträge meiner Reportliste hinzugefügt:
Delphi-Quellcode:
  FReportlist.Add('procedure TOpenFileFrame.AddNewNode');
  FReportlist.Add('Node.Text := ' + Node.Text);
  FReportlist.Add('LRealName := ' + aRealName);
  FReportlist.Add('aCaption := ' + aCaption);
  FReportlist.Add('LIsdirectory := '+  aIsdirectory.ToString);
  FReportlist.Add('-***************************************-');
Das sieht dann so aus:

Zitat:

procedure TOpenFileFrame.FileSearcher1MatchFound
----------------
procedure TOpenFileFrame.AddNewNode
LRealName := P:\autorun.inf
LIsdirectory := 0
-------------------
procedure TOpenFileFrame.FileSearcher1MatchFound
----------------
procedure TOpenFileFrame.AddNewNode
LRealName := P:\Bahnforum
LIsdirectory := -1
-------------------
procedure TOpenFileFrame.FileSearcher1MatchFound
----------------
procedure TOpenFileFrame.AddNewNode
LRealName := P:\Cache.mxc3
LIsdirectory := 0
-------------------
procedure TOpenFileFrame.FileSearcher1MatchFound
----------------
procedure TOpenFileFrame.AddNewNode
LRealName := P:\Delbor Word - HTML
LIsdirectory := -1

Bislang ging ich immer davon aus, dass in Delphi False := 0; und True := <> -0 glit, was nichts anderes bedeute, dass True auch schon mal den Wert 23 haben kann. Die obigen Zeilen zeigen aber, dass
  • aIsdirectory.ToString für True -1 und
  • aIsdirectory.ToString für False 0
zurückgibt. Das hier hat auch nicht besonders viel zur Klärung beigetragen. Was gilt jetzt? Oder kann es sein, dass der wiederholte Wert für True einfach Zufall ist?

Gruss
Delbor

Papaschlumpf73 12. Nov 2019 18:42

AW: Boolean.ToString
 
Kannst du uns zeigen, wie du die Variable aIsdirectory deklariert hast und mit welcher Funktion du anschließend einen Wert zugewiesen hast?

Uwe Raabe 12. Nov 2019 18:44

AW: Boolean.ToString
 
Die Funktion ToString ruft intern BoolToStr auf und dort steht nun mal:
Delphi-Quellcode:
const
  cSimpleBoolStrs: array [boolean] of String = ('0', '-1');

DieDolly 12. Nov 2019 18:44

AW: Boolean.ToString
 
Dass True -1 zurückgibt und False 0 ist schon richtig.

Der schöne Günther 12. Nov 2019 19:27

AW: Boolean.ToString
 
Deswegen mache ich immer
Delphi-Quellcode:
myBoolean.ToInteger().ToString()
😎

Delbor 12. Nov 2019 19:38

AW: Boolean.ToString
 
Hi zusammen
Das ist der Ursprung in einer Hilfsklasse von TFilesearcher:
Delphi-Quellcode:
class function TSearchRecAnalyzer.IsDirectory(const
  SearchRec: TSearchRec): Boolean;
begin
  Result := TSearchRecAnalyzer.ContainsAttributes(SearchRec, faDirectory);
end;
Diese Prozedure wird aufgerufen, wenn TFileSearcher eine Datei oder einen Ordner gefunden hat:
Delphi-Quellcode:
procedure TOpenFileFrame.FileSearcher1MatchFound(Sender: TObject;
  const Path: string; const FileInfo: TSearchRec);
  var Complettpath, J: String;
begin
  if Assigned(FCurrentNode) then
  begin
    Complettpath := IncludeTrailingPathDelimiter(Path) +  FileInfo.Name;
    AddNewNode(FCurrentNode, FileInfo.Name, Complettpath,TSearchRecAnalyzer.IsDirectory(FileInfo));// <<<=
    FReportlist.Add('-------------------');
    FReportlist.Add('procedure TOpenFileFrame.FileSearcher1MatchFound');
    FReportlist.Add('----------------');
  end;
end;
in der Prozedur AddNewNode werden dem erzeugten Knoten schliesslich die Werte der Datei übergeben, die er repräsentiern soll:
Delphi-Quellcode:
  New(NameRec);
  NameRec^.RealName := aRealName;
  NameRec^.Caption := aCaption;
  NameRec^.IsDirectory := aIsdirectory;
  NameRec^.IsDB := LIsDB;
  Node.Data := NameRec;

Gruss
Delbor

Delbor 12. Nov 2019 19:56

AW: Boolean.ToString
 
Hi Uwe Raabe
Danke für die Antwort!
Zitat:

Zitat von Uwe Raabe (Beitrag 1451228)
Die Funktion ToString ruft intern BoolToStr auf und dort steht nun mal:
Delphi-Quellcode:
const
  cSimpleBoolStrs: array [boolean] of String = ('0', '-1');

Das klärt alles!

Gruss
Delbor


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr.

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