Problèmes avec ShowForm
Modérateurs : Modérateurs, Développeurs
-
- Membre d'honneur
- Messages : 1075
- Inscription : 29 oct. 2003 14:53
- Version de PhotoFiltre : 6.0
- Système d'exploitation : Windows 2000 SP 4
- Processeur : Pentium IV 2,4Ghz
- Mémoire RAM : 512Mo DDR 333
- Localisation : 21
Problèmes avec ShowForm
Bonjour,
Je viens de me rendre compte d'un petit problème avec la fonction ShowForm de l'API...
Avec Arithmetique si l'on utilise la touche Tab dans la zone d'édition de l'expression, la touche Tabulation n'a aucun effet mais le plus grave c'est que l'utilisation de cette touche bloque également par la suite les touches directionnelles du curseur!
Je pensais que cela venait de mon controle mais cela provoque le même problème avec un TMemo standard!
Le problème n'a pas lieu si l'on utilise l'instruction ShowModal normale mais qui ne permet pas du coup d'utiliser la pipette...
Je me demande si les problème que rencontre pf ne sont pas également du à cela (les problème de controles désactivés qui recoivent les messages)
Je poste ici car j'ai l'impression que ca va pas être simple à résoudre...
Je viens de me rendre compte d'un petit problème avec la fonction ShowForm de l'API...
Avec Arithmetique si l'on utilise la touche Tab dans la zone d'édition de l'expression, la touche Tabulation n'a aucun effet mais le plus grave c'est que l'utilisation de cette touche bloque également par la suite les touches directionnelles du curseur!
Je pensais que cela venait de mon controle mais cela provoque le même problème avec un TMemo standard!
Le problème n'a pas lieu si l'on utilise l'instruction ShowModal normale mais qui ne permet pas du coup d'utiliser la pipette...
Je me demande si les problème que rencontre pf ne sont pas également du à cela (les problème de controles désactivés qui recoivent les messages)
Je poste ici car j'ai l'impression que ca va pas être simple à résoudre...
-
- Administrateur(trice)|Administrateur|Administratrice
- Messages : 12830
- Inscription : 28 oct. 2003 22:49
J'avais déjà remarqué le pb avec la touche Tab mais j'ai laissé tomber car je ne voyais pas d'ou ça venait. Je vais regarder ça de plus près car ça peut être bloquant.
Je ne gère pas les événements clavier à ce niveau, donc je pense que ça vient de Delphi par contre je pense pas que les pb de PF soient identiques. En général, pour désactiver un controle, j'utilise l'API EnableWindow quand la propriété Delphi ne fonctionne pas
Je ne gère pas les événements clavier à ce niveau, donc je pense que ça vient de Delphi par contre je pense pas que les pb de PF soient identiques. En général, pour désactiver un controle, j'utilise l'API EnableWindow quand la propriété Delphi ne fonctionne pas
-
- Membre d'honneur
- Messages : 1075
- Inscription : 29 oct. 2003 14:53
- Version de PhotoFiltre : 6.0
- Système d'exploitation : Windows 2000 SP 4
- Processeur : Pentium IV 2,4Ghz
- Mémoire RAM : 512Mo DDR 333
- Localisation : 21
Apparement c'est un message qui n'est pas appelé quand j'utilise ShowForm :
WM_GETDLGCODE
Ceci explique que les touches de directions ne fonctionnent plus dans mon contrôle... Apparement le message est traité par quelqu'un d'autre... PhotoFiltre??? et du coup le résultat du message fait que Windows considére par la suite que mon contrôle ne souhaite pas gérer ni les tabulation ni les touches directionnelles...
WM_GETDLGCODE
Ceci explique que les touches de directions ne fonctionnent plus dans mon contrôle... Apparement le message est traité par quelqu'un d'autre... PhotoFiltre??? et du coup le résultat du message fait que Windows considére par la suite que mon contrôle ne souhaite pas gérer ni les tabulation ni les touches directionnelles...
-
- Administrateur(trice)|Administrateur|Administratrice
- Messages : 12830
- Inscription : 28 oct. 2003 22:49
Le code est super simple :
Je pense que le pb est au niveau de ProcessMessages ?
Tu peux essayer de gérer ta propre boucle d'attente au niveau de la fonction Execute :
DlgForm.Show
PrepareDialog(DlgForm.Handle, dmColorPicker, True, False);
...
boucle d'attente tant que le form est visible
Code : Tout sélectionner
DlgForm.Show;
while DlgForm.Visible do Application.ProcessMessages;
Tu peux essayer de gérer ta propre boucle d'attente au niveau de la fonction Execute :
DlgForm.Show
PrepareDialog(DlgForm.Handle, dmColorPicker, True, False);
...
boucle d'attente tant que le form est visible
-
- Membre d'honneur
- Messages : 1075
- Inscription : 29 oct. 2003 14:53
- Version de PhotoFiltre : 6.0
- Système d'exploitation : Windows 2000 SP 4
- Processeur : Pentium IV 2,4Ghz
- Mémoire RAM : 512Mo DDR 333
- Localisation : 21
-
- Membre d'honneur
- Messages : 1075
- Inscription : 29 oct. 2003 14:53
- Version de PhotoFiltre : 6.0
- Système d'exploitation : Windows 2000 SP 4
- Processeur : Pentium IV 2,4Ghz
- Mémoire RAM : 512Mo DDR 333
- Localisation : 21
J'y arrive pas quand j'appelle PrepareDialog(DlgForm.Handle, dmColorPicker, True, False);
Ma boucle d'attente ne fonctionne pas...
Apparament ce n'est pas HandleMessage la solution en tout cas car quand je fais Show suivi d'une boucle d'attente cela marche...
Par contre une question.... Est-ce que tu fais le ProcessMessage sur l'Application de la dll?
Ma boucle d'attente ne fonctionne pas...
Apparament ce n'est pas HandleMessage la solution en tout cas car quand je fais Show suivi d'une boucle d'attente cela marche...
Par contre une question.... Est-ce que tu fais le ProcessMessage sur l'Application de la dll?
-
- Administrateur(trice)|Administrateur|Administratrice
- Messages : 12830
- Inscription : 28 oct. 2003 22:49
-
- Membre d'honneur
- Messages : 1075
- Inscription : 29 oct. 2003 14:53
- Version de PhotoFiltre : 6.0
- Système d'exploitation : Windows 2000 SP 4
- Processeur : Pentium IV 2,4Ghz
- Mémoire RAM : 512Mo DDR 333
- Localisation : 21
-
- Administrateur(trice)|Administrateur|Administratrice
- Messages : 12830
- Inscription : 28 oct. 2003 22:49
-
- Membre d'honneur
- Messages : 1075
- Inscription : 29 oct. 2003 14:53
- Version de PhotoFiltre : 6.0
- Système d'exploitation : Windows 2000 SP 4
- Processeur : Pentium IV 2,4Ghz
- Mémoire RAM : 512Mo DDR 333
- Localisation : 21
ben faudrait déjà voir si le symptome à lieu pour les plugins en C ou ASM!
De toute façon la fonction ShowForm n'est utilisable que pour les plugins en Delphi...
Bon le symptome est le même avec le plugins que j'ai fait en C++Builder mais bon ca utilise aussi la VCL faudrait tester avec un plugin fait sans VCL
De toute façon la fonction ShowForm n'est utilisable que pour les plugins en Delphi...
Bon le symptome est le même avec le plugins que j'ai fait en C++Builder mais bon ca utilise aussi la VCL faudrait tester avec un plugin fait sans VCL
-
- Administrateur(trice)|Administrateur|Administratrice
- Messages : 12830
- Inscription : 28 oct. 2003 22:49
Je pense avoir corrigé le bug, dans Application.OnShortCut je rajoute le code suivant (tous les événements clavier passent d'abord par là) :
Mais ça sera seulement dans la prochaine mise à jour...
Code : Tout sélectionner
if PluginLoaded and (Msg.CharCode = VK_TAB) then
begin
SendMessage(CurrentPluginHandle, CM_DIALOGKEY, VK_TAB, 0);
Handled := True;
end
-
- Membre d'honneur
- Messages : 1075
- Inscription : 29 oct. 2003 14:53
- Version de PhotoFiltre : 6.0
- Système d'exploitation : Windows 2000 SP 4
- Processeur : Pentium IV 2,4Ghz
- Mémoire RAM : 512Mo DDR 333
- Localisation : 21
-
- Développeur(se)|Développeur|Développeuse
- Messages : 974
- Inscription : 28 avr. 2004 8:45
- Version de PhotoFiltre : 6
- Système d'exploitation : xp seven
- Localisation : 78
SAlut,
Dsl, j'étais pas la..... et j'ai loupé quelque chose d'interressant..
Ce probleme de touche "tab" et des 4 fleches .....
Tab est visiblement traité a un niveau prioritaire par le noyaux. Il donne le focus d'entrée clavier à un ctrl ou un groupe de ctrl (meme caché).
Je n'ai pas bien pigé la fin mais je pense que le pb viens de la boucle d'attente PF, le plugin repasse la main et le focus d'entrée peut changer.
En assembleur et en C, le plugin ne rend la main à PF qu'à la fin, donc le focus d'entrée reste dans le plugin.
.....Sauf en fonction pipette ou zoom, (focus a PF), mais pour reprendre le plugin, on est obligé de cliquer dessus... donc reprise du focus
=> Comme benjamin l'a dit, ShowForm n'est pas utilisée en C et Asm donc pas de probleme pour de futures modifs (normalement lol).
Je pense que tu parlais de Lentille ( j'ai toujours pas de soluce)... et un "truc" du genre n'est pas impossible (merci du tuyau )
dsl de ne pas pouvoir aider plus mais j'ai du mal avec votre "charabia" Delphi
Bonne soirée A+
A+
Dsl, j'étais pas la..... et j'ai loupé quelque chose d'interressant..
Ce probleme de touche "tab" et des 4 fleches .....
Tab est visiblement traité a un niveau prioritaire par le noyaux. Il donne le focus d'entrée clavier à un ctrl ou un groupe de ctrl (meme caché).
Je n'ai pas bien pigé la fin mais je pense que le pb viens de la boucle d'attente PF, le plugin repasse la main et le focus d'entrée peut changer.
En assembleur et en C, le plugin ne rend la main à PF qu'à la fin, donc le focus d'entrée reste dans le plugin.
.....Sauf en fonction pipette ou zoom, (focus a PF), mais pour reprendre le plugin, on est obligé de cliquer dessus... donc reprise du focus
=> Comme benjamin l'a dit, ShowForm n'est pas utilisée en C et Asm donc pas de probleme pour de futures modifs (normalement lol).
Je pense que tu parlais de Lentille ( j'ai toujours pas de soluce)... et un "truc" du genre n'est pas impossible (merci du tuyau )
dsl de ne pas pouvoir aider plus mais j'ai du mal avec votre "charabia" Delphi
Bonne soirée A+
A+
-
- Administrateur(trice)|Administrateur|Administratrice
- Messages : 12830
- Inscription : 28 oct. 2003 22:49
Voici la fonction que j'utilise pour désactiver/activer un GroupBox par exemple :
Code : Tout sélectionner
procedure EnableWinControl(WC: TWinControl; Value: Boolean);
var
I: Integer;
begin
for I := WC.ControlCount - 1 downto 0 do
WC.Controls[I].Enabled := Value;
WC.Enabled := Value;
end;
-
- Membre d'honneur
- Messages : 1075
- Inscription : 29 oct. 2003 14:53
- Version de PhotoFiltre : 6.0
- Système d'exploitation : Windows 2000 SP 4
- Processeur : Pentium IV 2,4Ghz
- Mémoire RAM : 512Mo DDR 333
- Localisation : 21
Apparement la boucle :
Fait chauffer énormément le CPU!!! (Je passe de 40° à 50°)
Il serait souhaitable je pense d'ajouter une instruction Sleep pour soulager un peu le processeur ou plutôt de remplacer ProcessMessages par HandleMessage ce qui donne d'excellent résultat!
C'est ce qu'il y a dans ShowModal...
Code : Tout sélectionner
while DlgForm.Visible do Application.ProcessMessages;
Il serait souhaitable je pense d'ajouter une instruction Sleep pour soulager un peu le processeur ou plutôt de remplacer ProcessMessages par HandleMessage ce qui donne d'excellent résultat!
C'est ce qu'il y a dans ShowModal...