複数の動的に作成されたSub Formを指定して処理するには?


横井  2014-01-21 05:21:59  No: 45926

皆様よろしくお願いします。環境はWindows7  Delphi6  Personalです。
SDIブラウザを作成しています。リンクをクリックして自分自身で開くのが難しく
https://www.petitmonte.com/bbs/answers?question_id=1833
を参考にして下記のようになりました。
動的に作成されたリンクのサブフォームは後ろに置かないと親が見えなくなりますので
親を最前画面にするコードも見つけてきました。
このプログラムの欠点は、親を削除したらサブフォームも全部削除されることですが、
その前に任意のSub Formを最前面に親から呼び出せないと実用にならないと思います。
「やりたいこと」
親画面から任意のSub Formを指定し最前面に表示させることはできないでしょうか。
作成されるサブフォーム名が全部Form1なので、いろいろ試みましたが挫折。
●以下コードです、よろしくお願いします。
//-------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
    WebBrowser1.Navigate('http://www.biccamera.co.jp/shoplist/index.html');
end;
//-------------------------------
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    Action := caFree;
end;
//------------------------------
procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
var
    WND:HWND;
begin
    WND := FindWindow('TForm1', nil);
    with TForm1.Create(Application) do // 自前の新フォームで
    begin
        Top :=  TForm(TOLEControl(Sender).Parent).Top + 30;
        Left := TForm(TOLEControl(Sender).Parent).Left + 30;
        WebBrowser1.RegisterAsBrowser := True;
        ppDisp := WebBrowser1.DefaultDispatch;
        Show; // SDIでは Show が必要
    end;
    if Wnd<>0 then begin SetForceForegroundWindow(Wnd);Application.ProcessMessages;end;
end;

//------------------最前面に出す
procedure TForm1.SetForceForegroundWindow(hTarget: HWND);
var
    dwTargetID: DWORD;
    dwActiveID: DWORD;
begin
  dwTargetID := GetWindowThreadProcessId(hTarget, nil);
  dwActiveID := GetWindowThreadProcessId(GetForegroundWindow, nil);
  SetForegroundWindow(hTarget);
  AttachThreadInput(dwTargetID, dwActiveID, True);
  BringWindowToTop(hTarget);
  AttachThreadInput(dwTargetID, dwActiveID, False);
end;


  2014-01-21 08:04:07  No: 45927

http://mrxray.on.coocan.jp/Delphi/plSamples/710_SDIStyleApp.htm

このあたりを参考にさせてもらって、メインフォームのないMDIのような
アプリケーションとして作ったらどうですか。


横井  2014-01-21 10:32:53  No: 45928

あさんお返事ありがとうございます。

●「そのほか試したこと」
有名なhttp://delphi.sakura.vg/index2.html
も試しましたがMDIのタブ方式は海外の重いサイトが続くと
固まってしまうので、あきらめました。
MDIのChild式もためしていますが、国内のまじめなサイトは問題ないですが
海外のサイトなど特にインターネットエクスプローラー11を入れてから
ほぼ遅すぎて固まったようになるサイトもあります。
また、PageControlも試しましたが11以降だめでした。
IE11を見ていると、開いているタブの数だけタスクバーのアイコンの数が
増えたり、最後のタブを削除すると終了したり、
TabPageやPageControlのたぐいではないような気がします。
ですから、11を見習って根本的に変えてみようと思っているわけです。
ありがとうございました。


tor  2014-01-21 21:31:07  No: 45929

親とか子の関係がよくわかりませんけれど、
ヤニアのオブジェクトが複数あるので、ニラで必ずしも目的のウィンドウのハンドルが得られるとは限らないということが問題なのでしょうか?
それなら、自分で作っているフォームなのだからネプロパティをそのまま使えばいいだけです。

ヲサヲサヲサヤニアョラツアホライィモコヲサヤマサ
ヲサヲサヲサヲサヲサトコヲサノトサヲサヲサテコヲサラツゥサ
ヲサヲサ
ヲサヲサヲサヲサヲサヲサラホトコネラホトサ
ヲサヲサ
ヲサヲサヲサヲサヲサヲサラホトヲサコスヲサニラィァヤニアァャヲサゥサ

例えば上のコードで、イベントを実行しているニア自身のハンドルが欲しいなら最後の行を
ラホトヲサコスヲサネサ
にすればいいです。一方、その下でテしている新フォームのハンドルが欲しいなら
ヲサヲサヲサヲサヲサヤニアョティチゥヲサヲサッッヲサ自前の新フォームで
ヲサヲサヲサヲサ
ヲサヲサヲサヲサヲサヲサラホトヲサコスヲサネサ
ヲサヲサヲサヲサヲサヲサョョョ
です。

ついでに、自分と子ウィンドウが同じスレッド内ならチヤノとかの手順は不要ですね。
直にツラヤヤか、あるいはハンドルすら使わずニアョツヤニで済むんじゃないでしょうか。
スススススススススススススススススススススススススススススススススススススススス
ニコ 横井
トコ イーアエッーアッイアィ火ゥ アエコーキコイキ  書込者ノト:ロ 」。ィ 。 ン

torさん、お返事ありがとうございます。おっしゃるとおりです。
複数のニ1を制御し対の場目的です。
ハンドルという概念を初めて使いました。
いままでは、一つのニ1にコントロールをべたべた貼り付けて、
作動するレベルしかやったことがありません。ニ1で作ったニがニ1
など理解に苦しむレベルです。
今回をィゥで見てみると、訳のわからないランダムな
6桁の数字が見えました(初)。そこで
ヲサヲサヲサヲサヲサヤニアョティチゥヲサヲサッッヲサ自前の新フォームで
ヲサヲサヲサヲサ
ヲサヲサヲサヲサヲサヲサヲサヲサラホトコスネサ
        ミアョテコスィネゥサ
として、ボタンを貼り付けてあるミのテに代入して可視状態にし
複数のニ1が違う数字を持っていることを確認しました。
これでニ毎のハンドルを持っていることになるのでしょうか。
申し訳ありませんが、この先ですが
親ニが作成した子ニのハンドルを保存しておき
任意の子ニを呼び出すときはどのようなコードで呼び出すのでしょうか。
教えていただけませんか。

なお、チヤノの方は、人様のコードですから、まだ中身を
理解しておりません。
ブラウザはマルチスレッドで組むのが普通なのかを含め今後勉強します。

よろしくお願いします。
スススススススススススススススススススススススススススススススススススススススス
ニコ ト
トコ イーアエッーアッイアィ火ゥ アクコエーコアカ  書込者ノト:ロ 「 ・、」「 ン

ヲサ任意の子ニを呼び出すときはどのようなコードで呼び出すのでしょうか。

  グローバルなモ変数のニプロパティを利用することで任意のフォームにアクセスできます。
例えば上記のモニニラを書き換えるとこんな感じ。

ッッュュュュュュュュュュュュュュュュュュ最前面に出す
ヲサヤニアョモニニラィヤコヲサネラホトゥサ

ヲサヲサコヲサノサ
ヲサヲサ゜ニコヲサヤニサ

ヲサヲサヲサヲサコスヲサーヲサヲサモョニテヲサュアヲサ
ヲサヲサ
ヲサヲサヲサヲサ゜ニヲサコスヲサモョニロンサ
ヲサヲサヲサヲサヲサィ゜ニョネヲサスヲサヤゥヲサ
ヲサヲサヲサヲサ
ヲサヲサヲサヲサヲサヲサ゜ニョツヤニサ
ヲサヲサヲサヲサヲサヲサツサ
ヲサヲサヲサヲササ
ヲサヲササ

モ変数についてはトのヘルプでヤモをみて下さい。
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアエッーアッイアィ火ゥ アクコエクコウカ  書込者ノト:ロ 」 ァ」ハノ

 ン

えーと結局、新しく作ったフォームを前面に表示できたらいいということでしょうか?
それならハンドルなど使う必要はなく、作成したフォームへの参照をとっておいてそれに対してツヤニを使えばいいです。

ヲサコヲサヤニアサ
ョョョ
ヲサコスヲサヤニアョティチゥサヲサッッヲサフォームを作成してョョョ
ョョョ
ョツヤニサヲサッッヲサそのフォームを前面へ

というか元のコードの文の中に入れれば済みそうですね。

ヲサヲサヲサヲサヲサヲサヤニアョティチゥヲサヲサッッヲサ自前の新フォームで
ヲサヲサヲサヲサヲサ
(中略)
ヲサヲサヲサヲサヲサヲサヲサヲサヲサモサヲサッッヲサモトノではヲサモヲサが必要
ヲサヲサヲサヲサヲサヲサヲサヲサヲサツヤニサヲサ←ここに追加
ヲサヲサヲサヲサヲササ
スススススススススススススススススススススススススススススススススススススススス
ニコ 横井
トコ イーアエッーアッイアィ火ゥ イーコエーコオア  書込者ノト:ロ 」。ィ 。 ン

トさん、さんお返事ありがとうございます。
たとえば、あるサイトを開いているとして、これを親ニとします。
親ニのリンクをクリックして作成されたニを子ニとします。
親ニのリンクをクリックした数だけ子ニができます。
ある任意の子ニ(例えばハンドルオオオオオオの子ニを最前面に
表示させて、閲覧したり、保存したり、最後は子ニを削除します。
たぶん、Dさんが書かれておられるコードは、このことではないかと?
複数の子ニのハンドルを片っ端から検索して、目的のハンドルだったら
最前面に表示するというような感じだと思いますが。
そのため今回のさんのはちょっと違います。すみません、説明不足で。

経験したことのない、コードですので、Dさんのコードを
早速試してみますので、結果は少々お時間をください。

今回のブラウザは海外の変なサイトでも、何枚でも軽く開ける手段を見つけるのが目的ですのでお時間をください。
今のところテストした限りでは、どのようなサイトでも20〜30枚は
開くことができるようなので、このブラウザを展開してみたいと思います。

また、「あ」さんへ、
コッッョョョットッモッキアー゜モトノモチョ
は現実的なアプリとして完成するときは必要になるかもしれません。
まだヘトノなのか不明、トイーーキ以上という記述などありますので
果たしてヲサカヲサでできるかも検討する必要があります。
こちらも参考にしてみます。

ありがとうございました。では。
スススススススススススススススススススススススススススススススススススススススス
ニコ ヘョリメチル
トコ イーアエッーアッイアィ火ゥ イーコオクコウー  書込者ノト:ロ ァ。  ン

モトノヲサ形式のアプリ作成で,指定のフォームを前面に表示する,ということのようですが,

ヲサ海外のサイトなど特にインターネットエクスプローラー11を入れてから
ヲサほぼ遅すぎて固まったようになるサイトもあります。

という文章があります.これは,ノナヲサアーヲサ以降で発生するらしいのです.
以下を参考にしてください.私も詳しは分かりません.

コッッュョョョッッソスヲサスアアーケ」ュアケクキ
スススススススススススススススススススススススススススススススススススススススス
ニコ 横井
トコ イーアエッーアッイアィ火ゥ イアコーケコオー  書込者ノト:ロ 」。ィ 。 ン
モコ 

Dさん、troさん、あ  さん。ご報告します。
ボタンパネルにナを貼り付け、任意のハンドル番号を入力して
ボタン2で任意のニを最前画面に呼び出すことができました。
また子ニも同じデザインなので、子ニから他の子ニも呼び出せました。
あとは、ハンドル番号の格納の仕方、任意の子ニの判別方法など
工夫が必要です。
もともとタブブラウザはタブのタイトルを見て選別しているのですから
空のヤテかミテを貼り付けてタブにタイトルとハンドル番号だけを関連づけておき、タブをクリックしたら対応する子ニを表示させてはどうだろうかと考えています。
また、行き詰まったら、教えてください。
ありがとうございました。

ヲサヤニアョツイティモコヲサヤマゥサ

ヲサヲサヲサヲサモニニラモィィナアョヤゥゥサ

ヲサヤニアョモニニラモィヤコヲサネラホトゥサ

ヲサヲサコヲサノサ
ヲサヲサ゜ニコヲサヤニサ

ヲサヲサヲサヤスーヲサヲササ
ヲサヲサヲサヲサコスヲサーヲサヲサモョニテヲサュアヲサ
ヲサヲサ
ヲサヲサヲサヲサ゜ニヲサコスヲサモョニロンサ
ヲサヲサヲサヲサヲサィ゜ニョネヲサスヲサヤゥヲサ
ヲサヲサヲサヲサ
ヲサヲサヲサヲサヲサヲサ゜ニョツヤニサ
ヲサヲサヲサヲサヲサヲサツサ
ヲサヲサヲサヲササ
ヲサヲササ


スススススススススススススススススススススススススススススススススススススススス
ニコ 横井
トコ イーアエッーアッイイィ水ゥ アエコエオコオク  書込者ノト:ロ 」。ィ 。 ン
モコ 

ヘョリメチルヲサさん、情報をありがとうございます。
やはりそうでしたか。
ローレベルの私でも何かおかしいなと思っていたした。
下手なコードを入れたせいなのかと、ラツを
丸裸にしても発生するので、どうしようもないですね。
そのうち改善があるかもしれません。
座してまつのもじれったいので、ノナに似せて、トライは
続けてみます。
いま、ヘョリメチルヲサさんのロキアー゜モトノヲサスタイルのアプリケーションンヲサ
も、選択肢の一つとして実験しています。
ありがとうございました。

では。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加