AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Unterschiedliches verhalten von TEdit, wenn auf Panel platziert

Unterschiedliches verhalten von TEdit, wenn auf Panel platziert

Ein Thema von bernau · begonnen am 8. Jul 2024 · letzter Beitrag vom 9. Jul 2024
Antwort Antwort
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.288 Beiträge
 
Delphi 12 Athens
 
#1

Unterschiedliches verhalten von TEdit, wenn auf Panel platziert

  Alt 8. Jul 2024, 12:10
Beim Umstieg von Delphi 11 auf Delphi 12 bin ich auf ein unterschiedliches Verhalten gestoßen. Habe dazu ein kleines Testprogramm.

Folgendes soll erreicht werden:

Ein TEdit soll eine Warnfarbe anzeigen, wenn weniger als 3 Zeichen eingegeben wurden, danach soll es die Farbe des Syles anzeigen. Habe dazu mal einen Testcode:

Delphi-Quellcode:
procedure TForm1.EditChange(Sender: TObject);
begin
  SetEditColor(TEdit(Sender), length(TEdit(Sender).text) <= 3);
end;

procedure TForm1.SetEditColor(const aEdit: TEdit; const aIsError: Boolean);
var
  lSelStart: Integer;
  lSelLenght: Integer;
begin
  lSelStart := aEdit.SelStart;
  lSelLenght := aEdit.SelLength;

  if aIsError then
    begin
      aEdit.StyleElements := aEdit.StyleElements - [seClient];
      aEdit.Color := clred
    end
  else
    begin
      aEdit.StyleElements := aEdit.StyleElements + [seClient];
      aEdit.Color := clWindow;
    end;

  aEdit.SelStart := lSelStart;
  aEdit.SelLength := lSelLenght;
end;
Ein Edit ist direkt auf dem Form platziert und ein Edit ist auf einem Panel platziert.

Beim Edit, welches direkt auf dem Form platziert ist, ist das verhalten wie erwartet. ab dem vierten Zeichen bekommt das Edit die Stylefarbe und der Cursor befindet sich hinter dem letzten Zeichen.

Beim Edit, welches auf dem Panel platziert ist, wird zwar die Farbe geändert, aber der ganze Text ist markiert. Was natürlich zur Folge hat, dass der bereits eingegebene Text beim nächsten Tastendruck entfernt wird.

Unter Delphi 11 war das Verhalten beider Edits gleich. Bei Delphi 12 ist das Verhalten der Edits wie beschrieben.

Übrigens ist bei beiden Edits nach dem vierten Zeichen "SelStart = 4" und "SelLength = 0". Wird bei dem Edit auf dem Panel aber komplett ignoriert und der ganze Text ist markiert.

Könnt Ihr das nachvollziehen?
Miniaturansicht angehängter Grafiken
bild_2024-07-08_130829584.png  
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.288 Beiträge
 
Delphi 12 Athens
 
#2

AW: Unterschiedliches verhalten von TEdit, wenn auf Panel platziert

  Alt 8. Jul 2024, 13:06
Ich rudere mal etwas zurück. Der Fehler tritt bei einem etwas älteren Projekt auf.

Ich habe mal ein neues leeres Projekt erzeugt und dort läuft der Code fehlerfrei.

Muss wohl mal die Projektoptionen beider Projekte vergleichen.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.288 Beiträge
 
Delphi 12 Athens
 
#3

AW: Unterschiedliches verhalten von TEdit, wenn auf Panel platziert

  Alt 8. Jul 2024, 16:08
Der Fehler tritt definitiv auf, wenn ein Style ausgewählt wird.

z.B.
Windwos 10
Luna
etc.


Der Fehler tritt nicht auf, wenn der Style "Windows" ausgewählt wird.


Jetzt noch mal eine Bitte: Kann das jemand nachvollziehen?

Neues VCL-Projekt.
In den Projektoptionen Style "Windows 10" auswählen. (Oder Luna)
Ein TEdit direkt auf das Form.
Ein TPanel auf das Form und darauf ein TEdit.
Quelltext aus dem ersten Post verwenden.

Danke
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de

Geändert von bernau ( 8. Jul 2024 um 16:11 Uhr)
  Mit Zitat antworten Zitat
Ancaron

Registriert seit: 24. Nov 2007
9 Beiträge
 
#4

AW: Unterschiedliches verhalten von TEdit, wenn auf Panel platziert

  Alt 9. Jul 2024, 11:07
Wird dir wahrscheinlich wenig weiterhelfen, aber unter 10.4 verhalten sich beide Edits wie erwartet gleich.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.288 Beiträge
 
Delphi 12 Athens
 
#5

AW: Unterschiedliches verhalten von TEdit, wenn auf Panel platziert

  Alt 9. Jul 2024, 16:35
Fehler tritt nur unter Delphi12 auf.

Habe mir jetzt beholfen, indem ich noch ein application.processmessages zugefügt habe.

Irgendwie wird beim Setzen von StyleElements etwas in die MessageQueue gesetzt, was SelStart und SelLenght nachträglich ändert, nachdem OnChange von dem Edit abgearbeitet wurde.

Delphi-Quellcode:
procedure TForm1.SetEditColor(const aEdit: TEdit; const aIsError: Boolean);
var
  lSelStart: Integer;
  lSelLenght: Integer;
begin
  lSelStart := aEdit.SelStart;
  lSelLenght := aEdit.SelLength;

  if aIsError then
    begin
      aEdit.StyleElements := aEdit.StyleElements - [seClient];
      aEdit.Color := clred
    end
  else
    begin
      aEdit.StyleElements := aEdit.StyleElements + [seClient];
      aEdit.Color := clWindow;
    end;

  application.ProcessMessages;

  aEdit.SelStart := lSelStart;
  aEdit.SelLength := lSelLenght;
end;
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  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:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz