Bonsoir,
Ce qui arrive est très bizarre et ne se produit pas lorsque j'exécute le pas à pas (en théorie).
Je dis en théorie car je me suis basé sur le contenu des variables à chaque passage dans le DrawPanel de la barre d'état et n'ai pas pu faire autrement vu qu'il est lié au timer.
En gros ce qui arrive, c'est que j'ai le texte de mon menu qui apparait dans le dernier panel de la barre d'état (voir ci-dessous).
Pour chaque panel de la barre d'état j'ai mis "psOwnerDraw" à la propriété "Style" afin de pouvoir le redessiner (mettre en rouge et centrer). Dans le panel affichant "NUM" j'ai placé "NUM" dans la propriété "Text".
Dans un timer je récupère l'état de la touche Verr. Num et l'heure en cours puis je les affecte au panel 1 et 2 (rien dans le 0).
Voici le code :
En gros lorsque j'appuie sur Verr. num., j'ai soit 'NUM' soit rien dans le panel 2 et l'heure dans le panel 3 lors du premier passage dans le timer réglé à une secondre. Mais lors du second passage et des suivants dans le timer j'ai le texte correspondant à mon menu qui apparait dans le panel 3.
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
26
27
28
29
30
31
32 procedure TForm1.FormCreate(Sender: TObject); begin AppliquerCouleur((Sender as TForm)); with BarreEtat do begin Panels[0].Width := STATUS1; Panels[1].Width := STATUS2; Panels[2].Width := STATUS3; end; end; procedure TForm1.BarreEtatDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); var Rect2 : TRect; begin Rect2 := Rect; With StatusBar.Canvas do begin Font.Color := CouleurInterface.Police; DrawText(Handle,PChar(Panel.Text),-1,Rect2,DT_CENTER or DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE); end; end; procedure TForm1.HorlogeTimer(Sender: TObject); var StNum, StHeure : String; begin if (GetKeyState(VK_NUMLOCK) <> 0) then StNum := 'NUM' else StNum := ''; StHeure := FormatDateTime('hh:nn:ss',Now); BarreEtat.Panels[1].Text := StNum; BarreEtat.Panels[2].Text := StHeure; end;
J'ai voulu vérifier le contenu des variables dans le debuger et c'est là que j'ai pété un plomb en constatant que leur contenu était pourtant bon à chaque passage.
Je m'arrache les cheveux depuis ce midi à essayer de comprendre ce qui se passe alors je m'en remets à vos lumières.
Je précise que la procédure Appliquer couleur ne contient rien d'autre que ceci :
Je précise également que CouleurInterface est rempli par une procédure qui recherche ces couleurs dans un fichier INI et que cette procédure est exécutée juste après le Application.Initialize.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Procedure AppliquerCouleur(Fiche : TForm); begin Fiche.Color := CouleurInterface.Fiches; Fiche.Font.Color := CouleurInterface.Police; end;
Merci
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 program Comptes; uses Forms, Start in 'Start.pas' {Form1}, Objets in 'Objets.pas', Constantes in 'Constantes.pas', HintPerso in 'HintPerso.pas', Couleurs in 'Couleurs.pas'; {$R *.res} begin Application.Initialize; RecupererCouleur; { Récupère les couleur choisies par l'utilisateur pour l'interface } HintWindowClass := THintBulle; { Remplace le Hint Windows par la bulle d'aide perso } Application.HintPause := 0; { Affiche la bulle immédiatement } Application.HintHidePause := 2000; { Durée d'affichage de la bulle à 2 sec. } Application.CreateForm(TForm1, Form1); Application.Run; end.
Partager