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

Lazarus Pascal Discussion :

TForm & AutoScroll [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut TForm & AutoScroll
    Bonjour @ toutes & tous,

    J'ai un problème que je ne saurai même pas exposé tellement je n'y comprends rien...
    Le contexte est le suivant, un TForm encapsulé dans l'application principale avec un alignement = alClient et la propriété AutoScroll = True.
    Je dessine des TShape un peu partout et surtout au delà de la surface visible.
    Je comptais sur la propriété AutoScoll pour pouvoir me balader partout et voir ainsi tous les objets.
    Dans l'absolue, ça fonctionne mais...et c'est là que j'arrête les explications et que je vous propose d'utiliser mon projet de test; observez ce qui se passe lors du déplacement de l'objet rectangulaire (clic gauche enfoncé) après avoir scrollé verticalement pour voir totalement l'objet triangle.

    Test1.zip

    Toutes suggestions, pistes et autres conseils sont les bienvenues parce que là, je ne sais même pas par quel bout attaquer le problème...

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 167
    Billets dans le blog
    9
    Par défaut
    Bonjour ! Ma contribution pour le moment sera très modeste parce que chez moi (Windows 8.1) le programme plante dès que j'appuie sur l'un des deux boutons.

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 167
    Billets dans le blog
    9
    Par défaut
    Si je fais la modification suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      //Form2.Parent := Self;
      Form2.Parent := nil;;
    le programme fonctionne bien. L'effet obtenu est même assez amusant. Il y a juste un problème avec le trait reliant les deux figures : il ne se redessine pas comme il faut.

  4. #4
    Membre confirmé Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut
    Bonjour Roland & merci de t'intéresser à mon problème.

    Petite aparté, je trouve très inquiétant qu'un petit projet de test comme celui-ci plante sous W$8.1 ...

    Concernant mon problème, tout d'abord, ne pas jouer avec le bouton "Print" sous peine de mettre le feu à la maison, trucider le chat, etc...
    Ensuite, si Form2 n'a plus de parent, elle devient une fenêtre indépendante et ce n'est pas le but du jeu, comment résoudre ça sous W$8.1 ?
    De plus, quelles que soient les circonstances, le trait de liaison se dessine toujours correctement chez moi. C'est l'objet rectangulaire qui pose problème lors de son déplacement une fois la fenêtre totalement défilée vers le bas.

    Dernier point visuel qui doit sûrement être intimement lié au précédent (ou vice versa), c'est le fond de la fenêtre qui ne reprend la couleur prédéfinie dans la zone "scrollé". Cette même zone où si l'on déplace l'objet dedans, on obtient tout un tas de déformations visuelles et la non interception de l'événement MouseUp (le rectangle reste jaune avec une bordure rouge).

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 167
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par TheFreeBerga Voir le message
    Bonjour Roland & merci de t'intéresser à mon problème.
    Pas de quoi. Malheureusement je crains de ne pas t'apporter une aide très efficace, n'étant pas du tout expert de ce genre de problème.

    Citation Envoyé par TheFreeBerga Voir le message
    Petite aparté, je trouve très inquiétant qu'un petit projet de test comme celui-ci plante sous W$8.1 ...

    Concernant mon problème, tout d'abord, ne pas jouer avec le bouton "Print" sous peine de mettre le feu à la maison, trucider le chat, etc...
    Ensuite, si Form2 n'a plus de parent, elle devient une fenêtre indépendante et ce n'est pas le but du jeu, comment résoudre ça sous W$8.1 ?
    Je ne sais pas si ça peut t'aider mais voici le code qui déclenche l'exception (c'est dans "wincontrol.inc") :

    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
    procedure TWinControl.WMSize(var Message: TLMSize);
    var
      NewLeft, NewTop: integer;
      NewBoundsRealized: TRect;
      TopParent: TControl;
      OldClientSize: TSize;
      NewClientSize: TSize;
     
      procedure RaiseLoop;
      var
        s: String;
      begin
        s:='TWinControl.WMSize loop detected, the widgetset does not like the LCL bounds or sends unneeded wmsize messages: '+DbgSName(Self)+' BoundsRealized='+dbgs(FBoundsRealized)+' NewBoundsRealized='+dbgs(NewBoundsRealized);
        if (OldClientSize.cx<>NewClientSize.cx)
          or (OldClientSize.cy<>NewClientSize.cy)
        then
          s:=s+' OldClientSize='+dbgs(OldClientSize)+' NewClientSize='+dbgs(NewClientSize);
        raise Exception.Create(s);
      end;
    Maintenant, si je comprends bien, ton code crée une fenêtre avec barres de défilement, en lui donnant comme parent une fenêtre plus petite et sans barres de défilement. On pouvait s'attendre à ce que cela ne fonctionne pas très bien, non ?

  6. #6
    Membre confirmé Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut
    Maintenant, si je comprends bien, ton code crée une fenêtre avec barres de défilement, en lui donnant comme parent une fenêtre plus petite et sans barres de défilement(1). On pouvait s'attendre à ce que cela ne fonctionne pas très bien, non(2) ?
    Oui(1) et Non(2). La fenêtre cliente possède un alignement alClient pour remplir toute la surface de fenêtre parent hormis le GroupBox du haut qui contient les boutons d'actions et de fait, je ne vois pas en quoi le design originale (taille) de la fenêtre cliente poserait problème ?

    D'ailleurs, à ce sujet, sous linux, si je fais comme toi, Parent := nil, la fenêtre devient indépendante, ce qui n'est absolument pas le but du jeu.
    Et sous W$8.1, comment ça réagit ? La fenêtre est toujours encapsulée dans l'application principale ou flottante ?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/09/2003, 09h36
  2. Taille d'un TForm à l'état Maximized
    Par Altau dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/06/2003, 12h57
  3. [TForm] Ne pas autoriser l'ouverture d'un form
    Par sbeu dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2002, 11h20
  4. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

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