Autor Beitrag
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Mo 12.11.12 21:06 
Hey Leute,

hab mal wieder ein kleines Problem. Diesmal mit einer Listview die nicht mehr auf die Cursortasten <hoch> und <runter>, <Pos1>, <Ende> usw. reagiert. Mit der Maus lässt sie sich allerdings problemlos steuern. Ich konnte die Ursache dafür leider nicht finden. Es liegt aber sicher an dem Formulardesign. Egal.

Habe rausgefunden, dass ich mit mehreren Actions, denen ich je eine Cursortaste als Shortcut zuordne, die Tastenanschläge verlässlich abfangen kann (KeyDown- und Keyup-Ereignisse brachten nix). Jetzt müsste ich nur in der Lage sein, den Cursor der Listview in die jeweilige Richtung setzen zu können, d.h. eins nach oben, eins nach unten, an den Anfang, ans Ende usw.

Die Listview ist im Style vsReport und ist virtuell.

Hat jemand eine Idee, wie ich die Listview per Code steuern kann, damit der User sie auch mit der Tastatur steuern kann?

Danke vorab für eure Hilfe

_________________
Es gibt keine Probleme - nur Lösungen!
haentschman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: Di 13.11.12 07:54 
Moin... 8)

für mich klingt deine Frage nach Herumdoktern an den Sympthomen statt der Ursache.
Zitat:
Ich konnte die Ursache dafür leider nicht finden.

...würde ich aber empfehlen da weiterzumachen. Stelle mal den relevanten Code der Ereignisse, welche mit der besagten Listview verknüpft sind, ein. Fängst du irgendwo anders Tastatureingaben ab ?
:wave:
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Di 13.11.12 14:23 
Wenn ich das richtig verstehe, fängst Du die Tastatureriegnisse der Cursortasten in anderen Objekten ab. Du kannst nur einem Objekt den Shortcut zuweisen. Wenn Du die Cursortasten per Shortcut z.B. einem Menueeintrag zuweist, dann wird dieser Menueeintrag dieses Tastaturereignis übernehmen und die anderen Objekte sehen dann - soweit ich weiß - nichts von dem Ereignis.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
Logikmensch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Di 13.11.12 17:51 
Das mit dem Bekämpfen der Symptome statt der Ursache ist auch meine Meinung.

Ich hätte auch gerne die Ursache bekämpft.

Das Merkwürdige an der Sache ist, dass sich der Zeilencursor der ListView ganz normal mit Maus bedienen lässt, aber nicht mit der Tastatur. Jedoch reagiert sie auf die Bild hoch und Bild runter Taste. Wenn ich das KeyUp-Ereignis der ListView hinzufüge, wird es auch beim Loslassen einer Cursortaste aufgerufen. Habe ich mit einem einfachen showmessage("Taste hoch") geprüft. Der Cursor bewegt sich aber trotzdem nicht. (okay, jeder darf mal eine schwierige Phase haben, vielleicht haben ListView's am Ende doch Gefühle? ;-) )

Mag ja sein, dass mir da eine vorhandene Kompo dazwischenfunkt, aber keine dieser VCL Kompos verfügt, abgesehen von der Form selbst, über Key-Ereignisse.

Ich versuche mal, das betreffende Form hier reinzustellen.

_________________
Es gibt keine Probleme - nur Lösungen!
>M@steR<
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 288
Erhaltene Danke: 3



BeitragVerfasst: Mi 14.11.12 00:13 
Gelöscht


Zuletzt bearbeitet von >M@steR< am Di 17.09.13 03:01, insgesamt 1-mal bearbeitet
Logikmensch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Mi 14.11.12 17:01 
Ja, okay, das ist eine gute Idee. Werde ich machen. Besteht das Problem dann immer noch, poste ich das Formular mal hier.

Danke für die Tipps! :-)

_________________
Es gibt keine Probleme - nur Lösungen!
Logikmensch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Do 15.11.12 20:24 
user profile icon>M@steR< hat folgendes geschrieben Zum zitierten Posting springen:
Mach dir doch mal ein Backup von deinem Projekt und lösch dann testweise komponente für komponente raus bis es geht. So könntest du dem Übeltäter auf die Schliche kommen.


Hallo,

Problem erkannt. Um die Fehlerursache hier kurz zu beschreiben muss ich vorausschicken, dass es sich bei meiner Anwendung um ein Grafikprogramm handelt, bei dem der Benutzer seine gezeichneten Objekte mit der Tastatur oder Maus bewegen kann.

Das problematische Listview ist in einem untergeordneten Dialog.

Ich habe das betreffende Dialogformular mit der Listview komplett kopiert und eine eigene kleine Applikation gemacht, die das Dialogformular aufruft. Ich konnte es nicht glauben: Trotz unveränderten Formular-Quelltextes reagierte die Listview jetzt korrekt auf die Cursortasten.

Nach zwei geschlagenen Stunden Fehleranalyse ist mir dann eingefallen, dass das Hauptformular meiner Anwendung Actions (TAction) beinhaltet, die mit Tastatur-Shortcurs auf die Cursortasten <Up> <Down> <Left> und <right> reagieren. Mir war bisher nicht klar, dass diese Shortcuts auch ausgeführt werden, wenn das Hauptformular gerade nicht aktiviert ist (z.B. weil das Dialogformular gerade den Fokus hat). Ich habe es dann auch nur durch Zufall gesehen, dass der Versuch, die Listview in dem Dialog zu steuern, in wirklichkeit im Hintergrund ein gezeichnetes Gafikbild verschoben hat. Bei meinen bisherigen Tests war kein Grafikbild vorhanden... *mit den Augen roll*

Ende gut, alles gut:
Mit meiner Listview und dem Dialogform war also alles in Ordnung. Jetzt muss ich rausfinden, ob ich die Shortcut-Actions überhaupt in meinem Programm drin lassen kann. Wenn die solche Auswirkungen haben, sind die keine gute Wahl. Werde wohl beser die KeyDown-Ereignisse des Hauptformulars verwenden. So ist es ja auch empfohlen.

Vielen Dank Euch allen - ihr habt mir sehr geholfen!!!

_________________
Es gibt keine Probleme - nur Lösungen!