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 :

[D2006] Graphique modification de l'affichage


Sujet :

Langage Delphi

  1. #1
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut [D2006] Graphique modification de l'affichage
    Bonjour

    Dans une procédure je souhaite preparer l'affichage d'un graphique en affectant à WindowState wsMaximized, l'état initial étant wsNormal, et initialiser les dimensions A et B de la PaintBox contenue dans la form pour des calculs ultérieurs à effectuer avant l'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TFAffGraph.GrInit;
    begin
    //  A := FAffGraph.ClientWidth;                // A=495 essai valeur à l'exécution
      FAffGraph.WindowState := wsMaximized;
      A := FAffGraph.PBGraph.Width ;
      B := FAffGraph.PBGraph.Height;
    //  A := FAffGraph.ClientWidth - 20;           // Clientwidth=495
    //  B := FAffGraph.ClientHeight -FAffGraph.PBGraph.Top-5;
    end;
    A l'exécution je constate que cette procédure est inefficace l'écran ayant encore les mêmes dimensions avant et après l'exécution de l'affectation de wsMaximized, A = 495, largeur max. possible 1240.

    Comment activer la modification de l'affichage, si possible sans passer par l'événement OnResize ?

    D'aprés mes recherches il semble que la solution soit ni évidente ni simple.

    Est-il possible d'exécuter par un code la méthode "Agrandir" de Windows ?

  2. #2
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 504
    Points : 2 773
    Points
    2 773
    Billets dans le blog
    10
    Par défaut
    Quelques propriétés utiles. L'image étant ici directement dans la Form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      object Image1: TImage
        Align = alClient
        Stretch = True

  3. #3
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    Vous avez plusieurs possibilités pour ce faire :
    Utiliser les possibilités d'ancrage du composant dans la fiche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PBGraph.Anchors := [akLeft, akTop, akRight, akBottom];
    Dans ce cas, votre composant conservera ses positions par rapport aux bords de sa fiche parente quelque soit les dimensions que l'on donnera à cette dernière.

    Recalculer les dimensions vous même en traitant l'évènement OnResize de la fiche parente.
    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
    const
      MARGE = 5;
    // ...
    procedure TFAffGraph.FormResize(Sender: TObject);
    var
      X, Y, W, H: Integer;
    begin
      X := MARGE;
      Y := MARGE;
      W := Self.ClientWidth - X - MARGE; // ou Self.ClientWidth - 2 * MARGE;
      H := Self.ClientHeight - Y - MARGE; // ou Self.ClientHeight - 2 * MARGE;
      PBGraph.Left := X;
      PBGraph.Top := Y;
      PBGraph.Width := W;
      PBGraph.Height := H;
    end;
    Dernière petite chose, évitez de mettre le nom de variable d'une fiche dans une méthode de la classe de cette fiche et utilisez le mot clé Self. Si jamais vous créez une fiche de cette classe que vous affectez à une autre variable, les résultats vont être aléatoire (erreur de type violation d'accès ou comportement à priori erratique).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TFAffGraph.GrInit;
    begin
    //  A := Self.ClientWidth;                // A=495 essai valeur à l'exécution
      Self.WindowState := wsMaximized; 
      A := Self.PBGraph.Width ;
      B := Self.PBGraph.Height;
    //  A := Self.ClientWidth - 20;           // Clientwidth=495
    //  B := Self.ClientHeight - Self.PBGraph.Top-5;
    end;
    --
    Philippe.

  4. #4
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut
    Bonjour,

    En définitive après modification de FormResize je peux exécuter sans problème.

    @ Ph.B
    Ayant transféré Grinit à partir d'une unité je oublié de faire la modification dans AffGraph que j'ai supprimé, mais pourquoi self.

    Merci pour vos commentaires.

    Mais command simuler la commande "Agrandir" de windows ?

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par paulfr Voir le message
    Ayant transféré Grinit à partir d'une unité je oublié de faire la modification dans AffGraph que j'ai supprimé, mais pourquoi self.
    Self est facultatif dans l'exemple que j'ai repris. Self correspond à l'instance courante lors de l'appel de la méthode de sa classe.
    Cf. FAQ.
    Il ne faut pas utiliser un nom d'instance qui pourrait ne pas être instanciée et déclencher une exception de type Violation d'accès.
    Cf. exemple suivant :
    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
    54
    // Code l'unité
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        BtnInformation: TButton;
        procedure BtnInformationClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        Information: String;
      end;
     
    var
      Form1: TForm1;
      Form1_bis: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.BtnInformationClick(Sender: TObject);
    begin
       // Correct et non ambigüe
      ShowMessage(Self.Information);
      // Correct mais ambigüe, cf. FAQ
      ShowMessage(Information);
      // Incorrect
      ShowMessage(Form1.Information);
    end;
     
    end.
    // code du projet
    program Project1;
     
    uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1};
     
    {$R *.res}
     
    begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1_bis);
      Form1_bis.Information := 'Form1_bis';
      Application.Run;
    end.
    Citation Envoyé par paulfr Voir le message
    Mais command simuler la commande "Agrandir" de windows ?
    Une piste est de déduire la taille maximale que pourra avoir la fenêtre à partir des éléments suivants : Screen.Height et Screen.Width (unité Forms). Il faudra déduire la hauteur de la barre de la fenêtre et la hauteur de la barre Windows si celle-ci est horizontale ou sa largeur si celle ci est verticale et non masquée.
    On peut le savoir par des appels API (faire une recherche) ou le déterminer approximativement :
    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
    const
      MARGE = 5;
     
    procedure TFAffGraph.GrInit;
    var
      X, Y, W, H: Integer;
    begin
      X := MARGE;
      Y := MARGE;
      // Ici, je suppose la barre Windows masquée
      // et le contour inférieur de la fenêtre n'est pas déduite
      W := Screen.Width - X - MARGE;
      H := Screen.Height - (Height - ClientHeight) - Y - MARGE;
      PBGraph.Left := X;
      PBGraph.Top := Y;
      PBGraph.Width := W;
      PBGraph.Height := H;
    end;
    Sinon gérer cela dans l'événement OnResize (cf. message précédent)
    --
    Philippe.

  6. #6
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut
    Bonjour,

    @Ph.B merci pour le code.

    P lautier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Mise à jour de graphique (modification de plages de données)
    Par gabi75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/06/2010, 15h41
  2. [1.x] Modification de l'affichage des erreurs des formulaires
    Par asmodaiii dans le forum Symfony
    Réponses: 5
    Dernier message: 10/09/2009, 16h42
  3. graphique - modification couleurs
    Par ver_for dans le forum IHM
    Réponses: 0
    Dernier message: 08/04/2008, 17h20
  4. Modification .pdf et affichage
    Par nexus-x dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 08/06/2007, 16h55
  5. [Images] Modification de l'affichage d'une image à la volée
    Par blueice dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 01/03/2007, 08h13

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