| |
|
|
| Hi Frank,
direkt noch eine Frage. Bei GetControlParas wird wohl der entsprechende Mausklick nicht zurückgesetzt, so wie bei GetSelectedDbClk.
Meine Frage ist, wie setze ich ihn nun zurück ?
Ich reagiere bei einem Doppelklick oder Rechtsklick im Listview mit der Reaktion, dass ein anderes Listview aufgeht. Alles kein Problem soweit, wenn ich nun in dem neu geöffneten Listview die weiteren Aktionen nur per Tastatur auslöse z.B. etwas auswähle und Enter drücke, wird dieses geschlossen und direkt wieder geöffnet. Das direkt wieder öffnen ist der Fehler, da wenn ich eine Mausaktion in dem zweiten Listview ausführe, wird es nur geschlossen, wie es sollte.
Im Moment bin ich total Ratlos wie ich dieses Problem lösen soll.
Viele Grüße Georg |
|
|
| |
|
|
|
| Hi,
sehe ich mir an.
Gruß, Frank |
|
|
| |
|
|
|
| Hallo,
so, habs getestet. Wahrscheinlich mache ich was falsch, denn bei mir funktioniert alles bestens. Ein Doppelklick bedeutet natürlich auch immer ein einfacher Linksklicks, vielleicht liegt hier der Hund begraben...? Versuch mal kurz vor Erstellen des neuen Listviews, oder danach, GetControlParas aufzurufen. Wenn das nichts hilft, das schick mir doch ein *kleines* Testprogramm, in dem der Fehler vorkommt.
Gruß, Frank |
|
|
| |
|
|
|
| Hallo Frank,
mit dem *kleinen* Demo könnte es etwas dauern, da es recht schwierig ist es nach zu Bauen.
Wird von GetControlParas der Klick auf das Listview als erledigt abgehackt ? Wenn nicht kennst du einen Befehl um dies zu machen ?
Dein Vorschlag mit dem GetControlParas nach dem Aufbau des zeiten Listview klappt leider nicht, da ich im zweiten Listview in dessen While Schleife genau dies tue. Das Problem wird wirklich sein, dass es zuerst ein einfacher Linksklick ist und dann ein doppelter, das sehe ich schon daran wie oft die Schleife durchlaufen wird. Aber das letzte Ereignis wird wohl solange nicht gelöscht, oder erst nach einer bestimmten Zeit, bis ein anderes Mausereignis auftritt. Dies würde auch erklären warum es nur dann passiert wenn ich per doppelklick das zweite Fenster öffne und dann per Tastatur weiter mache, alle anderen Kombinationen gehen.
Ich hatte die gleiche Funktion schonmal mit GetSelectedDbClk gebaut, da ging alles ohne Probleme. Diese hatte ich aber verworfen wegen der Möglickeit den Rechtsklick mit der anderen Funktion abzufangen.
Viele Grüße Georg |
|
|
| |
|
|
|
| Hi Frank,
ich glaube den Fehler gefunden zu haben, es ist die Abfrage ob man Return gedrückt hat.
Also, in dem sich öffnenden Listviewfenster überprüfe ich ob man links doppelt oder rechts gedrückt hat durch GetControlParas und eben auch ob man, wenn eine Zeile selektiert ist, die Enter Taste drückt (%Key = 13). Einer der wenigen %ScanKeys dir durch kommen. Nun habe ich mit Hilfe von der API GetKeyState die Strg Taste als Auslöser genommen und siehe da es geht. Nehme ich nun per API die Return Taste geht es wieder nicht. Also muß es etwas mit der Return Auswertung zu tun haben.
Es gibt nun zwei Möglichkeiten für mich, die je eine Frage aufwerfen. 1. ich biege die Return Taste so um, dass sie vom Listview nicht als Return erkannt wird, nur wie? 2. ich benutze nicht GetControlParas sondern GetSelectedDbClk, nur wie bekomme ich heraus auf welcher Zeile man die rechte Maustaste gedrückt hat, da sie dadurch nicht markiert wird?
Vielleicht hast du ja eine Idee,
viele Grüße Georg |
|
|
| |
|
|
|
| Hallo Georg
GetControlParas() basiert nicht auf einer API, sondern ermittelt innerhalb des Subclassings, ob und welcher Mausknopf gedrückt wurde. Wenn ja, dann wird eine Tabelle mit den Werten ermittelt und gefüllt. GetControlParas() kopiert diese Tabelle jetzt in den Profan-Bereich, danach wird die interne Tabelle gelöscht und erst wieder beim nächsten Mausknopf gefüllt.
Zu deinen Möglichkeiten: 1) Welche Message oder Tastendruck wird denn zu einem Listview gesandt ? Das Listview ist doch kein Eingabe-Control (nur ein reines Ausgabe-Control), deshalb erwartet es auch keinen Tastendruck.
2) Das geht nur mit GetControlParas(). Es sei denn, du bildest das per Hand nach. Ist aber wirklich sehr kompliziert, viele APIs und Messages und Strukturen... Sollte aber eigentlich auf das gleiche hinauslaufen.
Gruß, Frank |
|
|
| |
|
|
|
| Hi nochmal,
hatte einen Timer im Dll-Sourcecode vergessen, der einige Messages verschluckte. Vielleicht ist er ja auch für diesen Fehler (?) verantwortlich. Mehr dazu in der ReadMe des Betatests.
Gruß, Frank |
|
|
| |
|
|
|
| Hi Frank,
das war es, es geht Tolle Arbeit !!!
Viele Grüße Georg |
|
|
| |
|
|