AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Published TStringList-Property lädt Daten zur Designtime nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Published TStringList-Property lädt Daten zur Designtime nicht

Ein Thema von freejay · begonnen am 25. Jun 2018 · letzter Beitrag vom 25. Jun 2018
Antwort Antwort
Seite 1 von 2  1 2      
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
272 Beiträge
 
Delphi 11 Alexandria
 
#1

Published TStringList-Property lädt Daten zur Designtime nicht

  Alt 25. Jun 2018, 09:59
Hallo zusammen,

ich habe schon lange eine um viele Funktionen erweiterte von TAdvStringGrid abgeleitete Komponente.

Nun habe ich eine TStringList-Property hinzugefügt, mit der man zur Entwurfszeit bereits Daten in das Grid füllen können soll.

Das funktioniert auch eigentlich, aber wenn ich das Projekt neu öffne werden die Daten, die korrekt in der dfm-Datei gespeichert werden, nicht wieder in das Grid übertragen.

Hier die nötige Codeabschnitte:

Delphi-Quellcode:
type
  TMyAdvStringGrid = class(TAdvStringGrid)
  private
    FDefaultData: TStringList;
    procedure SetDefaultData(const Value: TStringList);
  published
    property DefaultData: TStringList read FDefaultData write SetDefaultData;
  end;

procedure TMyAdvStringGrid.SetDefaultData(const Value: TStringList);
begin
  FDefaultData.Assign(Value);

  if FDefaultData.Text <> 'then
    StringToGrid(FDefaultData.Text); // füllt die Daten in das Grid
end;
(Natürlich wird FDefaultData auch im Constructor erzeugt und später wieder freigegeben)

Die Daten werden beim Öffnen des Projekts zwar korrekt von der dfm-Datei in FDefaultData eingelesen, es wird dabei aber offenbar nicht der entsprechende Setter (SetDefaultData) benutzt...

Kann mir hier jemand weiterhelfen?

Vielen Dank im Voraus!
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Published TStringList-Property lädt Daten zur Designtime nicht

  Alt 25. Jun 2018, 10:14
Probierst mal so?

Delphi-Quellcode:
  protected
    procedure Loaded; override;

..

procedure TMyAdvStringGrid.SetDefaultData(const Value: TStringList);
begin
  FDefaultData.Assign(Value);
  Loaded;
end;

procedure TMyAdvStringGrid.Loaded;
begin
  inherited;
  if FDefaultData.Text <> 'then StringToGrid(FDefaultData.Text);
end;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Published TStringList-Property lädt Daten zur Designtime nicht

  Alt 25. Jun 2018, 10:22
es wird dabei aber offenbar nicht der entsprechende Setter (SetDefaultData) benutzt
Offenbar? Was sagt denn der Debugger?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
272 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Published TStringList-Property lädt Daten zur Designtime nicht

  Alt 25. Jun 2018, 10:27
Ich habe ehrlich gesagt keine Ahnung, wie man eine installierte Komponente debugt...

Aber Björks Antwort hat mir bereits sehr geholfen: Vielen Dank!

Die Prozedur Loaded kannte ich echt noch nicht - und das nach fast zwanzig Jahren Delphientwicklung...

Allerdings werde ich Loaded nicht explizit so aufrufen: Durch das inherited würden da viel zu viel anderer Code mit ausgeführt.
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Published TStringList-Property lädt Daten zur Designtime nicht

  Alt 25. Jun 2018, 10:35
Hallo,
Zitat:
Ich habe ehrlich gesagt keine Ahnung, wie man eine installierte Komponente debugt...
Indem Du die zur Laufzeit erzeugst.
Ob dann aber das Loaded klappt, müsstest Du ausprobieren.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Published TStringList-Property lädt Daten zur Designtime nicht

  Alt 25. Jun 2018, 10:45
Ich habe ehrlich gesagt keine Ahnung, wie man eine installierte Komponente debugt
Wie jeden anderen Code auch. Ob die Komponente nun installiert ist oder nicht, zur Laufzeit wird der entsprechende Code ja immer aufgerufen. Setzt einfach einen Breakpoint in den Setter und du siehst schon ob der aufgerufen wird oder nicht.

Mit dem Loaded bin ich deiner Meinung: Das sollte auf keinen Fall im Setter aufgerufen werden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
272 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Published TStringList-Property lädt Daten zur Designtime nicht

  Alt 25. Jun 2018, 10:54

Wie jeden anderen Code auch. Ob die Komponente nun installiert ist oder nicht, zur Laufzeit wird der entsprechende Code ja immer aufgerufen. Setzt einfach einen Breakpoint in den Setter und du siehst schon ob der aufgerufen wird oder nicht.
Äh, das glaube ich nicht: Der Komponentencode wird doch schon beim Laden des Projekts ausgeführt. Da kann ich Breakpoints setzen bis ich umfalle...
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Published TStringList-Property lädt Daten zur Designtime nicht

  Alt 25. Jun 2018, 11:32
Zitat:
Ich habe ehrlich gesagt keine Ahnung, wie man eine installierte Komponente debugt...
Wie jedes andere Programm auch.
> Du startest ein zweites Delphi, welches du debuggst, inkl. deiner Komponente.


Tipp: Bei deiner BPL > Menü > Start > Parameter
* Host-Anwendung: C:\...\bin\bds.exe
* Parameter: -np -pDelphi
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Published TStringList-Property lädt Daten zur Designtime nicht

  Alt 25. Jun 2018, 11:46
Der Komponentencode wird doch schon beim Laden des Projekts ausgeführt. Da kann ich Breakpoints setzen bis ich umfalle...
Das gilt für die Design-Time, aber zur Laufzeit wird der Code eben auch ausgeführt. Du musst das Programm halt einmal im Debugger starten.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
272 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Published TStringList-Property lädt Daten zur Designtime nicht

  Alt 25. Jun 2018, 13:13
Zitat:
Ich habe ehrlich gesagt keine Ahnung, wie man eine installierte Komponente debugt...
Wie jedes andere Programm auch.
> Du startest ein zweites Delphi, welches du debuggst, inkl. deiner Komponente.


Tipp: Bei deiner BPL > Menü > Start > Parameter
* Host-Anwendung: C:\...\bin\bds.exe
* Parameter: -np -pDelphi
Danke für den Tip: Werde ich mir beim nächsten derartigen Problem mal näher ansehen.
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:34 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