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/)
-   -   Ist String ein gültiger Variablenname (https://www.delphipraxis.net/181911-ist-string-ein-gueltiger-variablenname.html)

v2afrank 17. Sep 2014 13:18

Delphi-Version: 5

Ist String ein gültiger Variablenname
 
Hallo In einem meiner Programme hat der Benutzer die Möglichkeit eine eigene Oberfläche zu entwerfen.
Dazu kann er auch Namen für die einzelnen Objekte vergeben. Wie kann ich am einfachsten überprüfen ob es ein gültiger Delphi Variablenname ist.
Ich würde ansonsten einfach hingehen ein Control anlegen und diesem dem Namen des Users zuweisen und abwarten ob eine Exception kommt. Gibnt es dafür eine Funktion ?

Dejan Vu 17. Sep 2014 13:36

AW: Ist String ein gültiger Variablenname
 
Was passiert denn, wenn Du das machst? Der Inhalt 'Name' hat ja zunächst nichts mit dem Feldnamen der Komponente zu tun.

DeddyH 17. Sep 2014 13:39

AW: Ist String ein gültiger Variablenname
 
Könnte man nicht einfach intern einen Tiefstrich voranstellen, den man aber nicht anzeigt? Also der Benutzer nennt das Dingen z.B. String, daraus wird dann _String.

himitsu 17. Sep 2014 13:51

AW: Ist String ein gültiger Variablenname
 
SysUtils.IsValidIdent und das wird intern auch vom TComponent.Name verwendet.

ExceptionOverflow 17. Sep 2014 13:59

AW: Ist String ein gültiger Variablenname
 
Zitat:

Zitat von DeddyH (Beitrag 1272880)
Könnte man nicht einfach intern einen Tiefstrich voranstellen, den man aber nicht anzeigt? Also der Benutzer nennt das Dingen z.B. String, daraus wird dann _String.

Genau so etwas in der Richtung dachte ich mir auch! Da spart man sich auch erst eine Abfrage zu starten. Ich würde eine Konstante (const) vom typ string erstellen die dann z.B. diesen Wert hat: 'User_' und diese Konstante vor jeden vergebenen (vom User) Namen setzen. Und nach außen hin halt einfach die Konstante wieder "abziehen", damit der User auch den Namen sieht, den er selbst vergeben hat. :o

pertzschc 17. Sep 2014 14:31

AW: Ist String ein gültiger Variablenname
 
Zitat:

Zitat von ExceptionOverflow (Beitrag 1272885)
Genau so etwas in der Richtung dachte ich mir auch! Da spart man sich auch erst eine Abfrage zu starten. Ich würde eine Konstante (const) vom typ string erstellen die dann z.B. diesen Wert hat: 'User_' und diese Konstante vor jeden vergebenen (vom User) Namen setzen. Und nach außen hin halt einfach die Konstante wieder "abziehen", damit der User auch den Namen sieht, den er selbst vergeben hat. :o

Achtung, wenn der Nutzer auf denselben Gedanken kommt. Dann hast Du schnell: "User_User_Nachname". Das muss Dein "abziehen" dann verkraften!
Christoph

himitsu 17. Sep 2014 14:37

AW: Ist String ein gültiger Variablenname
 
Eine Komponente (
Delphi-Quellcode:
.Name
) kann man gern "String" nennen.
Selbst Eine im Formdesigner, solange diese Komponente kein Feld (Variable) in der Klassendeklaration besitzt.

Variablen, Konstanten, Typen, Prozeduren usw. (im QuellCode) unterliegen zusätzlich noch der Einschränkung der "reservierten Wörter" (siehe OH).

Dejan Vu 17. Sep 2014 14:44

AW: Ist String ein gültiger Variablenname
 
Zitat:

Zitat von pertzschc (Beitrag 1272897)
Achtung, wenn der Nutzer auf denselben Gedanken kommt. Dann hast Du schnell: "User_User_Nachname". Das muss Dein "abziehen" dann verkraften!
Christoph

Schafft man gerade noch so.
Delphi-Quellcode:
Function Abziehen (const Bezeichner : String; Const prefix : String = 'User_') : String;
Begin
  if substring (Bezeichner,1, Length(Prefix))=prefix then
    result := Substring (Bezeichner, Length(Prefix)+1, maxint)
  else
    result := Bezeichner;
End;

Jumpy 17. Sep 2014 15:08

AW: Ist String ein gültiger Variablenname
 
Nur noch Substring() durch z.B. Copy() ersetzen. :-D

himitsu 17. Sep 2014 15:24

AW: Ist String ein gültiger Variablenname
 
Und XE2 kennt bestimmt auch schon die StrUtils, sowie das Copy ohne den 3. Parameter.

Delphi-Quellcode:
if StartsStr(Prefix, Bezeichner) then
  Result := Copy(Bezeichner, Length(Prefix) + 1)
else
  Result := Bezeichner;

// oder

Result := Bezeichner;
if StartsStr(Prefix, Result) then
  Delete(Result, 1, Length(Prefix));


Sollte es Probleme beim Prefix geben, also bei der Unterscheidung ob programmseitiges Prefix oder Namensteil des Benutzers,
dann einfach ein Zeichen als Prefix verwenden, welches man für die Benutzereingabe an dieser Stelle sperrt.


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