bonjour tt le monde
j'ai un ptit soucis avec une appli mdi que je développe et apres quelque recherches infructueuses, j'viens voir si vous auriez pas une solution miracle :p
mon appli mdi utilise des form modales pour tt ce qui est saisie / modif des données (logique me direz vous), le ptit soucis, c'est que je specifie une position (TPosition) au design de ma form modale (poScreenCenter ou autre) pour que ma boite de dialogue s'affiche tjrs en plein milieu de mon appli, le bins c'est que ça marche pas.. et quand je passe ma fenetre en mdichild et que je la cree en non modale ça fonctionne... d'ou mon étonnement.
je me suis dit, c'est un probleme de parent ou un truc comme ça, le soucis c'est que si je passe application.mainform comme parent de ma form modale, elle apparait bien la ou je veux, mais ça bloque l'appli (fenetre inaccessible et comme on peut pas fermer la fenetre modale ça tourne en rond.)
donc je voulais savoir si:
il est possible de positionner une fenetre modle la ou on veux a partir d'une appli mdi et si oui comment?
j'suis sur que c'est un truc tout con, mais la ou je passe a coter lamentablement ou chsuis trop bete pour trouver :p
code utiliser pour la création des fenetres modales:
j'ai fait une appli de test pour tester les differentes combinaisonts possibles mais sans succes...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 try dlg := TForm2.Create(ModalOwner); //ModalOwner : TComponent soit nil soit application, soit application.mainform soit self (mainform ou une mdichild) dlg.Position := posit; //posit: TPosition dlg.ShowModal; dlg.Free; except on E : Exception do MessageDlg(e.Message,mtError,[mbOk],0); end;
j'ai aussi une autre question paralelle à ça:
pour le confort de mes utilisateurs, je développe un composant pour sauvegarder dans la base de registre la position de la form sur laquelle il est posé ainsi que sa taille (j'utilise pas des compos dispo parce qu'au final je veux qu'il sauvegarde aussi des tailles de colonnes que je lui aurais spécifier a traver un propertyeditor perso)
ça marche assez bien avec des mdichild mais pour le probleme cité précédement ça foire completement avec des fenetres modales... et la encore je tourne en rond...
le code que j'utilise pour charger les pos et tailles de mes fenetres est le suivant:
logiquement ça devrait suffir, mais j'ai vu (en depiotant des compos free) que certains passait pas des messages windows...
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 constructor TLrkFormRegSaver.Create(AOwner: TComponent); begin inherited Create(AOwner); FOnShow := nil; if AOwner is TForm then begin ParentForm := (AOwner as TForm); FOnShow := ParentForm.OnShow; ParentForm.OnShow := MyOnShow; end else ParentForm := nil; end; procedure TLrkFormRegSaver.Load; var reg : TRegistryIniFile; iTop : integer; iLeft : integer; iHeight : integer; iWidth : integer; begin if (not self.Enabled) or (csDesigning in ComponentState) then Exit; if (self.ParentForm <> nil) and(self.RegRootKey <> EmptyStr) then begin reg := TRegistryIniFile.Create(self.RegRootKey); try //charge la position et taille de la form dans un rep qui porte le nom de la form iTop := reg.ReadInteger('MemForms\'+self.ParentForm.Name,'Top',self.ParentForm.Top); iLeft := reg.ReadInteger('MemForms\'+self.ParentForm.Name,'Left',self.ParentForm.Left); iHeight := reg.ReadInteger('MemForms\'+self.ParentForm.Name,'Height',self.ParentForm.Height); iWidth := reg.ReadInteger('MemForms\'+self.ParentForm.Name,'Width',self.ParentForm.Width); //deplace la form self.ParentForm.SetBounds(iLeft,iTop,iWidth,iHeight); finally reg.Free; end; end; end; procedure TLrkFormRegSaver.MyOnShow(sender: tobject); begin if Assigned(FOnShow) then FOnshow(sender); load; end; ...
j'appelle load sur le onshow parce qu'ailleur (surcharge de loaded par exemple) ça ne fonctionnait pas bien (valeurs chargées et modifées, mais la form restait tel que dans le designer )
si vous avez des conseils ou soluces pour ce probleme, je suis prenneur.
Partager