Bonjour à toutes et à tous,
J'ai enfin trouvé d'où venai une erreur mais je ne sais pas la corriger.
Dans une form en showmodal je déclare cela :
Sur chaque composant DBEDIT je gere la passage de zone en zone comme ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 procedure TFFicheClient.FormCreate(Sender: TObject); begin //... Application.OnMessage := ApplicationMessage; //... end; procedure TFFicheClient.ApplicationMessage(var msg: TMsg; var Handled: boolean); begin if Msg.message = WM_KEYDOWN then begin if Msg.wParam = VK_TAB then begin if Msg.hwnd = DBEdit3.Handle then TabsheetCoordonnees.SetFocus; end; end; end;
(toujours la même form)
Tous ce passe trés bien dans cette form, je ferme cette form et j'en ouvre une autre qui ne comporte pas de OnMessage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 procedure TFFicheClient.DBEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ActiveControl is TCustomEdit) or (ActiveControl is TCustomComboBox) then Begin case Key of VK_DOWN, VK_NEXT, VK_RETURN, VK_TAB: SetFocusNextEdit; VK_UP, VK_PRIOR: SetFocusPreviousEdit; end; end; end; procedure TFFicheClient.SetFocusNextEdit; begin repeat Perform(WM_NEXTDLGCTL, 0, 0); until (ActiveControl is TDBEdit) or (ActiveControl is TsCustomComboBox) ; end; procedure TFFicheClient.SetFocusPreviousEdit; begin repeat Perform(WM_NEXTDLGCTL, -1, 0); until (ActiveControl is TDBEdit) or (ActiveControl is TsCustomComboBox); end;
Déclaration totalement classique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 procedure TFFicheEquipe.DBEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if ActiveControl is TCustomEdit then Begin case Key of VK_DOWN, VK_NEXT, VK_RETURN, VK_Tab: SetFocusNextEdit; VK_UP, VK_PRIOR: SetFocusPreviousEdit; end; end; end; procedure TFFicheEquipe.SetFocusNextEdit; begin repeat Perform(WM_NEXTDLGCTL, 0, 0); until ActiveControl is TDBEdit; end; procedure TFFicheEquipe.SetFocusPreviousEdit; begin repeat Perform(WM_NEXTDLGCTL, -1, 0); until ActiveControl is TDBEdit; end;
Mais si j'utilise pa exemple la touche TAB pour passer d'une zone à l'autre BOOM un excpetion est levée :
Violation d'accès à l'adresse 004A5217 dans le module 'xxxxxxxx.exe'. Lecture de l'adresse 0000024C
Lorsque sur la première form au dessus je retire tout le systeme de OnMessage je n'ai aucune erreur !!!
Si j'utilise la deuxième form sans jamais utilisé la première aucun problème.
Mais dés que je rentre dans cette form Boom.
Avez-vous une idée du problème ?
Peux-t-on stopper un Onmessage ? où isolé celui-ci sur une form ?
Merci
Partager