AGB  ·  Datenschutz  ·  Impressum  







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

Zwei Array of const kombinieren

Ein Thema von Codehunter · begonnen am 18. Jul 2018 · letzter Beitrag vom 1. Aug 2018
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

Zwei Array of const kombinieren

  Alt 18. Jul 2018, 12:58
Delphi-Version: 10.2 Tokyo
Ahoi,

ich versuche für eine Formatierfunktion zwei Array of const zu kombinieren. Weil das Array aber typenlos ist komme ich gerade nicht weiter. Eigentlich dachte ich, ein Array of const wäre ein Array of Pointer. Deshalb wäre die Elementgröße ja fix. Aber so einfach isses denn doch nicht.
Delphi-Quellcode:
constructor ETechnikException.CreateFmt(const Fehlernummer: Integer;
  const Args: array of const);
var
  sFehler: string;
begin
  Self.Fehlernummer := Fehlernummer;
  case Fehlernummer of
    E_TECHNIK_ALLGEMEIN: sFehler := R_TECHNIK_ALLGEMEIN;
    E_TECHNIK_PFLICHTFELD_UNBESETZT: sFehler := R_TECHNIK_PFLICHTFELD_UNBESETZT;
    E_TECHNIK_PROGRAMM_AUSFUEHREN: sFehler := R_TECHNIK_PROGRAMM_AUSFUEHREN;
  end;
  inherited CreateFmt(R_TECHNIK_EXCEPTION, [sFehler, Fehlernummer] + Args); // <-- [dcc32 Fehler]E2029 ')' erwartet, aber '+' gefunden
end;
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zwei Array of const kombinieren

  Alt 18. Jul 2018, 13:23
Ein array of const ist ein array of TVarRec , was sowas wie eine Miniversion des Variant ist, allerdings ohne automatische Speicherverwaltung oder AutoCasts, wenn du es direkt nutzt.

Variable erstellen, Beides da reinkopieren und dann Dieses übergeben.
$2B or not $2B

Geändert von himitsu (18. Jul 2018 um 13:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zwei Array of const kombinieren

  Alt 18. Jul 2018, 13:28
Basierend auf diesem Blogbeitrag: http://rvelthuis.de/articles/articles-openarr.html , findest Du im Anhang ein Beispiel.

......
Angehängte Dateien
Dateityp: zip Combine Array of const.zip (2,2 KB, 6x aufgerufen)
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Zwei Array of const kombinieren

  Alt 18. Jul 2018, 13:29
Heißt du brauchst ein array of TVarRec und musst selbst TVarRec-Dinger reinstecken.


Ich hatte so etwas ähnliches mit Exceptions und Jonglieren der Exception-Argumente auch. Ich hatte sie mir für später gespeichert um die Meldung auch in anderen Sprachen anzeigen zu können. Kein Spaß.


Meine Empfehlung: Tu es nicht, mach es anders. Gib deiner ETechnikException einen Record in dem alles drinsteht was sie an weiteren Infos mitschleppen soll.

Delphi-Quellcode:
type
   TTechnikFehler = record
      fehlerText:            String;
      fehlerNummer:         Integer;
      geräteStatus:         Byte;
      esBestehtNochHoffnung:   Boolean;
   end;

   ETechnikFehler = class(Exception)
   public
      constructor Create(const technikFehler: TTechnikFehler);
      function getTechnikFehler(): TTechnikFehler;
   end;
Super leicht zu erweitern wenn später mehr hinzu kommt und zu lokalisieren.


Ja, du kannst deine Exception nicht mehr mit einem Einzeiler werfen, sondern füllst erst ordentlich dein TTechnikFEhler und wirfst die Exception dann. Aber das bisschen Mühe sollte es einem wirklich wert sein.

Geändert von Der schöne Günther (18. Jul 2018 um 13:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zwei Array of const kombinieren

  Alt 18. Jul 2018, 13:43
Ja, du kannst deine Exception nicht mehr mit einem Einzeiler werfen,
Gib deinem Record einen Constructor und dann geht das auch wieder einzeilig.

Oder eben mehrere Parameter statt einem Record. Geht auch mit zwei Contructoren an der Exception.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Zwei Array of const kombinieren

  Alt 18. Jul 2018, 13:51
Ja, du kannst deine Exception nicht mehr mit einem Einzeiler werfen,
Gib deinem Record einen Constructor und dann geht das auch wieder einzeilig.

Oder eben mehrere Parameter statt einem Record. Geht auch mit zwei Contructoren an der Exception.
Das Thema hatten wir gerade erst

Davon abgesehen, @sakura und @Günther: Beides gute Vorschläge, die ich an verschiedenen Stellen gut gebrauchen kann. Das mit dem array of TVarRec war mir neu dass das mit Format() kompatibel ist. Wieder was gelernt
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

AW: Zwei Array of const kombinieren

  Alt 18. Jul 2018, 16:02
Einfach ein array of const in ein array of TVarRec umwandeln, dann kannst du dynamische Array Konkatenation nutzen und das kann wieder in ein array of const gegeben werden. Da du nur die TVarRec referenzen lokal nutzt, brauchst du auch kein Zauberwerk veranstalten, den Rudy in seinem Artikel beschreibt.

Delphi-Quellcode:
function _Args(const args: array of const): TArray<TVarRec>;
var
  i: Integer;
begin
  SetLength(Result, 0);
  SetLength(Result, Length(args));
  for i := 0 to High(args) do
    Result[i] := args[i];
end;

....

inherited CreateFmt(R_TECHNIK_EXCEPTION, _Args([sFehler, Fehlernummer]) + _Args(Args));
Wirklich raketenschnell wird der Code natürlich durch das ganze Array allokieren nicht, aber was solls, wir sind ja eh in einer Exception
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Zwei Array of const kombinieren

  Alt 1. Aug 2018, 07:29
Irgendwie ist dieser Thread in meinem Inbox.Gewusel untergegangen. Letztlich habe ich es vil einfacher gelöst. Aber das ändert nichts am Lernprozess Und ich möchte euch für eure Mühe danken.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  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 00:12 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