Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: RadioButton aus Thread nicht Löschbar

  Alt 9. Aug 2018, 11:26
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.
$2B or not $2B

Geändert von himitsu ( 9. Aug 2018 um 12:44 Uhr)
  Mit Zitat antworten Zitat