UTILITAIRE MDI & ROUTINES MDI DE BASE

Signaler
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
-
Messages postés
13
Date d'inscription
vendredi 28 décembre 2007
Statut
Membre
Dernière intervention
14 avril 2013
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/12254-utilitaire-mdi-routines-mdi-de-base

Messages postés
13
Date d'inscription
vendredi 28 décembre 2007
Statut
Membre
Dernière intervention
14 avril 2013

bnjour

Je debute totalement et souhaiterais savoir comment faire pour afficher un autre formulaire car l ajout d un item dans le menu et la nouvelle proceudre onclick associee ne me permet pas d afficher autre chose que la meme fenetre.
Je souhaiterais donc appeller une fenetre que j aurais cree moi mais j en suis incapable je debute totalement...

merci de votre aide et de votre patience
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
2
Pour créer une fenêtre enfant, ce n'est pas application.CreateForm qu'il faut appeler mais :
procedure TForm_Main.Menu_Mdi_NewClick(Sender: TObject);
Var Form:TForm1;
begin
if Mdichildcount <= 4 then Form:=TForm1.Create(Application);
if Mdichildcount > 4 then Menu_Mdi_New.Enabled := False;
end;
Ainsi tu peux supprimer les déclaration de Form2,Form3 et Form4 situées dans Form1. Car ceci t'a obligé à limiter le nombre de fenêtre enfants alors que ce n'est pas utile.

Pour récupérer l'icone de la fenêtre enfant, voici la nouvelle procédure Tache() :
procedure TForm_Tache.Tache();
var SpeedBouton:TSpeedButton;
Cpt:Integer;
Bmp1,Bmp2:TBitMap;
begin
if Form_Main.MDIChildCount > 0 then
for Cpt := Form_Main.MDIChildCount-1 downto 0 do
begin
SpeedBouton := TSpeedButton.Create(self);
SpeedBouton.Parent := Form_Tache;
SpeedBouton.Name := 'SP_Tache' + IntToStr(Cpt);
SpeedBouton.Height := SP_Height;
SpeedBouton.Width := SP_Width;
SpeedBouton.Top := (Cpt - MDIChildCount) * (SP_Height + EcartH);
SpeedBouton.Visible := True;
SpeedBouton.Caption := Form_Main.MDIChildren[Cpt].Caption;
SpeedBouton.Tag := Cpt;
SpeedBouton.Font.Size := 8;
SpeedBouton.OnClick := Form_Tache.OnClick;

//Associer une image au bouton
Bmp1:=TBitMap.Create;
Bmp2:=TBitMap.Create;
Try
bmp1.Width :=32;
bmp1.Height:=32;
bmp1.Canvas.Brush.Color:=clbtnface;
bmp1.Canvas.FillRect(Bmp1.Canvas.ClipRect);
bmp1.Canvas.StretchDraw(Bmp1.Canvas.ClipRect,Form_Main.MDIChildren[Cpt].Icon)
bmp2.Width :=20;
bmp2.Height:=20;
bmp2.Canvas.StretchDraw(Bmp2.Canvas.ClipRect,Bmp1);
SpeedBouton.Glyph.Assign(bmp2);
Finally
Bmp1.Free;
Bmp2.Free;
End;
end;
end;

Pour le tester j'ai ajouté une icone ménuellement dans le OnCreate de TForm1 : Icon.LoadFromFile('MonIcone.Ico'). Mais le mieux serai d'ajouter un fichier .RES avec les icones.

Bonne continuation,

Nono.
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
2
Dans la procédure TForm_Tache.Tache();
Il faut supprimer la ligne suivante pour ne pas avoir d'erreur à la fermeture de l'application :
Image := TImage.Create(self);

Pour les icones, je vais voir si je trouve quelque-chose...