AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konstantes Array of Record deklarieren

Ein Thema von dummzeuch · begonnen am 3. Jul 2025 · letzter Beitrag vom 10. Jul 2025
Antwort Antwort
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.724 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Konstantes Array of Record deklarieren

  Alt 3. Jul 2025, 17:24
Delphi-Version: 12 Athens
Ich stehe gerade auf dem Schlauch.

Ich will ein dynamisches Array von Records als Konstante deklarieren. Eigentlich dachte ich, das geht so:

Delphi-Quellcode:
type
  TKameraTypRec = record
    Name: string;
    Breite: Integer;
    Hoehe: Integer;
    PixelSizeX: Extended;
    PixelSizeY: Extended;
  end;
  TKameraTypArr = array of TKameraTypRec;

const
  CAM_TYPES: TKameraTypArr = (
    (Name: 'GT1920'; // <== Compilefehler hier
     Breite: 1920;
     Hoehe: 1080;
     PixelSizeX: 0.00000586;
     PixelSizeY: 0.00000586)
    );
Aber der Compiler in Delphi 12 ist anderer Meinung:
Code:
[dcc32 Error] wf_Kamera.pas(84): E2003 Undeclared identifier: 'Name'
Erst, wenn ich explizit eine Array-Länge setze, funktioniert es:

Delphi-Quellcode:
type
  TKameraTypArr = array[0..0] of TKameraTypRec;
const
  CAM_TYPES: TKameraTypArr = (
    (Name: 'GT1920'; Breite: 1920; Hoehe: 1080; PixelSizeX: 0.00000586; PixelSizeY: 0.00000586)
    );
Ich dachte, das war eine der Neuerungen in einer der letzten Delphi-Versionen, dass man bei Array-Konstanten keine Länge mehr angeben muss???

Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.723 Beiträge
 
Delphi 12 Athens
 
#2

AW: Konstantes Array of Record deklarieren

  Alt 3. Jul 2025, 17:47
So sollte es gehen:
Delphi-Quellcode:
const
  CAM_TYPES_0: TKameraTypRec =
     (Name: 'GT1920'; // <== Compilefehler hier
     Breite: 1920;
     Hoehe: 1080;
     PixelSizeX: 0.00000586;
     PixelSizeY: 0.00000586
    );

const
  CAM_TYPES: TKameraTypArr = [CAM_TYPES_0];
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.488 Beiträge
 
Delphi 12 Athens
 
#3

AW: Konstantes Array of Record deklarieren

  Alt 3. Jul 2025, 17:59
Typisierte Konstanten sind IMMER "schreibgeschützte" Variaben.

Bei Strings, geht die Referenzzählung auf -1, für Konstanten ... bei Arrays klappt hier die Deklaration meistens nicht, für dynamische Arrays.


Wenn das NEUE, was der Vorgänger zeigt, klappt, dann hast du Glück.



Man kann hier zwar auch tricksen, aber du willst bestimmt nicht böse Casten und als Dummy die Arraystrucktur selbst zusammenklöppeln?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
280 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Konstantes Array of Record deklarieren

  Alt 5. Jul 2025, 21:51
Hmm, Name wird fett dargestellt, ist das evtl. ein reserviertes Wort?
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.488 Beiträge
 
Delphi 12 Athens
 
#5

AW: Konstantes Array of Record deklarieren

  Alt 5. Jul 2025, 22:33
Ja/Nein.
Das Highlighting im Forum arbeitet auch etwas anders, als das in der Delphi-IDE
und selbst das Highlighting in der IDE ist nicht immer korrekt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
495 Beiträge
 
Delphi 12 Athens
 
#6

AW: Konstantes Array of Record deklarieren

  Alt Gestern, 23:10
