Autor Beitrag
CarstenB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP, Win 7, FreeBSD
Delphi 2007 Prof., VS 2003
BeitragVerfasst: Fr 08.04.11 10:17 
Hallo,

ich beisse mir aktuell an einem etwas merkwürdigen Problem die Zähne aus und hoffe nun hier Anregungen/Tipps zu bekommen, die mich der Lösung etwas näher bringen.

Folgende Situation:

2x MDI-Formulare
1) enthält im Wesentlichen ein TStringGrid und ein TListView.
Das Ganze funktioniert als Debugger für eine SPS, im Stringgrid wird der Code angezeigt und in der rechten Spalte Informationen zum aktuellen Zustand/Werten von Symbolen, etc.
Im Listview können Symbole zur Beobachtung definiert werden.

Die Daten werden durch einen Hintergrundthread aktualisiert, der dem Formular signalisiert wenn neue Daten vorliegen, so dass die Ansicht aufgefrischt wird.

2) enthält ein Editfenster, in dem der AWL-Code bearbeitet wird.
Als Editorkomponente kommt ein TSynEdit (aus dem UniSynEdit) zum Einsatz.

Nun das Problem:
Habe ich beide Fenster sichtbar und klicke im Stringgrid eine Zeile an, dann springt der Cursor in der SynEdit-Komponente auf dem anderen Formular ins Nirvana (vor die Zeilenangabe).
Klicke ich zurück in das Editorfenster wird der Cursor wieder entsprechend umgesetzt und bleibt dort.
Verschärft wird das Ganze noch, wenn ich mit dem Debugger Online bin, sprich laufend Daten aktualisiert werden. Dann spring der Cursor im Edit-Bereich wieder in die Wüste und lässt sich auch durch erneutes Klicken ins Fenster nicht dazu bewegen wieder normal zu funktionieren.
Das Ganze hängt offenbar zusammen mit der Verwendung von BeginUpdate/EndUpdate für die Datenspalte des StringGrids (.Cols[2].BeginUpdate/EndUpdate) bzw. das ListView.
Ich habe die entsprechenden Anweisungen jetzt mal auskommentiert und rechne auch nicht mit Performance-Problemen, aber das Problem mit dem Anklicken des StringGrids und dem vagabundierenden Cursor bleibt bestehen.

Hat jemand eine Idee, oder einen Ansatz woran das liegen könnte?

Wäre für jeden Vorschlag dankbar.

Crosspost DP
CarstenB Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP, Win 7, FreeBSD
Delphi 2007 Prof., VS 2003
BeitragVerfasst: Mo 11.04.11 10:01 
Kleines Update:

Meine Vermutung, dass mit TSynEdit was nicht stimmt hat sich nicht bewahrheitet. Ich habe das noch mit einem anderen Formular mit einem Standard-TMemo ausprobiert und erfahre da ebenfalls "Interferenzen".
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 11.04.11 10:18 
Hast du mal versucht das ganze in einem Testprojekt nachzustellen? Wenn du Erfolg hast, könntest du das posten, wenn nicht dein Projekt sichern und Stück für Stück alles entfernen bis das Problem nicht mehr auftritt.
CarstenB Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP, Win 7, FreeBSD
Delphi 2007 Prof., VS 2003
BeitragVerfasst: Mo 11.04.11 13:53 
So. Hier mal ein kleines Test-Projekt. Die .exe habe ich auch mit reingepackt, falls die Compiler-Umgebung eine Rolle spielen sollte. (Win7-x64)

Die Komponenten habe ich aus dem Original-Projekt kopiert um die Einstellungen komplett identisch zu haben - es passiert aber auch bei Original-Komponenten, die gerade aus der Toolpalette eingefügt wurden.

Toolbar hat 3 Funktionen:
1) Textformular öffnen
2) Formular mit Grid öffnen
3) horizontal anordnen

Klickt man im Grid auf Zeile 8 und aktiviert (per Titelzeile) das Textfenster ist der Cursor unterhalb der letzten Zeile, bei Klick auf Zeile 5 im Grid steht er anschliessend zwischen Zeile 6 und 7 im Textfeld.

Edit: Habe mal noch einen Timer + Ein/Ausschalter eingebaut. Sobald dieser läuft und die "Debugdaten" aktualisiert spinnt der Cursor im anderen Fenster komplett. Man schreibt zwar an der richtigen Stelle, aber es blinkt woanders.
Einloggen, um Attachments anzusehen!
CarstenB Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP, Win 7, FreeBSD
Delphi 2007 Prof., VS 2003
BeitragVerfasst: Di 12.04.11 10:16 
Ich bin beruhigt, dass ich wohl nicht der Einzige mit diesem Problem bin.
QualityCentral

Werde den Workaround mal ausprobieren. Die Abfrage auf self.Focused einzubauen scheint mir Sinn zu ergeben.

Edit: Klappt jetzt.
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Di 12.04.11 13:19 
Unter D7 gibt es das Problem (noch) nicht.

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
CarstenB Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP, Win 7, FreeBSD
Delphi 2007 Prof., VS 2003
BeitragVerfasst: Di 12.04.11 13:55 
Das Problem ist scheinbar erst in der 2007er Version aufgetaucht.
In dem Report wurde als Lösung ja auch vorgeschlagen die Grids.pas von der 2005er-Version zu verwenden, also war die wohl noch in Ordnung.