Affichage dans une statutbar

Résolu
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008 - 5 mai 2008 à 14:37
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008 - 6 mai 2008 à 20:15
Bonjour j'ai telecharger sur le site un code tres court permettant d'afficher l'heure dans une StatutBar. Je n'ai aucune erreur au niveau du code mais a l'executon l'heure n'apparait pas .

{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
unit UIdle;
interface


uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls;


type
  TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    procedure FormActivate(Sender: TObject);
  private
        procedure AppIdle(Sender: TObject; var Done: Boolean);
  public
    { Déclarations publiques }
  end;


var
  Form1: TForm1;


implementation


{$R *.DFM}


procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean);
begin
  StatusBar1.Panels[1].Text := TimeToStr(now);
  Done :=False;
end;


procedure TForm1.FormActivate(Sender: TObject);
begin
  Application.OnIdle := AppIdle;
end;


end.
Dans mon Code j'ai bien tout declare , d'ou peut venir le Hic ?? merci

Ou peut t'on trouver des boutons, tous plein d'objet originaux pour mettre sur ses interfaces merci?

34 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
5 mai 2008 à 21:26
Salut,

je viens de télécharger le code pour tester et tout fonctionne sans changer une seul virgule au code !!!!

ensuite Vatrem as tu reçu mon mail ?
le fichier que tu m'as envoyé hier est inutilisable pour moi envoie moi un Zip avec le code à l'intérieur.

@Bacterius:
j'attend toujours encore l'unité que tu as faite avec mon code !

 
@+
Cirec

<hr siz="" />
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
6 mai 2008 à 00:15
kénanahafout d'avoir l'heure dans la barre de status puisque tu l'as dans la barre des taches! :)

Idle c'est de la crotte en barre en plus ... faut bouger la souris pour que ça fasse quelque chose ...
aucun interet si on doit bouger la souris tout le temps pour voir l'heure.

le mieux pour afficher l'heure c'est un Timer! pouf

sinon :

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure AppIdle(Sender: TObject; var Done: Boolean);
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean);
begin
  application.Title := TimeToStr(Now);
  done := not self.Active; // uniquement si la fenetre est active
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := AppIdle;
end;

end.

<hr size="2" width="100%" />
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 mai 2008 à 00:26
"Idle c'est de la crotte en barre en plus ... faut bouger la souris pour que ça fasse quelque chose ...
aucun interet si on doit bouger la souris tout le temps pour voir l'heure."

depuis quand il faut bouger la souris !!!!!

MAIS NON .... justement Idle est appelé quand l'application ne fait rien
et ça arrive souvant

bien sûr un Timer reste la meilleur manière ... mais le but de la source de Delphiprog était d'utiliser les temps mort d'une application

 
@+
Cirec

<hr siz="" />
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 mai 2008 à 13:08
"

oui c pas relie pas de point bleu mais je pense savoir pourquoi"
c'est ce que je te disai ... la raison est que as copier le code au lieu de doucle cliquer sur l'évènnement pour le compléter par la suite ^^

clique sur réponse acceptée si elle te convient

 
@+
Cirec

<hr siz="" />
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 mai 2008 à 14:16
tu cliques sur la Statusbar

dans l'inspecteur d'objet propiété Panels ---> tu cliques sur les 3 petits points à droite (...)
une fenêtre s'ouvre tu y sélectionnes  " 1 - StatusPanel "
et dans l'inspecteur d'objet propriété Alignement tu selectionnes "taRightJustify"
et voilà le texte restera à droite tout le temps

 
@+
Cirec

<hr siz="" />
3
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
6 mai 2008 à 17:23
Bonjour,
oui mais attention : moi j'aime bien mettre la version du programme tout a droite dans la barre de status, mais parfois ca coute un peu (pour version 1.31 il affiche juste version 1. et un petit bout du 3 ...)
Alors méfiance ^^ mets des espaces après au pire (StatusBar1.Panels[1].Text := TimeToStr(now) + '    '; )

