![]() |
Re: Label => "Change"
Zitat:
das sehe ich genauso. Zitat:
Zitat:
Das Einzige was man jetzt noch mache muss, ist das onChange Event zur Laufzeit zuzuweisen. Das ist praktisch Copy & Paste Code. Zitat:
|
Re: Label => "Change"
Und ich bin der Meinung, das alles Qutasch ist, was ihr da macht. Wenn sich die Caption ändert, muss irgendwo im Quelltext stehen:
Delphi-Quellcode:
Und jetzt die alles entscheidende Frage? Wann hat sich die Caption geändert? Richtig, naqh dem obige Zeile ausgeführt wurde. Warum führt man den Code, der bei einer Änderung ausgeführt werden soll, danach nicht einfach aus?
Label1.Caption := 'neuer Text';
Wenn ich am Fernseher den Sender umschalte, dann muss ich doch aiuch nicht ständig gucken, ob ich umgeschaltet habe, weil ich weiß wann ich umgeschaltet habe, weil ich ja selber umgeschaltet habe. :wall: |
Re: Label => "Change"
Luckie hat Recht, denn ein Caption von einem Label wird schliesslich nicht direkt von einem Benutzer geändert. Bei einem TEdit ist das anders.
Dennoch ist es eine Ansichtssache, ob man sowas zentral über ein Event abwicklen will oder nicht. Schliesslich kann sich die Caption an mehreren Stellen im Programm ändern. Vergisst man dann, einmal die CheckCaptionChanged Prozedur aufzurufen, ist somit nicht garantiert, dass bei jeder Änderung der Caption eine entsprechende Reaktion passieren soll. Darüber hinaus: Wenn ich mein Form aus einem anderem Form aufrufe, muss ich auch dort sicherstellen, dass die besagte CheckCaptionChanged Prozedur aufgerufen wird. Dies liegt aber unter Umständen nicht mehr in der Verantwortung des Programmierers des 2. Forms. Deshalb tendiere ich dennoch zu einer Event-Lösung, da ich da sicher bin, dass ich wirklich jede Änderung mitbekomme. Besser noch: Wenn ich solch eine Funktionalität in einer späteren Phase des Programms benötige, müsste ich ohne Event-Lösung den gesamten Quellcode durchgehen und alle Stellen herauskristalisieren, an denen ich die Caption des besagten Label ändere und entsprechend die CheckCaptionChanged Prozedur aufrufen. |
Re: Label => "Change"
Zitat:
Allerdings ist auch in diesem konkrten Fall von Tommy1988 das Design schon sehr schlecht. Anscheinend ist hier auszuführender Code von der GUI abhängig. Irgendwo im Code muss, ja entschieden werden, oder es tritt ein Ereignis ein, dass jetzt eine Statusänderung erfolgt ist (die über das Label dem Benutzer angezeigt werden soll). Warum wird der von der Statusänderung abhängige Code nicht dort ausgeführt, wo sich der Status ändert? Beispiel: Ein Komponente kennt das Ereignis OnConnect, welches nach dem Erstellen einer Verbindung ausgelöst wird. Wenn ich Code nach dem Erstellen einer Verbindung ausführen will, dann gucke ich doch nicht, wann ich den Statustext ändere, sondern führe den Code direkt in dem Ereignis aus. Ich meine, wenn ich weiß, wann ich den Statustext ändern muss, dann weiß ich auch, wann ich meinen Code ausführen muss. :? |
Re: Label => "Change"
Zitat:
Delphi-Quellcode:
procedure tForm1.ChangeeLabelCaption(const s: string);
begin label1.caption := s; // Weitere Anweisungen... end; |
Re: Label => "Change"
Zitat:
Wo finde ich diese Datei die ich nachträglich erweitern muss bzw. wonach muss ich suchen? |
Re: Label => "Change"
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
was für eine Datei? |
Re: Label => "Change"
hier mal ein beispiel...
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type tMyLabel = class(tLabel) private fOnChange: tNotifyEvent; function GetText: TCaption; procedure SetText(const Value: TCaption); published property Caption: TCaption read GetText write SetText; property OnChange: tNotifyEvent read fOnChange write fOnChange; end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } myLabel: tMyLabel; procedure SetToTest(sender: tobject); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} { tMyLabel } function tMyLabel.GetText: TCaption; begin inherited; end; procedure tMyLabel.SetText(const Value: TCaption); begin if inherited caption <> value then begin inherited caption := value; if assigned(fOnchange) then fOnChange(self); end; end; procedure TForm1.FormCreate(Sender: TObject); begin myLabel := tMyLabel.Create(self); myLabel.Parent := self; myLabel.Left := 20; myLabel.Top := 20; myLabel.OnChange := SetToTest; myLabel.Caption := 'test'; end; procedure TForm1.FormDestroy(Sender: TObject); begin if mylabel <> NIL then FreeAndNil(MyLabel); end; procedure TForm1.SetToTest(sender: tobject); begin myLabel.Caption := 'nix da'; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 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