IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Comportement curieux de delphi


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Comportement curieux de delphi
    Bonjour,

    Je travaille sous delphi 2007 sur windows vista sur un écrran de 1440x900 px.
    A la création de TForm1 sur OnCreate je précise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.FormCreate(Sender: TObject);
    var k : integer;
    begin
      Width:= 1048;
      Height:= 744;
      ClientWidth:= 1032;
      ClientHeight:= 702;
      left:= (Screen.Width-Width) div 2;
      Top:= (Screen.Height-Height) div 2;
    Curieux ma form s'étale sur toute la largeur de l'écran disposant correctement mes composants sur la gauche et laissant un vide sur la droite de 1440-1048px Les boutpns biminimise, bisystem et biMaximize se trouvent naturellement dans le coin gauche de l'écran, ce qui n'est pas ergonomique.

    Existet'il une propriété de la form;que j'ai mal paramétrée, si oui laquelle ?

    Sinon ne me laissez pas mourrir idiot !

  2. #2
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par colorid Voir le message
    Bonjour,

    Je travaille sous delphi 2007 sur windows vista sur un écrran de 1440x900 px.
    A la création de TForm1 sur OnCreate je précise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.FormCreate(Sender: TObject);
    var k : integer;
    begin
      Width:= 1048;
      Height:= 744;
      ClientWidth:= 1032;
      ClientHeight:= 702;
      left:= (Screen.Width-Width) div 2;
      Top:= (Screen.Height-Height) div 2;
    Curieux ma form s'étale sur toute la largeur de l'écran disposant correctement mes composants sur la gauche et laissant un vide sur la droite de 1440-1048px Les boutpns biminimise, bisystem et biMaximize se trouvent naturellement dans le coin gauche de l'écran, ce qui n'est pas ergonomique.

    Existet'il une propriété de la form;que j'ai mal paramétrée, si oui laquelle ?

    Sinon ne me laissez pas mourrir idiot !
    Salut

    ClientWidth et ClientHeight ne sert à rien ici, je te propose un procédure que j'utilise pour fixer la taille et le positionnement de mes fenêtres lorsque j'en ai besoin

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
      procedure EcrirePositionFenetre(Form: TForm;Fenetre: String);
      function LirePositionFenetre(Form: TForm; Fenetre: String): Boolean;
     
    procedure EcrirePositionFenetre(Form: TForm;Fenetre: String);
    var
      WindowPlacement : TWindowPlacement;
    Begin
      WindowPlacement.length:=SizeOf(WindowPlacement);
      WindowPlacement.flags := 0;
      WindowPlacement.showCmd := 1;
      // récupération de l'emplacement ou se situe la fiche lorsque WindowState est en wsNormal
      GetWindowPlacement(Form.Handle,@WindowPlacement);
      With Fichier_ini do
      Begin
        // On créer ou on lit le fichier
        Fichier_Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) +'.txt');
        Try
        // On alimente la section
          WriteInteger(Fenetre, 'Left', WindowPlacement.rcNormalPosition.Left);
          WriteInteger(Fenetre, 'Top', WindowPlacement.rcNormalPosition.Top);
          WriteInteger(Fenetre, 'Height', WindowPlacement.rcNormalPosition.Bottom - WindowPlacement.rcNormalPosition.Top);
          WriteInteger(Fenetre, 'Width', WindowPlacement.rcNormalPosition.Right - WindowPlacement.rcNormalPosition.Left);
        Finally
          if Assigned(Fichier_ini) then Fichier_Ini.Free;
        end;
      end;
    end;
     
    function LirePositionFenetre(Form: TForm; Fenetre: String): Boolean;
    Begin
      Result := False;
      // On créer ou on lit le fichier
      Fichier_Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) +'.txt');
      Try
        if Fichier_Ini.SectionExists(Fenetre) then
        begin
        // On récupère les données si il y en à
          Form.Left := Fichier_Ini.ReadInteger(Fenetre, 'Left', 0);
          Form.Top := Fichier_Ini.ReadInteger(Fenetre, 'Top', 0);
     
        // si la fenêtre n'ai pas taillable Height, Width reste inchangé (même si on touche directement le ini)
          if Form.BorderStyle <> bsSingle then
          begin
            Form.Height := Fichier_Ini.ReadInteger(Fenetre, 'Height', 08);
            Form.Width := Fichier_Ini.ReadInteger(Fenetre, 'Width', 0);
          end;
          Result := True;
        end;
      Finally
        if Assigned(Fichier_ini) then Fichier_Ini.Free;
      end;
    end;
    utilisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      EcrirePositionFenetre(Self,Self.Name);
    end;
    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
     
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     
      if not (LirePositionFenetre(Self,Self.Name)) then
      Begin
      // Alors la taille par defaut est forcée
        Self.Height := 744;
        Self.Width  := 1048;
        Self.Left   := (Screen.Width-Self.Width) div 2;
        Self.Top    := (Screen.Height-Self.Height) div 2;
     
      end;
    end

    @+

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut C'est mieux mais ce n'est pas cela
    Bonjour et merci

    Cette fois la fenêtre est de bonne dimension mais ne se place pas au cente de l'écran (left=0)

    Que faire ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Pour placer la fiche au centre de l'écran, tu mets le paramètre Position à poDesktopCenter

    Tu peux mettre tout cela dans l'écran de création
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.FormCreate(Sender: TObject);
    begin
       Height := 744;
       Width  := 1048;
      Position := poDesktopCenter;
    end
    J'ai fait le test, fonctionne parfaitement

    A plus

  5. #5
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par colorid Voir le message
    Bonjour et merci

    Cette fois la fenêtre est de bonne dimension mais ne se place pas au cente de l'écran (left=0)

    Que faire ?
    Salut, en utilisant ce que j'ai proposé, il faut que ta form soit mise en position PoDesigned

    a+

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Rien à faire position en bas à gauche
    Bonjour,

    Cette fois j'ai déclaré les en dur dans les proptiétés :
    Width = 1044
    Height = 744
    Position = poDesktopCenter
    J'ai placé en remarque toutes les déclarations dans le code relatives à la position

    La fenêtre se positionne en bas à gauche

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 829
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 829
    Points : 15 259
    Points
    15 259
    Par défaut
    Euh, ça serait pas plutôt "poScreenCenter" ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut avec poScreenCenter même problème
    La fenêtre se positionne en bas à gauche

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 548
    Points : 25 118
    Points
    25 118
    Par défaut
    Citation Envoyé par colorid Voir le message
    Les boutpns biminimise, bisystem et biMaximize se trouvent naturellement dans le coin gauche de l'écran, ce qui n'est pas ergonomique!
    Ah Bon ???
    Les boutons sont à droites !
    A Gauche c'est l'icone et le titre !
    Tu as un problème de la latéralisation ?

    Citation Envoyé par BuzzLeclaire Voir le message
    ClientWidth et ClientHeight ne sert à rien ici,
    Effectivement, cela n'a d'effet que durant le chargement de la DFM !
    Je trouve cela fort dommage !



    Il n'y a rien qui positionne par défaut en bas à gauche !
    Par défaut c'est en haut\gauche en poDefault (Windows peut de lui même légèrement décaler les fenêtres de même classe)

    en poDesigned, colorid, ton 1er code similaire à celui de BuzzLeclaire est tout à fait fonctionnel pour un écran simple, pour le multi-écran, on peut avoir des surprises !
    en poScreenCenter, cela met au centre de l'écran
    en poDesktopCenter, est a évité si l'on a deux écrans, sinon c'est pareil que poScreenCenter

    Au lieu de Screen.Height, il y a aussi Screen.WorkAreaHeight pour retirer la barre de tache par exemple

    Il faudrait vérifier que la propriété Align de la TForm est bien à alNone, les Anchors en Left\Top, ... il peut arriver que par erreur ces valeurs ont été modifiées !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.FormCreate(Sender: TObject);
    var k : integer;
    begin
      Width = 1044;
      Height = 744;
      left:= (Self.Monitor.WorkareaRect.Width - Width) div 2;
      Top:= (Self.Monitor.WorkareaRect.Height - Height) div 2;
    end;
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.FormCreate(Sender: TObject);
    var k : integer;
    begin
      Width = 1044;
      Height = 744;
      Left:= (Self.Monitor.WorkareaRect.Right - Self.Monitor.WorkareaRect.Left - Width) div 2;
      Top:= (Self.Monitor.WorkareaRect.Bottom - Self.Monitor.WorkareaRect.Top - Height) div 2;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Ok et Merci
    Sans doute une blague de la souris !
    La propriété align était sur alBottom !!!
    Maintenant ça marche avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Width:= 1048;
      Height:= 744;
      Position := poScreenCenter;
    Encore Merci

Discussions similaires

  1. [TOMCAT5.5] Comportement curieux de la mémoire
    Par tnodev dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 02/11/2007, 11h26
  2. [JScrollBar] comportement curieux
    Par rems033 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 01/10/2007, 10h06
  3. [Cookies] Mes cookies ont un comportement curieux
    Par Jinx_ dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2007, 16h11
  4. [Rewrite .htaccess] Comportement curieux aussi
    Par Bensor dans le forum Apache
    Réponses: 2
    Dernier message: 23/12/2006, 13h22
  5. comportement curieux font-bold sous ffx ?
    Par SpaceFrog dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 22/06/2006, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo