2

これは、より大きなプロジェクトの一部にすぎません。フォームにテキストボックスがあり、その横にあるコマンドボタンをクリックすると、テキストボックスに合わせて表示されるフォームが表示されます。アイデアは、ドロップダウンボックスのように見せることです。しかし、唯一のことは、この「ドロップダウン」が別の形式であり、モーダルなものであるということです。

これは私がこれまでに行ったことであり、フォームは正常に表示されます。

procedure TfrmSetupTaxes.cmdChangeParentClick(Sender: TObject);
var
  Res : Integer;
  frmPopUp : TForm;

begin
  frmPopUp := TfrmTreePopUp.Create(nil);

  frmPopUp.Parent := Self;
  frmPopUp.Top:= self.rp.Top + self.EditItemCat.Top +
                 self.txtSelParentName.Top + self.txtSelParentName.Height + 3;
  frmPopUp.Left:= self.rp.Left + self.EditItemCat.left + self.txtSelParentName.Left;

  Res := frmPopUp.ShowModal;
end;   

注:「rp」はパネルであり、「EditITemCat」はタブシートです。これらは単にポジショニングに使用されます。

さて、これが私の問題です...

フォームは表示されますが、フリーズしているようです。応答せず、親フォームも応答しません。IDEを使用しているので、IDEを閉じます。

誰かが私がここで欠けているものを見せてくれませんか?

ありがとう!

4

2 に答える 2

2

あなたが見逃しているのは、モダリティがどのように機能するかです。アプリケーションにモーダルウィンドウがある場合、他のウィンドウが無効になっているため、他のウィンドウと対話することはできません。

frmPopupを呼び出すとShowModal、上記の理由でTfrmSetupTaxesフォームが無効になります。frmPopupをfrmSetupTaxesの子にしたので、これも無効になります。

モダリティを使用してこのデザインを作成することはできません。別のメカニズムを考案する必要があります。

于 2013-01-09T01:35:21.040 に答える
0

これは、少なくとも私にとっては最高の発見の1つです;)

たくさんの掘り下げと指示の後で、私はそれが私を超えていることに気づきました。さまざまなOS(少なくともWindowsとUbuntu)で機能する「正しい」方法を理解できませんでした。

最後に、私は専門家を雇い(いいえ、どのフォーラムサイトからも)、これを見せてくれるように彼に支払いました。そして、それが他の開発者に役立つことを期待して、ここに投稿するのが最善だと思いました。

答える前に、あることが不可能だと教えてくれたセルタック・アキュズに心から感謝します。また、彼らのリンクからいくつかの解決策があることがわかりましが、それらは私のニーズに合いませんでした。

さて、答えの前に、これが私が固執しなければならなかった私のルールです。

  1. WindowsとUbuntuの間で作業を移植できるようにしたいので(少なくとも今のところ)、Windows固有の関数やAPIを使用しないでください。

  2. 使用中のMDIフォームはありません。再びクロスプラットフォームの理由で。

  3. サードパーティのプラグインや製品は使用されていません。

今答え...

procedure TfrmSetupTaxes.cmdChangeParentClick(Sender: TObject);
var
  Res : Integer;
  frmPopUp : TForm;
  pt: TPoint;
begin

  frmPopUp := TfrmTreePopUp.Create(self);

  pt := txtSelParentName.ClientToScreen(Point(0, 0));

  frmPopUp.Top := pt.y + txtSelParentName.Height;
  frmPopUp.Left := pt.x;

  Res := frmPopUp.ShowModal;

end;

以上です!

重要なのは、ポップアップの親プロパティを設定しないことでした。次に、ClientToScreen(私が使用することさえ夢にも思わなかった関数)を使用します。それは美しく仕事をします。

于 2013-01-11T03:46:22.190 に答える