Ich dachte, das war eine der Neuerungen in einer der letzten Delphi-Versionen, dass man bei Array-Konstanten keine Länge mehr angeben muss???
Derzeit deklarierst du einen dynamischen Array-Typ, allerdings ein statisches Array. Deklariere TKameraTypRec mal als statischen Array-Typ. Dann klappt das auch:
Delphi-Quellcode:
//TKameraTypArr = array of TKameraTypRec;
TKameraTypArr = array [0..0] of TKameraTypRec;
Selbst falls du es kompiliert bekommen hättest, hätte der Compiler ja spätestens bei den runden Klammern ((...) ) gemeckert, weil diese nur für statische Array-Konstanten zulässig sind. Du hättest eckige Klammern ([...] ) verwenden müssen. Dass das mit dynamischen Array-Konstanten so nicht klappt hat leider mit dem Fakt zu tun, dass diese intern ganz anders gespeichert werden als statische Array-Konstanten. Es sind eigentlich nur Konstante Zeiger auf eine anonyme dynamische Array-Variable. Du kannst die Beschränkung mit Inline-Variablen umgehen, dann sollte es funktionieren, aber würde den Ramen sprengen.

Typisierte Konstanten sind IMMER "schreibgeschützte" Variaben.
Nicht "IMMER", aber man kann sagen "immer". Großgeschrieben deshalb nicht, weil das mit dem "schreibgeschützt" halt so pauschal auch nicht stimmt. Deshalb kannst du mit dynamischen Array-Konstanten auch so viel lustigen Schindluder wie den hier treiben:
Delphi-Quellcode:
const
  A: TArray<Char> = ['H', 'E', 'L', 'L', 'O'];
begin
  Writeln(A[0] + A[1] + A[2] + A[3] + A[4]); // >>HELLO
  A[0] := 'W';
  A[1] := 'O';
  A[2] := 'R';
  A[3] := 'L';
  A[4] := 'D';
  Writeln(A[0] + A[1] + A[2] + A[3] + A[4]); // >>WORLD
end.
Hmm, Name wird fett dargestellt, ist das evtl. ein reserviertes Wort?
Nein, ist es nicht. Du kannst es ja auch gern anstatt mit Name mit dem Feld Breite versuchen und wirst merken, dass es genauso wenig funktioniert.

und selbst das Highlighting in der IDE ist nicht immer korrekt.
Mein Favorit in Delphi ist bis heute: property add , aus irgendeinem mir nicht erklärlichen Grund wird dort (und zwar nur dort) der Begriff add hervorgehoben...
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.050 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Konstantes Array of Record deklarieren

  Alt Gestern, 23:54
Ich will ein dynamisches Array von Records als Konstante deklarieren.
Geht nicht, weil
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.503 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Konstantes Array of Record deklarieren

  Alt Heute, 08:05
Hallo,
ich verstehe noch nicht, wieso das überhaupt gehen sollte. Für mich ist "konstant" und "dynamisch" ein Widerspruch.
Wenn es eine Konstante sein soll, dann kann man doch auch ein festes Arry machen - oder nicht?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.488 Beiträge
 
Delphi 12 Athens
 
#9

AW: Konstantes Array of Record deklarieren

  Alt Heute, 09:35
OK, sagen wir es so
Es sind IMMER Konstanten, wo der Compiler versucht da einen Schreibschutz draufzulegen.
* es gibt Sonderfälle und Bugs,
* und via Pointerrumgefummel kann man das auch umgehen

Besonders geil ist es, wenn man ausversehn die Konstante Delphi-Referenz durchsuchenEmptyStr mit überschreibt.
(z.B. DevExpress-Grids zeigen dann in NULL-Spalten plözlich etwas an)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.724 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Konstantes Array of Record deklarieren

  Alt Heute, 09:35
ich verstehe noch nicht, wieso das überhaupt gehen sollte. Für mich ist "konstant" und "dynamisch" ein Widerspruch.
Wenn es eine Konstante sein soll, dann kann man doch auch ein festes Arry machen - oder nicht?
Es geht um die reine Bequemlichkeit. Ich weiß nicht von vorneherein, wie viele Einträge das Array hat und will das erst durch die Angabe in der Konstanten festlegen. Und wenn ich später einen weiteren Record hinzufüge, möchte ich nicht erst die Array-Größe ändern.

Für einfache Datentypen (z.B. array of integer) geht das ja, nur eben nicht mit einem array of Record.
Thomas Mueller
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:28 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