喫茶XRAYトップページ

[スレッド全体
]

[10975] 起動したアプリをTOPMOSTにする返信 削除
2017/3/28 (火) 18:53:24 Mr.XRAY
[ShellExecuteで表示された画面が隠れないようにするには?]
https://forums.embarcadero.com/thread.jspa?threadID=248197&tstart=0

相変わらず変わりませんな.

起動したアプリを最前面にするには,普通に ShellExecute 等で起動すれば,
自動で最前面になります.
しかし,TOPMOST,つまり,Delphi でいうこところの TForm.FormStyle := fsStayOnTop
の状態にするには,SetWindowPos 関数で設定しないとなりません.

ウィンドウを操作するには,そのウィンドウのハンドルが必要です.
ShellExecute で起動した場合,ウィンドウハンドルの取得が面倒なので,
ShellExecuteEx 関数を使用しています.
詳しくは,ZIP ファイルをダウンロードして確認してください.


//=============================================================================
//  指定ブラウザのアプリでウェブページを表示
//  ブラウザは新規起動を前提としている
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LExeName    : string;
  LCmdLine    : string;
  LGetWndFlag : Boolean;
begin
  LExeName := '';
  if RadioGroup1.ItemIndex = 0 then begin
    LExeName := GetRelatedExeName('.html');
  end else
  if RadioGroup1.ItemIndex = 1 then begin
    LExeName := 'iexplore.exe';
  end else
  if RadioGroup1.ItemIndex = 2 then begin
    LExeName := 'firefox.exe';
  end else
  if RadioGroup1.ItemIndex = 3 then begin
    LExeName := 'chrome.exe';
  end;


  LCmdLine := 'http://mrxray.on.coocan.jp/index.htm';

  //アプリ起動
  LGetWndFlag := (FCurrentExeName <> LExeName);
  FTargetWnd := RunExeFile(0, LExeName, LCmdLine, '', SW_SHOW, LGetWndFlag);

  if FTargetWnd > 0 then begin
    FCurrentExeName := LExeName;
    //Zオーダのトップに
    SetHWND_TOPMOST_Window(FTargetWnd);
  end;
end;

//-----------------------------------------------------------------------------
//  指定したウィンドウをHWND_TOPMOSTにする
//  これはDelphiで言えばTForm.FormStyle := fsStayOnTopと同じ
//-----------------------------------------------------------------------------
procedure TForm1.SetHWND_TOPMOST_Window(hWindow: HWND);
begin
  SetWindowPos(hWindow, HWND_TOPMOST, 0, 0, 0, 0,
               SWP_NOSIZE or SWP_NOMOVE or SWP_SHOWWINDOW);
end;


当サイト (Habow 資料館のコードも含めて) に同様のコードがありますが,
メモ帳程度であればウィンドウハンドルの取得は,ネット上のコードで十分可能です.
ブラウザは,プロセスID が取得できても,実際にウィンドウハンドルが取得可能に
なるまでに時間がかかる場合があります.
そこで,以下の工夫をしています.


        LWaitCount  := 0;
        LdwIDOrigin := GetProcessId(LShellExeInfo.hProcess);

        //最初のSleepを10にしてループ回数を大きな値にする
        //重たいアプリの対応策
        repeat
          Sleep(10);
          LTargetWnd := LdwIDOrigin;
          EnumWindows(@EnumTopWindow, LPARAM(@LTargetWnd));
          if LTargetWnd <> LdwIDOrigin then begin
            Result := LTargetWnd;
            break;
          end;
          Inc(LWaitCount);
        until IsWindow(LTargetWnd) or (LWaitCount > 50000);
      end;


ちなみに,

>折角助言頂きましたが、私はWindowsAPIに精通しておりませんので、
>すぐには役立てることができません。


プロとして,自分が開発したアプリを販売している立場の人が言うことではありません.
ハッキリ言って.
精通も便通もありません.
いや,便通はあった方がいいです.

