2009-12-31 7 views
0

J'ai un formulaire Delphi avec un tas de contrôles VCL, comme TButton et TCheckBox, et une instance de l'éditeur de texte Scintilla. Je veux être en mesure de tabuler dans et hors de l'éditeur de texte, mais il semble que les onglets sont gérés par la bibliothèque VCL pas Windows.Existe-t-il un moyen simple d'autoriser le tabulation entre les contrôles non-VCL et VCL sur un formulaire Delphi?

Je suis passé par le code et il semble que les onglets sont gérés par les méthodes SelectNext et FindNextControl de la classe TWinControl. Ces méthodes fonctionnent sur les objets TWinControl mais l'éditeur de texte ne descend pas de TWinControl comme TButton et TCheckbox.

Existe-t-il un moyen simple d'autoriser le tabulation entre les contrôles non-VCL et VCL?

+0

Quelle enveloppe pour la bibliothèque Scintilla utilisez-vous? – mghie

+0

Je n'utilise pas de wrapper. CreateWindowEx pour le créer et SendMessage pour communiquer avec lui. –

+4

Ce serait probablement une bonne idée de faire votre propre classe d'emballage pour cela. Il n'a pas à exposer des propriétés ou des méthodes. Utilisez TStaticText ou TEdit comme exemple de procédure permettant à un descendant TWinControl d'appeler CreateWindowEx avec le nom de classe de fenêtre correct. Vous obtenez un tas de choses gratuitement, comme l'alignement, le dimensionnement et la tabulation. –

Répondre

0

(fait cette réponse wiki, parce que Rob est tout à fait correct dans ses commentaires ci-dessus, ce juste régurgite il)

clavier de manutention pour les caractères spéciaux/clés est traitée d'une manière assez particulière par la VCL, et le contournement/étendre cela directement via l'API Win est certainement faisable mais non trivial. Il serait tout aussi facile et franchement plus flexible à long terme si vous créez un wrapper de composant VCL personnalisé autour des contrôles (utilisez la source VCL comme guide) ce n'est vraiment pas si difficile (peut-être un peu fastidieux) mais le bénéfice sera énorme en termes de maintenabilité et de réutilisation.

Edit:

Et bien sûr, vous pouvez simplement utiliser ce free Delphi Wrapper pour l'éditeur Scintilla.

Questions connexes