AGB  ·  Datenschutz  ·  Impressum  







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

Zur Laufzeit erzeugte Editierfelder

Offene Frage von "Kurt Wallander"
Ein Thema von Kurt Wallander · begonnen am 23. Apr 2021 · letzter Beitrag vom 29. Apr 2021
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Zur Laufzeit erzeugte Editierfelder

  Alt 26. Apr 2021, 17:27
// Alternativ den Tag statt des Namens verwenden
Anstelle alternativ, immer so vorgehen, in allen events, ist mE. die beste Universallösung. Jedenfalls nutze ich es so in meinen dynamischen krams seitdem mich jemand aus der DP darauf gebracht hatte.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zur Laufzeit erzeugte Editierfelder

  Alt 26. Apr 2021, 17:42
In mindestens Win32 könnte man zwar auch zur Laufzeit ein Datenobjekt zu Integer casten und im Tag ablegen.
In der eigenen Datenklasse kann man dann ALLES speichern, was man will.
Aber im Formdesigner lässt sich sowas natürlich nicht nutzen.


Man kann die Komponenten ableiten und eigene Property einbauen.
Ist auch super, um mal bei allen gleichen Komponenten im später einen Bugfix zu integrieren oder Weiteres einzubauen.

Alternativ z.B. ein zusätzliches TDictionary<>, wo man Verknüpfungen zwischen Objekten (Objektzeiger) und irgendwas Anderem speichern kann.



Ach ja, INTEGER wurde eingefroren und wird im 64-Bit-Compiler nicht zu 64 Bit, was vorallem bei Casts zwischen Integer und Pointer/TObject knallen wird.

Aber Tag wurde zum Glück auf NativeInt geändert, womit es 64 Bit werden würde, damit solche bösen Castst nicht gleich fieß abrauchen, aber der Cast muß dafür natürlich auch den "richtigen" Typen verwenden.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (26. Apr 2021 um 17:45 Uhr)
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
260 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Zur Laufzeit erzeugte Editierfelder

  Alt 27. Apr 2021, 07:07
wenn Du sowieso Deine Edits zur Laufzeit erzeugts, kannst Du auch gleich eine TEdit Ableitung erzeugen, die zu der Aufgabenstellung passt. Dort kannst Du dann eine Referenz des passenden Typs verwalten und bist nicht auf die Tags beschränkt und brauchst auch nicht unbedingt Event handler zuzuweisen.

Edt:=TMySpecialEdit.Create(Self);

Wenn man Komponenten zur Laufzeit erzeugt, macht es keinen Sinn dort auch Namen zuzuweisen. Man riskiert nur Fehler, wenn Namen bereits existieren.

FindComponent brauchst Du nicht, wenn Du alle erzeugten Edits in einer TList<TMySpecialEdit> speicherts. Du kannst So auch einen Pool von Edits haben, deren Funktion Du nach Bedarf neu zuweisen kannst oder sie verstecken.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zur Laufzeit erzeugte Editierfelder

  Alt 27. Apr 2021, 07:23
dem stimme ich aber nicht ganz zu.
selbst wenn der Name nicht verwendet wird, so ist er beim Debuggen oft sehr hilfreich, z.B. kann man so an der Instanz in einem Eventhandler den Namen auslesen, was leichter zu verstehen ist, als irgendein ObjektZeiger.

aber ja, beim automatischen Erstellen muß man natürlich aufpassen, dass es keine Namenskonflikte gibt,
aber hier kann man z.B. den Namen aus einem Prefix und der Position in der Matrix gut generieren lassen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zur Laufzeit erzeugte Editierfelder

  Alt 27. Apr 2021, 08:09
Auch wenn ein Teil davon bereits erwähnt wurde, zähle ich das noch mal kurz mit auf:

Warum nicht eine Tabelle (Grid) für die Eingabe verwenden?

Wenn man Komponenten zur Laufzeit erzeugt, kann man denen auch passende Eigenschaften verpassen:
Delphi-Quellcode:
type
  TMyEdit = class(TEdit)
  private
    FPosition: TPoint;
  public
    property Position: TPoint read FPosition write FPosition;
  end;
{...}

Edt := TMyEdit.Create(Self);
Edt.Position.X := k;
Edt.Position.Y := i;
Edt.OnExit := ABCOnExit;
{...}

procedure TForm1.ABCOnExit(Sender: TObject);
begin
  k := TMyEdit(Sender).Position.X;
  i := TMyEdit(Sender).Position.Y;
  {...}
end;
Speichert man die Komponenten beim Erzeugen in einem Array, wird FindComponent nicht benötigt.
Delphi-Quellcode:
TForm1 = class(TForm)
private
  FMyEditABC: array of array of TMyEdit;
end;

Edt := TMyEdit.Create(Self);
FMyEditABC[k, i] := Edt;
  Mit Zitat antworten Zitat
Kurt Wallander

Registriert seit: 11. Mai 2020
Ort: Freiberg
35 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Zur Laufzeit erzeugte Editierfelder

  Alt 29. Apr 2021, 10:01
Glück auf!

Vielen Dank für die reichlichen Zuschriften. Habe mich an Ralfs Neumanns Vorschlag gehalten. Special thanks an ihn.
Aber gelegentlich tritt ein ganz anderes Problem auf. Beim Linken wird der Laufzeitfehler F2039: ...Ma-Orthogonalisieren.exe kann nicht erstellt werden.
Embacadero hat es offensichtlich nicht geschafft, das seit XE2 auftretende Phänomen auf den Leibe zu rücken. (Für Sezialisten: Die dcu-Dateien haben keinen zusätzlichen Punkt.)
Komischerweise werden andere Projekte anstandslos gelinkt - aber bei denen wird ja auch nichts geändert.



Viele Grüße
Kurt
  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 13:55 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