サンプルのコードは,新規にブラウザを起動することを前提にしています.
Form1 の FormStyle の値は fsNormal となっていますが,
fsStayOnTop にしても動作します.
例によって,動作確認は Windows7 U64(SP1) + Delphi XE(UP1) Pro です.

しかし,何故 FormStyle := fsStayOnTop; なんだろう ?


[plBrowseURL_TOPMOST.zip]  544 KB
http://mrxray.on.coocan.jp/Delphi/zip/plBrowseURL_TOPMOST.zip



[10999] しかしスゴイ返信 削除
2017/4/1 (土) 23:41:03 Mr.XRAY
[ShellExecuteで表示された画面が隠れないようにするには?]
https://forums.embarcadero.com/thread.jspa?threadID=248197&tstart=0

>このフォーラムは、「私はWindowsAPIに精通していないので、どなたかDelphi言語で私の希望することを達成する方法
>を教えて頂けませんでしょうか?」と云った発言も許される場なのでしょうか?


>WindowsAPIを習得するよりも、急ぐ仕事がありますので、

>また、FindWindowを手始めにしてAPIの学習をし、自分でも修正方法が分かるようになりたいと思います。
>どのような学習方法がいいのでしょうか?


しかし... スゴイ...
ほとんど言っていいぐらい毎回毎回.
これからはヘルプに調べるようにします.という書き込みも何回か...

もちろん,人が示した記事も見ないし,読まないし,というよりクリックしないようだし,
ヘルプも見ないし (自作のヘルプシステムは自慢の作らしいですが)
ネットで検索しようともしないし.
そんな人の学習方法ってあるのか ?
あったら私の方が知りたい.

こんなことを思っていながらレスする私も変だし... (涙)


[11002] Re:しかしスゴイ返信 削除
2017/4/2 (日) 00:20:57 igy
▼ Mr.XRAYさん
> [ShellExecuteで表示された画面が隠れないようにするには?]
> https://forums.embarcadero.com/thread.jspa?threadID=248197&tstart=0
>
> >このフォーラムは、「私はWindowsAPIに精通していないので、どなたかDelphi言語で私の希望することを達成する方法
> >を教えて頂けませんでしょうか?」と云った発言も許される場なのでしょうか?
>
> >WindowsAPIを習得するよりも、急ぐ仕事がありますので、
>
> >また、FindWindowを手始めにしてAPIの学習をし、自分でも修正方法が分かるようになりたいと思います。
> >どのような学習方法がいいのでしょうか?
>
> しかし... スゴイ...
> ほとんど言っていいぐらい毎回毎回.
> これからはヘルプに調べるようにします.という書き込みも何回か...
>
> もちろん,人が示した記事も見ないし,読まないし,というよりクリックしないようだし,
> ヘルプも見ないし (自作のヘルプシステムは自慢の作らしいですが)
> ネットで検索しようともしないし.


質問内容とは、関係ない苦言のたぐいは、できれば書き込まないよう、こころがけていましたが、

 ファイルスタンプをmsecの部分まで変更するには?
https://forums.embarcadero.com/thread.jspa?threadID=229871&tstart=0
で、福士さんにピシャリと言われてたのに、
同じようなことを言い出していたので、今回は、やんわりと指摘してみました(汗)。



[11003] Re2:しかしスゴイ返信 削除
2017/4/2 (日) 00:32:25 Mr.XRAY
▼ igyさん

> 質問内容とは、関係ない苦言のたぐいは、できれば書き込まないよう、こころがけていましたが、

私もそうありたいのですが...

>  ファイルスタンプをmsecの部分まで変更するには?
> https://forums.embarcadero.com/thread.jspa?threadID=229871&tstart=0
> で、福士さんにピシャリと言われてたのに、
> 同じようなことを言い出していたので、今回は、やんわりと指摘してみました(汗)。


このスレッドでも

>> 前にも書いた気がしますが、ここはそういう場ではありません。
>分かりました。すみませんでした。


と書いているんですけどね.
書き込みだけなんですよね.反省もなんも無い...
Nifty の Delphi 関係のフォーラムから延々と続いているんですから.
本当にどうなっているのか.

今回も解決したようですが,
通常,レスした質問者が解決すると「おっ,やったね.よかった」
と思うのですか,この方の場合,何かスッキリしないんです.


[11004] Re3:しかしスゴイ返信 削除
2017/4/2 (日) 10:49:13 igy
▼ Mr.XRAYさん
> 今回も解決したようですが,
> 通常,レスした質問者が解決すると「おっ,やったね.よかった」
> と思うのですか,この方の場合,何かスッキリしないんです.


確かに、すっきりしないことも多々ありますね。

でも、これはたぶん変わらないと思うので、
これからも、答えられる範囲で返信したり、
やんわりと指摘したり、になるのかな・・と思ってます。


[11006] Re4:しかしスゴイ返信 削除
2017/4/2 (日) 14:17:11 Mr.XRAY
▼ igyさん

> これからも、答えられる範囲で返信したり、
> やんわりと指摘したり、になるのかな・・と思ってます。


参考になる内容をレスするのは,
質問した方限定というわけではなく,コミュニティでの書き込みを
読んでいる方にも参考になるかも知れないという気持ちもあります.

ただ,彼の方のような方は,コミュニティの場を情報入手の場としては
活用していないようですからね.
サポートセンター代わり,無料でコードの提供を「依頼」する場として
利用しているようなので,どこまで意味があるのかは疑問です.

彼の発言を読んでいると,レスしない人,教えない人,コードを提供しない人
が悪者扱いされている感じがします.
『知らない,分からないの訊いているのに,訊いちゃいけないか !!』
とね.

# コードが整形されるようになったのはいいことです (笑)


[11007] 大賞語録の発表返信 削除
2017/4/2 (日) 15:54:01 Mr.XRAY
と言うことで,今回の nagao 語録大賞は以下とします (^^;

>WindowsAPI を習得するよりも、急ぐ仕事がありますので...

お仕事頑張ってくださいね.
上に対抗する語録としては,以下のようなのが考えられます.

nagao さんにレスするよりも,急ぐ仕事がありますので...


[11008] Re:大賞語録の発表返信 削除
2017/4/2 (日) 17:39:32 igy
▼ Mr.XRAYさん
> と言うことで,今回の nagao 語録大賞は以下とします (^^;
>
> >WindowsAPI を習得するよりも、急ぐ仕事がありますので...


その「せっかく情報もらったのに、理由(言い訳)挙げて、先送り」タイプ も捨てがたいですが、

「できなり理由(言い訳)挙げて、無償のコード作成依頼」タイプの

>このフォーラムは、「私はWindowsAPIに精通していないので、どなたかDelphi言語で私の希望することを達成する方法
>を教えて頂けませんでしょうか?」と云った発言も許される場なのでしょうか?


も、すでに、福士さんに複数回、ピシャリと言われていることを考えると、ポイント高いです(笑)。


[11009] Re2:大賞語録の発表返信 削除
2017/4/2 (日) 18:42:26 Mr.XRAY
▼ igyさん

> >このフォーラムは、「私はWindowsAPIに精通していないので、どなたかDelphi言語で私の希望することを達成する方法
> >を教えて頂けませんでしょうか?」と云った発言も許される場なのでしょうか?
>
> も、すでに、福士さんに複数回、ピシャリと言われていることを考えると、ポイント高いです(笑)。


う〜む.確かに.
この手の内容は,過去に何回かあった記憶があります.
多分今後も同じようなことがあると思いますので,その時に入賞候補と
したいと思います (笑)

このパターンは,記憶によると,しばらく誰からもレスがなくて,
誰かが,具体的なコードではなく,ヒントになるレスをした時です.

質問の内容によっては,具体的なコードが書けないことが,
というより,確認しなければならない場合がありますね.
今回も最初に環境は書いていませんし.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82