Autor Beitrag
CASS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 160

WIN XP
D7 Enterprise
BeitragVerfasst: Fr 20.04.07 12:17 
Hallo Leute,

ich erstelle ein Formular auf dem ich dynamisch Buttons erzeuge. Solange kein Button vorhanden ist, funktioniert alles normal und wir geplant, soll heißen:
Das Formular erzeugt beim drücken auf eine Cursor-Taste ein KeyDown Ereignis.

Jetzt zu meinem Problem:
Sobald ein Button erzeugt ist, erzeugt weder der Button noch das Formular beim drücken einer Cursor-Taste ein KeyDown Ereignis. Alle anderen Tasten funktionieren wie sie sollen.

Kann mir jemand erklären warum?

Grüße,
Cass
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 21.04.07 09:36 
Hallo Cass,

eine vollständige Antwort kannst Du nicht erhalten, weil durch Deine Frage nicht klar ist, was Du alles für die Buttons vorbereitest. Das Problem liegt vermutlich daran, dass ein Button das "Drücken" nicht als Key-Ereignis verarbeitet, sondern als Click-Ereignis.
Zitat:
Button-Klasse - Hinweise
Wenn die Schaltfläche den Fokus hat, können Sie auf Button mit der Maus klicken oder entsprechend die EINGABETASTE oder die LEERTASTE drücken...

Wenn das Steuerelement, das den Fokus besitzt, das Drücken der EINGABETASTE akzeptiert und verarbeitet, erfolgt keine Verarbeitung durch Button. Wenn beispielsweise eine mehrzeilige TextBox oder eine andere Schaltfläche den Fokus besitzt, wird das Drücken der EINGABETASTE nicht durch die Bestätigungsschaltfläche, sondern durch dieses Steuerelement verarbeitet.

Je nachdem, wie Du KeyDown und KeyPreview vorbereitet hast, entspricht die Reihenfolge der Prüfungen möglicherweise Deinen Erwartungen.

Viel Erfolg! Jürgen
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 21.04.07 12:06 
Es dreht sich aber weder um Return noch Space noch überhaupt um das Klicken eines Buttons, sondern, wie Cass zweimal schrob, um die Cursor-Tasten.

@Cass: Die Cursor-Tasten werden von den Buttons zur Weitergabe des Fokus benutzt. Was genau hast du denn vor?
CASS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 160

WIN XP
D7 Enterprise
BeitragVerfasst: Mo 23.04.07 09:07 
Hallo,

Danke erst mal für die Antworten! ;)

Mein Programm ist im prinzip ein Creator für ein Formular. In dem Programm erstelle ich auf meinem Formular Dynamisch Buttons, die dann mit der Maus verschoben werden können. Am Schluss speichere ich die ganzen Positionen in einer Datei, und kann dann alles in einem anderen Programm wieder laden.

Da ich allerdings die Buttons sehr genau setzen muss, wäre es schön, wenn ich wie bei anderen Programmen (Photoshop, Fireworks, Flash, ...) Die Buttons nach dem Markieren auch Pixelweise mit den Cursortasten verschieben könnte.

Komischer weiße löst nicht mal das Formular bei den Cursortasten ein KeyDown Ereignis aus, selbst wenn KeyPreview auf True gesetzt ist.

Solange kein Button auf dem Formular liegt funktioniert alles wie es soll ?!? Ich blick da nicht ganz durch.

Grüße Cass
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 23.04.07 13:13 
user profile iconCASS hat folgendes geschrieben:
Da ich allerdings die Buttons sehr genau setzen muss, wäre es schön, wenn ich wie bei anderen Programmen (Photoshop, Fireworks, Flash, ...) Die Buttons nach dem Markieren auch Pixelweise mit den Cursortasten verschieben könnte.
Ich denke, du hast da einen Designfehler in deiner Anwendung. Für Formdesigner wird doch üblicherweise ein eigenes Control benutzt, das das eigentliche Control (in diesesem Fall einen Button) aufnimmt und den netten Resize-Rahmen um es zeichnet. Da dieses Control sein Child aber nur zeichnet und jede Interaktion mit ihm verbietet (ich habe noch keine IDE gesehen, in der designte Buttons geklickt werden können), sollte sich dein Problem überhaupt nicht stellen - der Button ist "physisch" nicht auf dem Formular vorhanden und kann somit auch nicht die Windows-Botschaften klauen.
user profile iconCASS hat folgendes geschrieben:
Komischer weiße löst nicht mal das Formular bei den Cursortasten ein KeyDown Ereignis aus, selbst wenn KeyPreview auf True gesetzt ist.

Solange kein Button auf dem Formular liegt funktioniert alles wie es soll ?!? Ich blick da nicht ganz durch.
Wie ich in meinem letzten Post schrieb, der Button stiehlt dir die WM_KEYDOWN/PRESS-Message, bevor du selbst irgendwie auf sie reagieren könntest.
CASS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 160

WIN XP
D7 Enterprise
BeitragVerfasst: Mo 23.04.07 13:43 
Danke für die Antwort.

Das heißt ich hab nur die möglichkeit ein eigenes Kontrol für die Geschichte zu erstellen, oder kann ich irgendwie die Messages abfangen? Ist richtig das der Button im Designer natürlich nicht gedrück können werden muss. Der Creator ist im Prinzip momentan auch nur ein erster Versuch.

Realisiert hab ich das ganze so einfach nur deswegen, weil die Button Komponente schon alles dabei hat, dass ich brauche. Da musste ich mir dann nicht selbst die komplette Arbeit machen.

Du siehst aber keine möglichkeit die Ereignisse irgendwie abzufangen sobald ein Button vorhanden ist, oder?

[Edit]

Kannst du mir eine Komponente zum erweitern empfehlen die auch die Möglichkeiten von TButton hat?
Ich brauche im Prinzip:
- MouseDown Event
- Mouse Up Event
- Mouse Move Event
- Background Image
- Width, Height
- Top, Left

Grüße,
Cass