AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Objekt im onCreate erzeugen, aber wie?

Ein Thema von Marco Steinebach · begonnen am 15. Jul 2021 · letzter Beitrag vom 19. Jul 2021
Antwort Antwort
Seite 4 von 4   « Erste     234
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.275 Beiträge
 
Delphi 12 Athens
 
#31

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 17. Jul 2021, 09:29
Moin...

...deswegen funktioniert das nicht:

Zitat:
with fLabel do
with items do
Sorry ich konnte es mir nicht verkneifen...
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
490 Beiträge
 
Delphi 5 Enterprise
 
#32

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 18. Jul 2021, 12:00
Huhu,
Was konntest du dir nicht verkneifen?
with FLabel do // erstellt den Label
with Items do // bezieht sich auf die Combobox bzw. auf deren Items.
Das sind doch zwei völlig verschiedene Baustellen, wenn auch in der gleichen Methode?
Herzlich grüßt
Moo
Marco Steinebach
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.400 Beiträge
 
Delphi 7 Professional
 
#33

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 18. Jul 2021, 12:37
Das Problem hierbei ist einfach nur die Benutzung von With. Wenn man Pech hat und sich ein bisserl verschreibt, kommt ggfls. trotzdem kompilierbarer Code heraus und bei der Fehlersuche wird es dann ggfls. sehr haarig.
Delphi-Quellcode:
with fLabel do
begin
  left := self.left;
  top := self.top;
  focusControl := self;
  parent := self.parent;
  Caption := self.Caption;
end;
Ist erstmal soweit ok.

Mir persönlich wäre es aber so deutlich lieber:
Delphi-Quellcode:
fLabel.left := left;
fLabel.top := top;
fLabel.focusControl := self;
fLabel.parent := parent;
fLabel.Caption := Caption;
Sollte ich in diesem Fall nämlich links von der Zuweisung ein Attribut nehmen, dass es bei TLabel nicht gibt, aber sehr wohl bei Self, bekäme ich eine Compilermeldung.

Wenn Self z. B. eine TCombobox ist, so kann dashier nicht funktionieren:
Delphi-Quellcode:
fLabel.left := self.left;
fLabel.top := self.top;
fLabel.focusControl := self;
fLabel.parent := self.parent;
fLabel.Caption := self.Caption;
fLabel.ItemIndex := self.ItemIndex;
Bei der Verwendung von With aber sehrwohl:
Delphi-Quellcode:
with fLabel do
begin
  left := self.left;
  top := self.top;
  focusControl := self;
  parent := self.parent;
  Caption := self.Caption;
  ItemIndex := self.ItemIndex;
end;
Links vom Gleichheitszeichen werden alle an der Stelle bekannten Attribute akzeptiert und nicht nur die, die zum with fLabel do gehören. Und da man Self nicht zwingend angeben muss, da alles, was ohne Self und ohne eine andere Komponente ... angegeben wird, automatisch Self zugeordnet wird, kann man sich hier schon ziemlichen "Strubbel" einhandeln, der trotzdem kompilierbar ist.

Ohne with ist das Auffinden von Fehlern schlicht und einfach deutlich einfacher, weil hier immer eine eindeutige Angabe der Attribute nötig ist.

Und ob ich links nun immer fLabel. davor schreibe und mir rechts das self. erspare, ist vom Schreibaufwand jetzt auch nicht so unbedingt ein großes Mengenproblem
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
628 Beiträge
 
Delphi 11 Alexandria
 
#34

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 19. Jul 2021, 13:15
Hallo,
Mir ein bißchen Arbeit sparen.
Ich brauche ein TLabel, sagen wir:
Geburtsdatum
und rechts daneben, die Combobox. Das soll, wenn wir es zum Laufen kriegen, dann auch für die Kombi
TLabel mit TEdit
gehen.
Bislang hab ich halt, ganz normal ein TLabel erzeugt, beschriftet, dann das TEdit erzeugt. Da mein Projekt aber ziemlich viele solcher Felder hat dachte ich, ich könnte es vereinfachen. Daher hab ich der Combobox, meinetwegen auch dem TEdit, eine Caption mitgegeben, die dann aber das zugehörige Label kriegen soll.
Das sollte es werden.
Vielleicht ist ja mein ganzer Ansatz quatsch?

Herzlich grüßt
Moo
Dein Ansatz ist schon ok aber halt nicht ganz so simpel wie du vieleicht meinst. Dein Problem, das du nun noch hast, ist die Beschriftung des Labels, wenn du alles andere von mir gepostete implentiert hast. Dazu kannst du z.B. die Change oder Select Methode überchreiben. Das musst du selber testen, was dir da besser passt. Eventuell soll das Label auch erst beim Exit geändert werden, dazu gäbe es auch eine Methode.
Delphi-Quellcode:
TMsDatumCombo= class(TCombobox)
...
protected
  procedure Select; override;
...
end;

procedure TMsDatumCombo.Select;
begin
  inherited;
  FLabel.Caption := Text; // Hier kannst du den Labeltext setzen, je nach dem was ausgewählt wurde.
                          // Text ist der aktuell selektierte Eintrag in der Combo.
end;
Schau dir die doch bitte auch die Sourcen zu TCombobox und TEdit und deren Vorfahren an. Alles was da als Virtual oder Dynasmic deklariert ist, kannst du in einer abgeleiteten Komponente überschreiben und erweitern.

Geändert von Rolf Frei (19. Jul 2021 um 14:43 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:16 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