Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bug (https://www.delphipraxis.net/179235-delphi-bug.html)

Luki206 21. Feb 2014 17:19

Delphi Bug
 
Hi, bei meinem Delphi XE 5 geht gerade irgendwie nicht mehr das ich z.B. schreibe
Delphi-Quellcode:
Label1.Caption
Da bekomme ich nach dem Punkt nicht mehr die gewohnte Liste sondern eine Liste mit völlig anderen und auch Unbekannten (wenn auch nur mir) Inhalten.. Ich kann jetzt auch kein Screenshot machen weil sonst die Liste immer wieder sich ausblendet..
Aber hier mal mein Code:
Delphi-Quellcode:
procedure TForm1.WriteIni;
var Lini: TInifile; Lind: Integer; Lschreibnach: String;
begin
  Lini := TIniFile.Create('C:\ProgramData\Lukas\Test.ini');
  try
    for i := 0 to Linte -1 do begin  //Linte ist in private deklariert
     Lschreibnach := 'User'+IntToStr(Lind));
      Lini. //Hier bekomme ich das komische Fenster zu sehen..
     end;
  finally
   Lini.Free;
  end;
end;

Union 21. Feb 2014 17:22

AW: Delphi Bug
 
Kannst Du vielleicht den kompletten Code posten damit man das reproduzieren kann?

Harry Stahl 21. Feb 2014 17:33

AW: Delphi Bug
 
Code:
Lschreibnach := 'User'+IntToStr(Lind));
Hier hast Du eine überflüssige Klammer am Ende. Daher erkennt Delphi die LIni-Variable nicht. Die automatische Ergänzung funktioniert nur bis dahin, wo Dein Source-Code ohne Fehler ist.

Luki206 21. Feb 2014 18:07

AW: Delphi Bug
 
Ah ok, danke ;) hat geklappt :thumb:

Sir Rufo 21. Feb 2014 19:10

AW: Delphi Bug
 
Wenn
Delphi-Quellcode:
Linte
in
Delphi-Quellcode:
private
der Klasse definiert ist (also ein Feld der Klasse ist) dann nenn die doch einfach
Delphi-Quellcode:
Finte
und schon kannst du dir den Kommentar
Delphi-Quellcode:
// Linte ist in private deklariert
sparen.

Und wenn du die auch noch in
Delphi-Quellcode:
FCount
benennen würdest, dann ist dir und allen anderen klar, dass hier ein Klassenfeld ist, wo eine Anzahl gespeichert ist. Und das alles ohne einen Kommentar.

Kommentare sind nicht schlecht, aber sollten sparsam eingesetzt werden und nicht Offensichtliches oder eine schlechte Namenskonvention ausbügeln.

Auch dein
Delphi-Quellcode:
Lschreibenach
halte ich für schlecht, denn der Wert wird im Zusammenhang mit der INI als Section-Angabe benutzt.

Meine Empfehlung ist hier entweder
Delphi-Quellcode:
LSection
oder auch
Delphi-Quellcode:
LUserSection
.

Als Konstanten kannst du auch noch folgende definieren:
Delphi-Quellcode:
const
  INIFILE_NAME = 'C:\ProgramData\Lukas\Test.ini';
  USER_NAME_IDENT = 'Name';
  USER_NAME_DEFAULT = 'unbekannt';
Das Schreiben in die Ini sieht dann so aus:
Delphi-Quellcode:
LIni := TIniFile.Create( INIFILE_NAME );
try
  LIni.WriteString( LUserSection, USER_NAME_IDENT, FName[LIdx] );
finally
  LIni.Free;
end;
und das Lesen
Delphi-Quellcode:
LIni := TIniFile.Create( INIFILE_NAME );
try
  FName[LIdx] := LIni.ReadString( LUserSection, USER_NAME_IDENT, USER_NAME_DEFAULT );
finally
  LIni.Free;
end;
Ach ja, den Pfad würde ich eigentlich nicht hart kodieren, sondern KnownFolders oder SpecialFolders fragen

Sir Rufo 21. Feb 2014 19:57

AW: Delphi Bug
 
Da du ja XE5 hast, kannst du natürlich auch folgende "Schweinerei" benutzen:
Delphi-Quellcode:
uses
  Custom.Types;

const
  INIFILE_NAME : TFilePath = '%ProgramData%\Lukas\Test.ini';


LIni := TIniFile.Create( INIFILE_NAME.Expand );
benötigt wird dazu das hier
Delphi-Quellcode:
unit Custom.Types;

interface

type
  TFilePath = type string;

  TFilePathHelper = record helper for TFilePath
    function Expand : TFilePath;
    function Exists( FollowLink : Boolean = True ) : Boolean;
    function GetDirectoryName : string;
    function GetFileName : string;
    function GetFileNameWithoutExtension : string;
    function GetFileExtension : string;
    function ForceDirectories : Boolean;
  end;

implementation

uses
  System.SysUtils,
  Winapi.Windows,
  System.IOUtils;

{ TFilePathHelper }

function TFilePathHelper.GetDirectoryName : string;
begin
  Result := TPath.GetDirectoryName( Self.Expand );
end;

function TFilePathHelper.GetFileExtension : string;
begin
  Result := TPath.GetExtension( Self.Expand );
end;

function TFilePathHelper.GetFileName : string;
begin
  Result := TPath.GetFileName( Self.Expand );
end;

function TFilePathHelper.GetFileNameWithoutExtension : string;
begin
  Result := TPath.GetFileNameWithoutExtension( Self.Expand );
end;

function TFilePathHelper.Exists( FollowLink : Boolean = True ) : Boolean;
begin
  Result := TFile.Exists( Self.Expand, FollowLink );
end;

function TFilePathHelper.Expand : TFilePath;
var
  LSize : Cardinal;
begin
  SetLength( Result, MAX_PATH + 1 );
  LSize := ExpandEnvironmentStrings( PChar( Self ), PChar( Result ), Length( Result ) );
  SetLength( Result, LSize - 1 );
end;

function TFilePathHelper.ForceDirectories : Boolean;
begin
  Result := System.SysUtils.ForceDirectories( Self.GetDirectoryName );
end;

end.
Ich überlasse es deiner Fantasie, was du da in den Helper noch so alles reinbauen möchtest ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 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