MDI : problemes

Résolu
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008 - 15 mai 2005 à 16:08
 cs_coq - 19 mai 2005 à 16:34
Bonjour,

j'ai créé un formulaire principal et ai mi sa propriété MDI a true.

Form2 est le formulaire qui s'ouvre dans le formulaire principal.



Form2 est un formulaire montrant des images. quand l'image est plus
grande que le formulaire principal, le formulaire principal affiche des
scrollbars.(pourtant j'ai mis Autoscroll a false).

Comment faire?



Autre probleme, je voudrais que Form2 ne s'affiche jamais plus grand que le formulaire principal.

Lorsque l'image est plus grande que le formulaire principal, j'aimerais qu'elle se redimentionne.



Merci pour vos réponses d'avance.

37 réponses

MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
19 mai 2005 à 16:23
lol c'est vrai.

http://www.thecodeproject.com/cs/miscctrl/mdiclientcontroller.asp

Il suffit de telecharger la source et de mettre le composant dans la liste des composants.net

Voila vous savez tout !

Euh j'ai gagné quoi? lol
3
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
16 mai 2005 à 14:48
Repondez moi svp.
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 mai 2005 à 09:33
je n'ai pas essayé, mais voici comment je ferais :

- déjà, j'afficherai le Form2 agrandi (maximisé) dans le formulaire principal (frmMain), ca évitera l'apparition des scrollbars de celui-ci.
- au redimensionnement du formulaire Form2, il faut que redessine l'image seulement si elle est plus grande.

si tu veux plus d'aide, donne nous un bout de code, ou dit nous comment tu as mis en oeuvre l'affichage de l'image.

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
0
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
17 mai 2005 à 11:11
Merci!

Je vais donner mon code ça sera plus simple peut etre.

Form principal:



// MENU OUVRIR ////////////////////////////////////////////////////////////////////////////////////

int nbrform2;

private void Ouvrir_Click(object sender, System.EventArgs e)

{

DialogResult res = OuvrirImg.ShowDialog();

if (res == DialogResult.OK)



{

//creation de la form2

nbrform2++;



Form2 frm = new Form2(OuvrirImg.FileName);

frm.Text= "Image n° " + nbrform2;

frm.MdiParent =this;

frm.Show();



}

}



Form2:



//form2

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.IO;



namespace Programme_principal

{

/// <summary>

/// Description résumée de Form2.

/// </summary>

public class Form2 : System.Windows.Forms.Form



{

/// <summary>

/// Variable nécessaire au concepteur.

/// </summary>

private System.ComponentModel.Container components = null;

private Bitmap bmp;

public Form2(string FileName)

{

// Requis pour la prise en charge du Concepteur Windows Forms

{

bmp = new Bitmap(FileName);

WindowState = FormWindowState.Normal;


AutoScrollMinSize = bmp.Size;


ClientSize = bmp.Size;

Invalidate(false);

}

}



/// <summary>

/// Nettoyage des ressources utilisées.

/// </summary>

protected override void Dispose( bool disposing )

{

if( disposing )

{

if(components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}



private void InitializeComponent()

{

//

// Form2

//

this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);


this.ClientSize = new System.Drawing.Size(292, 266);



this.StartPosition =
System.Windows.Forms.FormStartPosition.CenterScreen;

}



protected override void OnPaint(PaintEventArgs e)

{

// Récuperation de l'objet Graphic du control

Graphics g = e.Graphics;


// Dessin de l'image bmp via l'objet Graphics aux
coord 0;0

g.DrawImage(bmp, 0, 0);

}



Voila .

Merci pour vos reponses
0

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

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 mai 2005 à 11:17
ok... dans le OnPaint du form2...

utilise la méthode DrawImage(Images, int, int, int, int)
tu pourras spécifier la largeur et la hauteur de ton image.

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
0
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
17 mai 2005 à 12:01
Si je fais ça par exemple:



g.DrawImage(bmp, 0, 0, 400, 300);



eh ben l'image est déformée puisque j'impose sa largeur et sa hauteur.

Faut donc que je mette des variables mais je fais comment? je les déclares ou et comment stp?
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 mai 2005 à 12:16
réfléchi un peu

Il faut que tu calcules un coefficient pour calculer la taille de ton image.

Donc voici le code :

float coeff = Math.Min( (float)this.ClientSize.Width / (float)bmp.Width,
(float)this.ClientSize.Height / (float)bmp.Height);

g.DrawImage(bmp, 0, 0, (int)(bmp.Width * coeff), (int)(bmp.Height * coeff));

voila...

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
0
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
17 mai 2005 à 13:03
c'est super! sa marche.

J'aurais jamais trouvé tout seul lol.

Comme je comprend pas tout le code jvé te demander de m'expliquer certains trucs.

-Pqoi il y a des float entre parentheses?

-Les / c'est bien pour diviser?



Autres problemes:

-il ya toujours les scrollbars au formulaire principal. Je veux pas que le Form2 soit en "maximized".

-les images s'éffacent, s'affichent pas bien, lorsque j'utilise les scrollbars pour la voir en entier.



Encore Merci
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 mai 2005 à 14:33
. les (float) en c'est pour "caster" les propriétés de manière à avoir le résultat sous la forme d'un nombre à virgule flottante.
. / oui c'est bien la division. pour les scrollbars, je n'ai pas regardé... mais essaye form1.VScroll false et form1.HScroll false;

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
0
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
17 mai 2005 à 14:55
Non, ça n'marche pas pour les scrollbars.

Mais c'est du au fait que c'est en MDI.

Et pour le redimentionnement, l'image se redimentionne bien mais
j'aimerais que le formulaire se redimentionne lui aussi. Or il garde la
taille e l'image a 100%.
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 mai 2005 à 14:59
ce que tu veux toi, c'est que le formulaire enfant soit à la taille de l'espace disponible dans le formulaire parent ?

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
0
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
17 mai 2005 à 15:01
oui, meme legerement plus petit si possible. si tu as photoshop, ouvre
plusieurs image. et c'est le meme resultat que je voudrais.
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 mai 2005 à 15:17
cette fois, c'est un plus "osé"...
Il faut procéder en 2 parties :

Dans le formulaire parent (form1), défini un propriété comme tel :


private MdiClient mdiClient;

public MdiClient MdiClient {

get {
return mdiClient;}
}

et dans le constructeur du formulaire, fait ceci :


foreach (Control control
in
this.Controls) {

if (control
is MdiClient) {
mdiClient
= (MdiClient)control;

break;
}
}

ton formulaire a maintenant une propriété MdiClient accessible depuis les autres objets.

Maintenant, dans le Load de tes fenêtres filles, fait ceci :

this.Size = ((Form1)this.ParentForm).MdiClient.ClientSize

Voila.

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
0
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
17 mai 2005 à 15:27
lol je sais que je suis nul mais je débute. Il est ou le constructeur du formulaire?

Il est ou le Load de mes fenetres filles?
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 mai 2005 à 15:37
Définition : Un constructeur d'instance est un membre qui implémente les actions requises pour initialiser une instance d'une classe.

En gros le constructeur de ton formulaire c'est la méthode qui s'intitule de cette manière :

public Form1() {
}

Il permet d'initialiser les contrôles qui s'y trouvent. Il est conseillé de n'ajouter des éléments qu'après l'appel à la méthode InitializeComponent();


Concernant le Load, c'est un raccourcis de langage. Je parlais de la méthode délégée qui est en charge d'exécuté du code lorsque l'évènement "Load" intervient.
Pour créer cette méthode, accède aux propriétés du formulaire et clique sur l'icone en forme d'éclair, tu arriveras sur la section "Evènements", double-clique sur la ligne où il est inscrit Load.

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
0
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
17 mai 2005 à 15:46
Ayé c'est fait.

Mais sa ne fait rien de plus, rien de moins qu'avant.

ça sert a quoi ?
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 mai 2005 à 15:48
normalement ca redimensionne tes fenêtres filles à la taille de la fenêtre parente...
normalement..

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
0
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
17 mai 2005 à 15:56
Oui mais sa le faisait deja avant. Depuis que tu m'avais donné ça:

float coeff = Math.Min( (float)this.ClientSize.Width / (float)bmp.Width,

(float)this.ClientSize.Height / (float)bmp.Height);



g.DrawImage(bmp, 0, 0, (int)(bmp.Width * coeff), (int)(bmp.Height * coeff));



Tu n'as pas d'autres idées?
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 mai 2005 à 16:23
il te reste quoi comme problème à régler ?

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
0
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
17 mai 2005 à 16:25
En fait, je viens de me rendre compte que ça marche qu'a moitié.

Le formulaire se redimentionne a l'image mais uniquement dans le sens
de la hauteur. la largeur garde la taille de l'image a 100% meme aprés
redimentionnement.

Bizard non?
0
Rejoignez-nous