Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Constant Expressions (https://www.delphipraxis.net/70840-constant-expressions.html)

Prototypjack 5. Jun 2006 16:16


Constant Expressions
 
Hallo,
Ich habe hier einen Fehler, und er ist Einer der wenigen, deren Auftreten ich vollkommen verstehe, mir die Lösung jedoch unklar bleibt:
Ich habe eine Liste von Strings(Benötigt für die Multilingualität des Programmes, es dürfen keine Resourcestrings sein, da man die afaik nicht zur Laufzeit verändern darf/kann). Jedoch will ein Array keinen dieser Strings annehmen(vorher wurde es mit Ressorcestrings geregelt), weil diese eben nicht Konstant sind.
Folglich ergibt sich ein Fehler, einer der vollkommen verständlich ist, meine Frage lautet also:
Gibt es eine Möglichkeit Resourcestrings zur Laufzeit zu verändern? Oder, gibt es eine Möglichkeit das Array dazu zu bringen die Nicht-Konstanten Strings anzunehmen?

Danke, für die Aufmerksamkeit, das wars auch schon
Gruß,
Max

Zacherl 5. Jun 2006 16:22

Re: Constant Expressions
 
Du könntest versuchen die Strings zu Laufzeit z.B. im OnCreate Ereigniss zuzuweisen.

Florian

Prototypjack 5. Jun 2006 16:27

Re: Constant Expressions
 
Ja, das mache ich ja sowieso, aber:
Resourcestrings sind afaik nicht zu verändern,
Normale Strings(mit denen alles möglich wäre, was ich benötige) nimmt das array nicht
Gruß,
Max

Zacherl 5. Jun 2006 16:33

Re: Constant Expressions
 
Wieso nimmt das Array keine normalen Strings?
Einfach so deklarieren: LanguageArray: array [0..100] of string;
Dann so die Strings zuweisen: LanguageArray[0] := 'Irgendein String';

Was für ein Fehler kommt denn bisher bei dir, wenn du normale Strings zuweisen willst?

Prototypjack 5. Jun 2006 16:35

Re: Constant Expressions
 
Delphi-Quellcode:
  Sci_KeyboardCommandMap: array[0..95] of TIdentMapEntry = (
    (Value: SCI_Null; Name: sKeyNoCommand),
Tja, er erwartet eine Konstante Expressions, jedoch ist sKeyNoCommand(welche ein String ist) keine.
Gruß,
Max

Zacherl 5. Jun 2006 16:38

Re: Constant Expressions
 
Was wäre, wenn du das Array so deklarierst:
Delphi-Quellcode:
Sci_KeyboardCommandMap: array[0..95] of TIdentMapEntry;
und dann beispielsweise im OnCreate Ereigniss folgendes machst:
Delphi-Quellcode:
Sci_KeyboardCommandMap[0].Name := sKeyNoCommand;
Sci_KeyboardCommandMap[0].Value := SCI_Null;
//Edit: Fällt mir grade noch ein: Das ganze kann nat. nicht gehen, wenn der Wert "Name" des TIdentMapEntry Konstrukts nicht als String deklariert wurde.

Prototypjack 5. Jun 2006 16:43

Re: Constant Expressions
 
Hmm, naja.
Ich schreibe gerade eine Komponente um die aus mehreren Units besteht und ich habe keine Ahnung wo ich das dann Füllen soll ;)

Gibt's nicht vielleicht doch einen anderen Weg?

Gruß,
Max

Btw, der Wert "Name" ist ein String.

Zacherl 5. Jun 2006 16:45

Re: Constant Expressions
 
Poste mal den Aufbau von TIdentMapEntry. Also in der Art sowas:
Delphi-Quellcode:
type
  TIdentMapEntry = class(TObject)

end;
//Edit:
Zitat:

Ich schreibe gerade eine Komponente um die aus mehreren Units besteht und ich habe keine Ahnung wo ich das dann Füllen soll
Im OnCreate Ereigniss der Komponente. Z.B. constructor MyComponent.Create(AOwner: TComponent);

Prototypjack 5. Jun 2006 16:46

Re: Constant Expressions
 
Klar, kein Problem:
Delphi-Quellcode:
  TIdentMapEntry = record
    Value: Integer;
    Name: String;
  end;
Das ganze befindet sich in der allseits bekannten Units Classes.
Gruß,
Max

Dax 5. Jun 2006 16:46

Re: Constant Expressions
 
Zitat:

Zitat von Prototypjack
Ich schreibe gerade eine Komponente um die aus mehreren Units besteht und ich habe keine Ahnung wo ich das dann Füllen soll ;)

Wie wärs denn mit dem initialization-Abschnitt der Unit? ;)

Zacherl 5. Jun 2006 16:48

Re: Constant Expressions
 
Zitat:

Zitat von Prototypjack
Klar, kein Problem:
Delphi-Quellcode:
  TIdentMapEntry = record
    Value: Integer;
    Name: String;
  end;
Das ganze befindet sich in der allseits bekannten Units Classes.
Gruß,
Max

Daran ist alles in Ordnung. Also probier mal eine Zuweisung, wie ich sie oben beschrieben habe. Entweder halt im initialisation Teil der Unit, der infach mit "initialization" eingeleitet werden kann, oder im OnCreate Ereigniss der Komponente.

Florian

Prototypjack 5. Jun 2006 16:53

Re: Constant Expressions
 
Hmm, das es einen Initialization-Teil gibt hatte ich ganz vergessen :oops:

Danke für eure Hilfe!
Gruß,
Max


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 Uhr.

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