Voila, bonne continuation à toi !

Cordialement, Bacterius !
3
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
5 mai 2008 à 18:24
Bonjour, il est inutile d'utiliser "Done", puisqu'un contrôle d'éxecution ne passe pas à la ligne suivante tant que la ligne en cours n'est pas terminée.
Quant à ton code, je ne vois pas la déclaration de la variable "now".


Et n'oublie pas de mettre le SimpleText de ton StatusBar à False, et tout devrait marcher ;)


 


Cordialement, Bacterius !

PS : j'ai trouvé un site avec pas mal de composants sympa, le voici :

http://sodev.webzdarma.cz/index.php?la=en

Par contre c'est en anglais ;)
0
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008
5 mai 2008 à 18:36
Salut , ben en faite dans le source i n'y a pas de declaration de la variable "now" donc forcement qu je ne l'ai pas mise , pour le moment j'en suis a reproduire betement  bg !!!!!!!


par contre j'ai bien mis textsimple = false


mais ca ne marche pas non plus
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
5 mai 2008 à 19:42
Euh Bactérius, now() c'est une fonction système, pas une variable !!!
Donc aucun soucis de ce coté là.

ton code est juste si tu vires le "done := False" et que tu t'assures que tos statusbar ait deux panels (l'heure s'affiche dans le deuxième d'après ton code)
0
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008
5 mai 2008 à 19:51
j'a bien les 2 panels
j'ai virer done = false

ca marche pas !!
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
5 mai 2008 à 20:09
Bonjour,
ok excusez moi (et Bacterius ne prend pas d'accent ^^)
Au temps pour moi, je ne connaissais pas "now" :)

Un petit conseil : si il y a juste l'heure qui doit s'afficher dans ta statusbar, tu fixes SimpleText à True, et tu marque l'heure dans StatusBar.Caption.

De plus, je pense que Florenth a raison, c'est la seule explication logique, a priori ^^ Essaye de mettre 2 panels dans ta statusbar ;)

Cordialement, Bacterius !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
5 mai 2008 à 20:33
Bon alors :

je sais d'ou vient le problème : de OnIdle. Utilise plutot un timer, avec un interval de 1000 ms

Dans le timer : StatusBar1.Panels[1].Text := TimeToStr(now);

Timer.Enabled := True;

StatusBar1.Panels := 2 panels
StatusBar1.SimplePanel := False
StatusBar1.SimpleText := ''

Et la ca doit marcher !!!!!

J'espère t'avoir aidé !

Cordialement, Bacterius !
0
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008
5 mai 2008 à 21:13
Bacterius je te remercie de te casser la tete moi aussi je cherche j'ai ouvert 2 delphi et j'ai tout comparer !!


le code fonctionne dans les deux cas , sauf que moi j'ai pas l'heure qui s'inscrit ( au moins je ne sera jamais a la bourre) ,j'ai lu que c'etait mieux d utiliser ce code qu'un TTimer c'est pour cette raison que je voudrais l'utiliser .


Si ca n marche pas c'est qu il y a forcement une raison , donc faut trouver la cause. la solution que tu me propose ne corrige pas l'erreur c'est une autre methode que de toute facon je vais essayer.


Mais je suis tetu et faut que cette fonction fonctionne  bg
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
5 mai 2008 à 21:24
Bonsoir,

eh bien j'ai téléchargé le zip de DelphiProg et il marche parfaitement. As-tu pensé à mettre les directives de compilation en haut :

{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}

Sinon je ne vois pas comment le code ne pourrait pas marcher chez toi.
Quelle version de Delphi utilises-tu ?
On va t'aider à résoudre le problème t'inquiete pas ^^ on y arrivera :p

Je vais te demander quelques petits trucs pour aider à résoudre ton problème :

- ta version de Delphi
- si tu as des composants non-standards installés
- si tu as des messages d'erreur, décris-les le plus possible
- vérifie bien si le code est exactement pareil.
- vérifie aussi le fichier projet

