ViaThinkSoft CodeLib
Dieser Artikel befindet sich in der Kategorie:
CodeLib → Programmierhilfen → Delphi
TValueListEditor von Borland hat einen Bug, wenn eine spezielle Eigenschaft während des OnShow-Ereignisses aufgerufen wird.
Gegeben sei folgender Code:
In diesem Fall wird es zu folgenden Problemen kommen:
1. Wenn man die Row:=, Col:=, .SetFocus Prozedur durchgeführt hat, hat die Zelle zwar den Fokus, aber es ist kein Blinke-Cursor sichtbar, der dem Benutzer verrät "hier kann man Eintippen". Der Textcursor wird erst sichtbar, wenn der Benutzer ein Zeichen eintippt oder eine Zelle explizit durch Anklicken selektiert!
2. Und was eigentlich noch schlimmer ist: Ist die (nicht sichtbar) selektierte Zelle mit einem Inhalt gefüllt, so müsste ja eigentlich der Text mit der Highlight-Farbe unterlegt sein. Ist er aber nicht! Sobald der Benutzer einen Buchstaben eintippt, ist der Text in der Zeile weg. Der Benutzer weiß also gar nicht, dass er sich im Überschreiben-Modus befunden hat.
Folgender Workaround schafft Abhilfe:
Bestätigt für folgende Delphi-Versionen: 7, Turbo 2006
Publikationen: Delphi-PRAXiS
Gegeben sei folgender Code:
procedure TForm1.FormShow(Sender: TObject);
begin
valuelisteditor1.Col := 1;
valuelisteditor1.Row := 1;
valuelisteditor1.SetFocus;
end;
In diesem Fall wird es zu folgenden Problemen kommen:
1. Wenn man die Row:=, Col:=, .SetFocus Prozedur durchgeführt hat, hat die Zelle zwar den Fokus, aber es ist kein Blinke-Cursor sichtbar, der dem Benutzer verrät "hier kann man Eintippen". Der Textcursor wird erst sichtbar, wenn der Benutzer ein Zeichen eintippt oder eine Zelle explizit durch Anklicken selektiert!
2. Und was eigentlich noch schlimmer ist: Ist die (nicht sichtbar) selektierte Zelle mit einem Inhalt gefüllt, so müsste ja eigentlich der Text mit der Highlight-Farbe unterlegt sein. Ist er aber nicht! Sobald der Benutzer einen Buchstaben eintippt, ist der Text in der Zeile weg. Der Benutzer weiß also gar nicht, dass er sich im Überschreiben-Modus befunden hat.
Folgender Workaround schafft Abhilfe:
procedure TForm1.FormShow(Sender: TObject);
begin
valuelisteditor1.Col := 1;
valuelisteditor1.Row := 1;
valuelisteditor1.SetFocus;
valuelisteditor1.Refresh; // Workaround für OnShow-Code
end;
Bestätigt für folgende Delphi-Versionen: 7, Turbo 2006
Publikationen: Delphi-PRAXiS
Daniel Marschall
ViaThinkSoft Mitbegründer
ViaThinkSoft Mitbegründer