AGB  ·  Datenschutz  ·  Impressum  







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

Methodenzeiger zur Designtime

Ein Thema von Medium · begonnen am 31. Mär 2011 · letzter Beitrag vom 31. Mär 2011
 
Medium

Registriert seit: 23. Jan 2008
3.687 Beiträge
 
Delphi 2007 Enterprise
 
#1

Methodenzeiger zur Designtime

  Alt 31. Mär 2011, 11:43
Mahlzeit!

Meine Problemstellung: Ich habe auf einem Formular diverse Komponenten unterschiedlicher Klassen sitzen, und diese sollen eine Beschriftung in Form eines Labels erhalten. Diese Beschriftung ergibt sich im Regelfall aus dem Namen der zu beschriftenden Komponente, es können aber Variationen nach diversen Regeln vorkommen (z.B. eine zweite Komponente spendiert einen Teil der Beschriftung, oder es sind Zeichen zu entfernen, etc.). Die Anzahl, Art, Anordnung und Funktion der Komponenten ist dabei völlig beliebig, d.h. ich kann keine "Labeled"-Komponenten erstellen, bzw. würde das die gewünschte Arbeitsersparnis nicht aufwiegen.
Das ganze muss noch unter Delphi 7 gehen.

Eine eigene Label-Komponente habe ich bereits, die würde ich gern dahin gehend erweitern. Meine Idee so weit:
Delphi-Quellcode:
  TMyLabelBuilder = procedure(var Output: String; String1, String2, String3, String4: String) of object;
  TMyLabel = class(TGraphicControl)
  private
    FCaption: String;
    FSource1: TComponent;
    FSource2: TComponent;
    FSource3: TComponent;
    FSource4: TComponent;
    FOnBuild: TMyLabelBuilder;
  protected
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Caption: String read FCaption write SetCaption;
    property Source1: TComponent read FSource1 write SetSource1;
    property Source2: TComponent read FSource2 write SetSource2;
    property Source3: TComponent read FSource3 write SetSource3;
    property Source4: TComponent read FSource4 write SetSource4;
    property OnBuildCaption: TMyLabelBuilder read FOnBuild write SetOnBuild;
  end;

implementation

procedure TMyLabel.Paint;
var
  s1, s2, s3, s4: String;
begin
  inherited;

  if Assigned(FOnBuild) then
  begin
    if Assigned(FSource1) then s1 := FSource1.Name else s1 := '';
    if Assigned(FSource2) then s2 := FSource2.Name else s2 := '';
    if Assigned(FSource3) then s3 := FSource3.Name else s3 := '';
    if Assigned(FSource4) then s4 := FSource4.Name else s4 := '';
    FOnBuild(FCaption, s1, s2, s3, s4);
  end;
  // Eigentliches Zeichnen
end;
Ich setze dann ein solches Label auf ein Formular, und schreibe dort einen Event-Handler für OnBuildCaption. Problem: Assigned(FOnBuild) scheint zur Designtime immer false zu sein, sprich die eigentliche Zuweisung der Methode findet nicht statt. Ließe sich das ähnlich, oder ggf sogar ganz anders lösen?
Ich könnte natürlich auf die Designtime verzichten, und dort mit einer Dummy-Caption arbeiten, aber es wäre erheblich komfortabler dort gleich die richtigen zu sehen. Besonders um die Platzierung besser handhaben zu können.

Bevor jemand fragt: Sinn des ganzen ist, dass solche Komponentengrüppchen bei uns oftmals einmalig erstellt werden, und dann vielfach und ggf. leicht abgewandelt kopiert werden, wobei sich die ganzen Namen der Komponenten ändern. Ich will mir/uns also im Grunde das zusätzliche manuelle Ändern der Beschriftungen ersparen. Das wäre ein erheblicher Zeitfaktor der sich so eliminieren ließe.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
 


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 12:31 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 by Thomas Breitkreuz