AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

DevExpress : einem Edit "wirklich" den Text zuweisen

Ein Thema von himitsu · begonnen am 19. Jun 2017 · letzter Beitrag vom 21. Jun 2017
Antwort Antwort
Foren-Tage 2017
DIE Konferenz für Delphi-Entwickler mit vielen Vorträgen und ganztägigen Workshops, veranstaltet u.A. von der Delphi-PRAXiS und Embarcadero.
21.-23. September 2017 in Hamburg · Mehr Infos unter forentage.de.
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
33.216 Beiträge
 
Delphi XE3 Professional
 
#1

DevExpress : einem Edit "wirklich" den Text zuweisen

  Alt 19. Jun 2017, 10: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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

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

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
111 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: DevExpress : einem Edit "wirklich" den Text zuweisen

  Alt 19. Jun 2017, 10:51
Ich würde da eher nicht den OnChange Event nehmen - besser wäre der OnValidate oder OnExit Event. Was spricht da dagegen?

Geändert von TigerLilly (19. Jun 2017 um 10:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
33.216 Beiträge
 
Delphi XE3 Professional
 
#3

AW: DevExpress : einem Edit "wirklich" den Text zuweisen

  Alt 19. Jun 2017, 11:38
Das würde dann doch beides nur aufgerufen, wenn der Text vom User eingegeben wurde.

Wird der Text aber programmseitig geändert, dann würde das nicht ausgelöst.
Aber hier kann ich es schon ins OnExit verschieben, da in diesem Fall vor der programmseitigen Zuweisung der Fokus in Eines der beiden Edits verschoben und danach wieder rausgenommen wird.


Aber es muß doch möglich sein, den Dingern irgendwie einen neuen Text zuzuweisen, egal in welchem Zustand das Edit grade ist.
Die doofe VCL und selbst FMX bekommen es doch auch problemlos hin.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (19. Jun 2017 um 12:04 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
1.035 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: DevExpress : einem Edit "wirklich" den Text zuweisen

  Alt 19. Jun 2017, 18:40
Hallo Himitzu,

ich habe das in der Regel über die Properties benutzt.
cxComboBoxCOM.Properties.Items[cxComboBoxCOM.ItemIndex]; und es gab dazu glaube ich entsprechende PropoertiesOnChange, etc. Events
Delphi-Quellcode:
procedure TFrmMain.cxDateEditMeterPropertiesChange(Sender: TObject);
begin

  if cxDateEditMeter.Date = DateOf( Now() ) then
    cxTimeEditMeter.Time := TimeOf( Now() ); // Ensure Today work also with Time

    if cxCheckBoxDate_Use.Checked then
      DmCOM_Commander.DateMeter := cxDateEditMeter.Date + cxTimeEditMeter.Time
    else
    begin
      DmCOM_Commander.DateMeter := S4NullDate;
    end;

end;

Ich weiss jetzt nicht ob TcxEdit das auch so hat, aber ich denke schon.
Probleme mit den Events hatte ich bisher nicht, aber ich habe das letzte Projekt auch noch auf Win7 und XE8,
und noch nicht auf 10.2 portiert.
Von DevEx möchte ich mich demnächst auch verabschieden, ich hatte es auch nicht sehr intensiv genutzt.

Rollo
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
111 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: DevExpress : einem Edit "wirklich" den Text zuweisen

  Alt 21. Jun 2017, 07:14
Wenn ich in so einer Sackgasse stecke, ist das immer ein Hinweis darauf, dass ich das Timing nicht verstanden habe.

Ich würde eine Methode DataWasChanged machen, die deine Änderungen erledigen. Diese Methode würde ich aufrufen:
- Nach dem Befüllen der Controls durch einen neuen Datensatz
- OnExit oder OnValidate des Controls

Ev. findest du noch bessere Gelegenheiten - zB eine finale Validierung aller Daten, das musst du besser wissen.

Wenn du unbedingt während des Tippens den Split der Eingabedaten machen möchtest, würde ich ein zusätzliches Control einführen. Dann hast du das Eingabefeld + zwei Ausgabefelder, die das Ergebnis zeigen. Aber da kenne ich deine Anforderung zu wenig.

Im OnChange (welcher auch immer) zu ändern ist jedenfalls keine gute Idee + macht den Code "wackelig" und anfällig.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf