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:


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 fait une appli de test pour tester les differentes combinaisonts possibles mais sans succes...

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:
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;
 
...
logiquement ça devrait suffir, mais j'ai vu (en depiotant des compos free) que certains passait pas des messages windows...

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.