On va t'aider !

Cordialement, Bacterius !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
5 mai 2008 à 21:38
Bonsoir,

      @Cirec : je n'ai pas fait d'unité, je me suis trompé en écrivant, j'ai en fait arrangé un tout petit peu les procédures GradientRect et GradientTriangle dans ton unité, pour empecher le tracage à moins de 2 couleurs pour la première, et moins de 4 pour la deuxième, rien de plus ...
      Par contre j'ai construit une petit application autour de ton code, avec le même système de briques et tout, pour mon usage personnel (j'adore avoir un dégradé en arrière-plan de bureau ... mmmh ...).
      Si tu veux je peux t'envoyer l'application que j'ai construit autour de ton code, mais il est pas optimisé, la je cherche à l'améliorer, et je cherche surtout une facon de faire des dégradés autour d'un polygone ou d'un cercle :) Voila tout est dit :p

Cordialement, Bacterius !
0
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008
6 mai 2008 à 12:42
Bon je ne sait pas jusqu'a quelle point je suis con MAIS J'Y ARRIVE PAS !!! bon je vais decrire toute les procedures que j'execute

1) Ouverture de RAD Studio 2007  // Nouveau Projet // Application Fiche VCL.
j'obtiens ca :
unit Unit2;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
type
  TForm2 = class(TForm)
    TStatutBar1 : TStatutBar;
    procedure FormCreate (sender : TObject);
  private
    { Déclarations privées }
    procedure AppIdle (sender : TObject; var : done : Boolean);
  public
    { Déclarations publiques }
  end;
var
  Form2: TForm2;
implementation
{$R *.dfm}






procedure TForm2.AppIdle (Sender : TObject; var Done : Boolean);

    begin

    application.Title := TimeToStr (now);

    done := not self.Active;

    end;












procedure TForm2.FormCreate (Sender: TObject);

begin

Application.OnIdle :=AppIdle;

End;


End.











2) En mode Conception j'ajoute le composant TSTATUTBAR ( operation 1)
3) En mode Conception je double-clic sur le composant TSTATUTBAR et je creet
       0 - TStatutPanel
       1 - TstatutPanel   (j'ai bien mes deux panels visible sur ma forme)
En mode CODE j'ai une erreur que je n'avais pas avant car je faisais des copier//coller
4) Creation de la procedure AppIdle dans les declarations { private}




procedure AppIdle (Sender : TOject ; var Done : Boolean); (operation 2)
5) Je cree la Premiere procedure
procedure TForm2.AppIdle (Sender : TObject; var Done : Boolean);
    begin
    application.Title := TimeToStr (now);
    done := not self.Active;
    end;
6) je cree la 2 ieme procedure
procedure TForm2.FormCreate (Sender: TObject);
begin
Application.OnIdle :=AppIdle;
End;
End.



 

j'ai Aucun message d'erreur je fait F9

Resultat : J'ai pas l heure qui s'affiche dans la statut bar et ca m'gave

Siquelqu'un sait pourquoi merci de me le dire ca fait 2 jour que je suis dessus !!!!!
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 mai 2008 à 12:53
et si tu télécharges la source de Delphiprog et tu ouvres le dpr (projet) dans Delphi et tu fais F9 il fonctionne ?

 
@+
Cirec

<hr siz="" />
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 mai 2008 à 12:56
ah ...
 ton FormCreate est il réellement relié dans l'inspecteur d'objet (onglet évènnement) à l'évènnement OnCreate de la fiche ????
 
@+
Cirec

<hr siz="" />
0
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008
6 mai 2008 à 12:56
oui et au debut j'ai copier exactement le logiciel telecharger j'ai tout comparer ds les moindres details celui de delphiprog fonctionne la meme chose a l'identique cree par mes soins fonctionne pas et j'en suis a me demander si je sait lire   lol
0
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008
6 mai 2008 à 12:59
sur celui de delphiprog y a aucune options ds evenement
0
Rejoignez-nous