![]() |
Dynamisches Object: OnChange zuweisen?
Ich möchte in dynamisch erstellten TRichEdit immer nach ganz unten scrollen, sobald sich am Text etwas ändert (OnChange).
Delphi-Quellcode:
Das geht so natürlich nicht, weil Sender ist ja nicht vom Typ TRichEdit. Wie kann ichs trotzdem hinkriegen?
//beim erstellen des TRichEdit, weise ich die procedure OnChange zu:
Channels[i].Log.OnChange:=MainForm.ScrollDownInLogs; //diese procedure soll diesen quelltext ausführen procedure TMainForm.ScrollDownInLogs(Sender: TObject); begin Sender.Perform(EM_SCROLLCARET, 0, 0); Sender.SelStart:=length(Log.text); end; |
Re: Dynamisches Object: OnChange zuweisen?
Zitat:
Delphi-Quellcode:
Grüße vom marabu
//diese procedure soll diesen quelltext ausführen
procedure TMainForm.ScrollDownInLogs(Sender: TObject); begin with Sender as TRichEdit do begin Perform(EM_SCROLLCARET, 0, 0); SelStart := Length(Log.Text); end; end; |
Re: Dynamisches Object: OnChange zuweisen?
Zitat:
Delphi-Quellcode:
Und den as-Typecast, der vorher eine is-Abfrage durchführt und bei nicht-Übereinstimmung eine ECastError Exception wirft.
TRichEdit(Sender).SelStart := 10;
Delphi-Quellcode:
Der harte Typecast ist schneller aber gefährlich, wenn nicht sichergestellt ist, das Sender wirklich ein TRichEdit ist. Der as-Operator is sicherer aber durch die zusätzliche is-Abfrage langsamer. Am besten ist also eine Kombination: Man frägt vorher in einer if-Abfrage mit is ab und macht dann harte Typecast in diesem if-Block, was sich aber erst aber mehreren Zeilen rentiert.
(Sender as TRichEdit).SelStart := 10;
Delphi-Quellcode:
if Sender is TRichEdit then
begin TRichEdit(Sender).SelStart := 10; TRichEdit(Sender).SelLength := 100; TRichEdit(Sender).Color := clYellow; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 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