Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

DevExpress : einem Edit "wirklich" den Text zuweisen

  Alt 19. Jun 2017, 11:27
Moin,

ich werde langsam einfach nur noch wahnsinnig, mit dem Dreck. Ständig geht wieder irgendwas nicht, nach jedem Update.
Wie kann man deren Edits einen Text zuweisen, so dass es immer funktioniert.

Es fängt ja schon damit an, dass man tausende Properties hat, welche dafür in Frage kommen, aber Keines funktioniert immer zuverlässig.
Edit.Text, Edit.EditText, Edit.EditValue, Edit.EditingText, Edit.EditingValue, ...
Teilweise wird im Code von denen die Zuweisung fahrlässsig und vorallem ohne Fehlermeldung ignoriert (siehe TcxCustomTextEdit.WMSetText),
manchmal wird zwar der zugewiesene Text geändert, aber anstatt der neue Text drin steht, ist das Edit dann leer
und manchmal funktioniert es sogar.
Das unterscheidet sich dann jeweils, ob das Edit grade den Fokus hat, sichtbar ist oder ob der Nutzer den Text geändert hatte
und ob ich das sonstwo zuweise oder z.B. im OnChange eines der Edits.

Aktuelles Problem:
Einem Edit wird ein Text zugewiesen und im OnChange wird er aufgeteilt und ein Teil an in anderes Edit verschoben.
PS: Den selben Code gibt es bei uns nochmal an einem DBEdit, wo der geänderte Text aber an das Field.AsString zugewiesen wird, wo es niemals Probleme gibt.

Zuletzt hatte ich mir ein eigenes Property gebaut und einfach allem was zugewiesen, was aber nun auch nicht mehr funktioniert.
Delphi-Quellcode:
procedure TcxButtonEdit.SetTextReal(Value: string);
begin
  // BIGFIX für total unverständliches und sich öfters änderndes Verhalten
  // TEdit.Text:=... funktioniert immer und überall
  // cxEdit.Text:=... wird im Edit.Properties.OnChange total ignoriert (Zuweisung wird stillschweigend einfach nicht angenommen, siehe cxTextEdit TcxCustomTextEdit.WMSetText > TCimEdit/TcxButtonEdit)
  // cxEdit.EditText:=... im OnChange ohne ActiveControl=Self geht (scheinbar immer)
  // cxEdit.EditText:=... im OnChange mit ActiveControl=Self wird vernichtet (Text ist danach leer = '')
  // und wer weiß was sonst noch kommt
  if (Text = Value) and (EditText = Value) and (EditingText = Value) then
    Exit;
  Text := Value;
  if (Text <> Value) or (EditText <> Value) or (EditingText <> Value) then
    EditText := Value;
  if (Text <> Value) or (EditText <> Value) or (EditingText <> Value) then
    EditingText := Value;
end;
Im OnChange, mit Fokus im Edit, sind alle drei Property nach Text := Value; leer und bei den Anderen passiert nichts mehr.

Wir selber wissen auch, dass es eventuell eine Endlosschleife geben könnte, wenn im OnChange der Text geändert wird, also wird vorher das OnChange-Event abgehängt und dann der Text geändert.
Besonders geil, dass DevExpress beim Zuweisen an Edit.Text im OnChange das ebenfalls ignoriert.
Gut, mit EditText oder EditingText lies es sich dann doch zuweisen, ABER komisch ist dann (aber auch nicht immer)
und komisch ist dabei auch, dass unser OnChange dennoch doppelt aufgerufen wird, obwohl OnChange während der Änderung abgehängt war und zwar von TcxCustomTextEdit.SetEditingText .

Aktuell noch Delphi XE mit ExpressEditors Library 16.2.5
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (19. Jun 2017 um 11:47 Uhr)
  Mit Zitat antworten Zitat