問題タブ [tform]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - オブジェクトリポジトリへのフォームの登録(自動化、コードまたはその他の手段による)
公開されたプロパティをオブジェクトインスペクターに表示したいので、フォームをカスタマイズしていました。フォームを作成し、オブジェクトリポジトリに配置し、RegisterCustomModuleに登録するためのパッケージを作成するという簡単な方法を実行しました。
自動化された方法でオブジェクトリポジトリに配置する方法があるかどうかを知りたいです(他のマシンへのインストールを簡素化したい)。
私はグーグルで検索しましたが、誰もそれについて何も書いていなかったか、正しいキーワードが見つかりませんでした...
delphi - 動的な Delphi フォームの作成 - 正しいマウス メッセージ処理を保証
左側の treeView と右側のパネルに基づくアプリケーション レイアウトがあります。パネルは、選択したツリー ノードに応じて異なる TForm クラスをホストします (一種の「フォーム エクスプローラー」)。一度に表示されるフォームは 1 つだけで、別の場所に保存されている基になるデータを公開し、新しいツリー ノードがクリックされるたびにフォーム インスタンスが作成および破棄されます。
次のシナリオを除いて、これはすべて正常に機能します。1 秒ほどかかるアクションを起動するフォームのボタンをクリックします。このアクション中に、Application.ProcessMessages が呼び出される場合があります。このアクションが実際に完了する直前に、ユーザーは新しいツリー ノードをクリックします。この wmMousedown メッセージが処理され、フォームがすぐに解放されます。その後、アクション コードはフォーム コードに戻り、self が変更され、AV が発生したことを検出します。
私の質問は、フォームの解放を許可する前に、フォームのメッセージがすべて処理され完了したことを知る方法はありますか? モーダルフォームは、忙しい場合に閉じる前に一時停止するため、閉じるボタンがクリックされたときにこれを行うようです...
ありがとうブライアン
delphi - TForm の子孫のデフォルトの Show 動作 / SetVisible をオーバーライドします(Delphi VCL)
TForm の子孫の表示のデフォルト動作を変更したいと考えています (たとえば、それ自体を画面に表示する代わりに、新しいタブシートとしてページ コントロールに配置したいと考えています)。それを達成する方法は?標準メソッド (Show メソッドを呼び出すか、Visible プロパティを設定) を使用して表示したいので、SetVisible メソッドをオーバーライドしようとしました。しかし、プライベート メソッドであるため、SetVisible をオーバーライドできないことがわかりました。それをオーバーライドする提案はありますか? ありがとう。
delphi - SDIDelphiアプリケーションでウィンドウを整理する
Delphi MDIアプリケーションではTile
、Cascade
およびArrangeIcons
プロシージャを使用して子ウィンドウを整理できます。このメソッドは、FormStyleプロパティがに設定されている場合にのみ機能しますfsMDIForm
。で同じ効果を生成する方法、つまりSDI application
、開いているウィンドウを整理する方法非MDIアプリケーション?
multithreading - Delphi - 独自のプロセスで実行されるコントロールの作成
こんにちは
独自のデータセットを使用してデータベースにアクセスするコントロールがあります。データベースは古い ISAM ベースのデータベースです。
コントロールは、バックグラウンド スレッドを使用して、独自のデータセットを使用してデータベースにクエリを実行します。
フォームにはこれらのコントロールがいくつかあり、それぞれが独自のスレッドを使用してデータにアクセスします。それらはすべて同時にロードする必要があるためです。
独自のデータセットは、開いているテーブルが別のユーザーによってロックされており、データセットがロックの解放を待っていることをユーザーに通知する VCL TForm を表示することで、同時実行を処理します。
フォームには、ユーザーがロック待機をキャンセルできるキャンセル ボタンがあります。
問題:
スレッド内から独自のデータセットを使用する場合、ロック待機フォームが表示された場合、アプリケーションがクラッシュ、ハング、または何らかのエラーが発生します。これは、VCL がスレッドセーフではないことに関係していると思われます。
Dataset.Open を同期することで問題を解決しましたが、dataset.open が返されるまでメイン スレッドが保持され、クエリの複雑さによってはかなりの時間がかかる場合があります。
何かが起こっていることをユーザーに知らせるモーダルプログレスバーを表示しましたが、ユーザーはプログレスバーが完了するのを待っているので、このアイデアは好きではありません。
独自のデータセット コードは、メイン アプリケーションにコンパイルされます。つまり、別の DLL には保存されません。リリースに近すぎるため、開発プロセスのこの段階では、ロックの仕組みやフォームを表示するかどうかを変更することはできません。
理想的には、メイン スレッドを使用する代わりに、コントロール スレッドでも Dataset.open を実行したいと考えていますが、これはうまくいかないようです。
他の誰かが回避策を提案できますか? お願いします。
delphi - 2つのフォームを重ねることができますか?
メインフォームと「一緒に」表示される別のフォームが欲しいので、メインフォームと重ならないようにします。
次に例を示します。
メインプログラムがログとどのようにオーバーラップしているかに注意してください。Delphiでそれを行う方法がわかりません。
ありがとう!
delphi - 別のフォームのメインフォームからDBGridに関するコマンドを使用する
自動車部品店で使う簡単なプログラムを作っています。外観は次のとおりです。リンク
問題は、左側の小さなウィンドウです。メインウィンドウでDBGridのいずれかの行をダブルクリックすると開く必要があり、選択したアイテムのすべての特性がDBEditフィールドに表示されます。[保存]ボタンをクリックすると、DBEditフィールドからの変更がデータベースに保存されますが、それ以外の場合は、変更が無視されます。
次のコードを使用して、DBGridのフィールドをダブルクリックして別のフォームを開くことに成功しました。
現在の唯一の問題は、DBGridのどの行が選択されているかをプログラムに検出させ、その内容を小さいウィンドウのDBEditフィールドに表示する方法です。
誰かがこれを行う方法を教えてもらえますか?
ありがとう!
delphi - BorderStyle=bsNoneのときにTFormにスクロールバーを表示させる方法は?
BorderStyle が bsNone に設定されている場合、AutoScroll が True で一部の子コントロールの位置が ClientWidth/ClientHeight の値を超えていても、TForms は通常スクロールバーを表示しません。
したがって、BorderStyle が bsNone に設定されている場合でも、(必要な場合に) TForm にスクロールバーを表示するように「強制」する方法/ハックはありますか?
delphi - Delphi-現在フォーカスされているウィンドウ/フォームのキャプチャ
多数のMDI子(および非MDIフォーム)を含むMDIアプリケーションがあり、現在アクティブになっていて常にフォーカスがあるフォームを追跡したいと思います。ユーザーがアプリケーション内であるフォームから別のフォームに切り替えるとき、ウィンドウアクティベーションメッセージをトラップし、バックグラウンドでグローバル変数をアクティブなフォームのプロパティに設定します(このプロパティは基本クラスから継承されます)。私は元々、基本クラス(アプリケーションのすべてのフォームが使用する)のOnActivateイベントハンドラーにコードを配置しましたが、このイベントが常に発生するとは限らないことに気付きました。何か案は?
Delphi2006BDSを使用しています。
delphi - Delphi:ActionListのフレームと状態-エラー?
フォームとフレームにアクションリストがあります(フォームのユニットはフレームに組み込まれています)。
フレームにForm2.General.State:= asSuspendedを設定しましたが、エラーが発生しました:宣言されていない識別子:'asSuspended'。
コードはフォームでは正常に機能しますが、フレームでは機能しません。
なんで?
ありがとう!!!