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

Delphi Discussion :

Pour les experts des forms


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 147
    Points : 164
    Points
    164
    Par défaut Pour les experts des forms
    J'ai un soucis et j'espère que quelqu'un pourra me mettre sur une piste (cela ne m'empeche pas de chercher bien sur)...

    => j'ai une fenetre crée via CreateParented(Main.ClientHandle)
    (la fenetre mère est une fenetre MDI)
    => Je maximize la fenetre enfant (mais les scrollbar ne disparaissent pas !! gloupp)
    => Je maximize la fenetre mère (grrrr la fenetre enfant ne suit pas)... il faut que je la remette en wsNormal puis wsMaximized pour être ok... donc pas top

    ?

    J'avais à l'origine essayé des MDIChild mais j'avais un probleme (maximized tout ou rien et surtout si je crée de fois une fenetre, en fonction de l'ordre de fermeture cela générait une erreur d'initialisation : j'ouvre F1 puis F2, si je ferme F1 puis F2 ok pas de probleme si j'avais respecté l'ordre F2 puis F1 alors là j'ai une erreur sur F1 !!! ) donc j'ai essayé une autre solution mais je m'en sort pas y'a toujours un truc qui cloche !!!


    Merci à tous
    Phil

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    oups, pourquoi diable fait tu du CreateParented et non un Parent:=Main ?

    mais sinon je ne suis pas très surpris que la gestion de la taille de fenêtre ne suis pas...il y a dans la VCL des mécanismes mis en place par Delphi que tu n'auras pas sur une construction comme la tienne.

    Si tu dois passer par un CreateParented, ne peux tu placer l'enfant dans une fiche vide qui reçoit le Handle de l'enfant et qui sur un Resize le redimensionne ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 147
    Points : 164
    Points
    164
    Par défaut
    Pourquoi faire compliqué hein ?

    A la base la form enfant est dans une DLL..
    j'envoie l'handle de MainForm.ClientHandle... j'avais au début essayé sans passer par une MDI en l'affichant dans un scrollbox (pas de scrollbar ?). De plus j'avais le même problème avec le Maximized
    Si je fais Parent := (le TWinControl) la fenêtre s'affiche brièvement en dehors de la mainform et puis disparait lol et de ce fait j'ai trouvé que CreateParented

    Pour le resize c'est l'orientation que j'essayais de suivre mais peut-on redimensionner une fenetre enfant qui se trouve dans un etat maximized sans passer par un changement d'état de windowstate ?
    Ou alors peut-on masquer l'animation de la fenetre avec son changement d'état (LockWindowUpdate ?)

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 147
    Points : 164
    Points
    164
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      Info.cbSize := SizeOf(TAnimationInfo);
      LongBool(Info.iMinAnimate) := etat; // (false or true)
      SystemParametersInfo(SPI_SETANIMATION, SizeOf(Info), @Info, 0);
    Bon j'ai déja limité l'animation avec ça et un LockWindowUpdate sur l'évenement SC_ZOOM et SC_RESTORE mais est-ce raisonnable ??

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    je ne sais pas

    mais ce que je ferais, c'est dans la DLL une TFrame (ou un TForm sans bordure peu importe), et dans l'EXE je placerais un TForm vierge dans lequel je viens coller mon objet Windows

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function MaDll_GetFrame(Parent:HWnd):HWnd;
    var
     Frame:TFrame;
    begin
     Frame:=TFrame.CreateParented(Parent);
     Result:=Frame.Handle;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.AddChild;
    var
     Form:TForm2; // MDIChild
    begin
     Form:=TForm2.Create(Self);
     Form.FrameHandle:=MaDLL_GetFrame(Form.Handle);
    end;
     
    // reste à placer dans Form2 le code nécessaire pour que le FrameHandle
    // soit redimensionné comme il le faut...
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 147
    Points : 164
    Points
    164
    Par défaut
    j'étais en train de tout modifier quand ohhh je n'ai pas la propriété FrameHandle !!!
    (sous delphi 2006)

    J'ai compris ta démarche
    j'essaie en procédant autrement (la fenetre child est crée par l'exe et j'incorpore la form dans la fenetre...) c'est ça ?
    mais (sans avoir testé encore) je risque de me retrouver dans le cas de figure ou les fenetres child se maximise tous et si j'ouvre une fenetre child non maximized l'autre fenetre va se 'demaximized' ?

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    mais oui FrameHandle, c'est un truc que tu dois ajouter dans Form2

    ensuite tu auras un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm2.FormResize(Sender: TObject);
    begin
     SetWindowPos(FrameHandle,0,0,0,ClientWidth,ClientHeight,SWP_NOMOVE or SWP_NOZORDER);
    end;
    enfin j'ai pas testé tout cela, c'est juste une idée comme ça
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 147
    Points : 164
    Points
    164
    Par défaut
    ok je vais regardé dans ce sens.... et en plus cela me facilite les choses dans un sens (en créant des évènements communs pour toutes les fenetres enfants )
    merci et peut être à une autre fois
    je vais mettre résolu dans l'espoir que cela le soit... je tourne en rond avec ça depuis 5 jours et du coup j'avance plus

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

Discussions similaires

  1. [Blague] Le langage de programmation C pour les experts
    Par valentine74 dans le forum Humour Informatique
    Réponses: 29
    Dernier message: 04/10/2009, 02h50
  2. Réponses: 14
    Dernier message: 15/10/2006, 11h22
  3. Question pour les experts
    Par Philippe66 dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 31/08/2006, 23h35
  4. Pour les spécialistes des Cartes Mères !
    Par zakuli dans le forum Composants
    Réponses: 8
    Dernier message: 04/12/2005, 07h30

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