Für mich war es nur seltsam, das ich die Texte der Radio-Buttons ändern konnte ohne Fehlermeldung
Ein SendMessage/Perform an ein WinControl ist auch aus anderen Threads möglich, da Messages von Windows automatisch in den Thread synchronisiert werden, in welchem diese Komponente erstellt wurde.
Wenn beim Setzen der Caption im Setter aber noch mehr gemacht wird, wie z.B. direkt auf Variablen/Felder dieser Komponente oder auf verbundene "globale" bzw. verbundene Komponenten/Listen/... zuzugreifen, dann
kann wird es schnell schief laufen,
so wie man es beim Delete/Free leidlich bemerkt.
Zitat:
Delphi-Quellcode:
property Caption: TCaption read GetText write SetText stored IsCaptionStored;
procedure TControl.SetText(const Value: TCaption);
begin
if GetText <> Value then
SetTextBuf(PChar(Value));
end;
function TControl.GetText: TCaption;
var
Len: Integer;
begin
Len := GetTextLen;
SetString(Result, PChar(nil), Len);
if Len <> 0 then
GetTextBuf(PChar(Result), Len + 1);
end;
procedure TControl.SetTextBuf(Buffer: PChar);
begin
Perform(WM_SETTEXT, 0, Buffer);
Perform(CM_TEXTCHANGED, 0, 0);
end;
function TControl.GetTextLen: Integer;
begin
Result := Perform(WM_GETTEXTLENGTH, 0, 0);
end;
function TControl.GetTextBuf(Buffer: PChar; BufSize: Integer): Integer;
begin
Result := Perform(WM_GETTEXT, BufSize, Buffer);
end;
Aber dennoch bei sowas nicht immer drauf verlassen, dass es immer so implementiert bleibt, sondern direkt die Messages verschicken.