喫茶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



[10978] Re:起動したアプリをTOPMOSTにする返信 削除
2017/3/28 (火) 21:48:42 Mr.XRAY
> サンプルのコードは,新規にブラウザを起動することを前提にしています.

起動中のブラウザに対応したコードを追加しました.
ただし,IE11 は起動中のウィンドウに対して操作しても TOPMOST になりません.

[plBrowseURL_TOPMOST.zip]  1,160 KB
http://mrxray.on.coocan.jp/Delphi/zip/plBrowseURL_TOPMOST.zip

起動中のブラウザのハンドルの取得は,以下のコードを使用しています.


//-----------------------------------------------------------------------------
//  指定プロセスの起動をチェック
//  戻り値はそのプロセスのウィンドウのハンドル値
//  Toolhelp32Snapshotを使用する方法
//
//  CreateToolhelp32Snapshotの使用には,usesにTlhelp32が必要
//-----------------------------------------------------------------------------
function TForm1.CheckRunExe(RunExeName: string): THandle;
const
  MAX_PROCCOUNT = 2048;
  PROCESS_QUERY_LIMITED_INFORMATION = $1000;
  PROCESS_NAME_NATIVE = 1;
var
  LListHandle : THandle;
  LProcEntry  : TProcessEntry32;
  LProcessID  : DWORD;
  LTargetWnd  : THandle;
  LExePath    : String;
begin
  Result := 0;
  //デバッグの特権を有効にする
  Privilege.SetPrivilege(SE_DEBUG_NAME, True);

  //プロセスのスナップショットのハンドルを取得
  LListHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if LListHandle > 0 then begin
    try
      //最初のプロセスに関する情報をTProcessEntry32レコード型に取得
      LProcEntry.dwSize := SizeOf(TProcessEntry32);
      Process32First(LListHandle, LProcEntry);
      repeat
        //パス名とプロセスIDを取得
        LExePath := LProcEntry.szExeFile;

        if LowerCase(LExePath) = LowerCase(RunExeName) then begin
          LProcessID := LProcEntry.th32ProcessID;
          LTargetWnd := LProcessID;
          EnumWindows(@EnumTopWindow, LPARAM(@LTargetWnd));
          if LTargetWnd <> LProcessID then begin
            Result := LTargetWnd;
            Break;
          end;
        end;

      //次のプロセスに関する情報をTProcessEntry32レコード型に取得
      until Process32Next(LListHandle, LProcEntry) = False;
    finally
      CloseHandle(LListHandle);
    end;
  end;
end;


[10979] Re2:起動したアプリをTOPMOSTにする返信 削除
2017/3/28 (火) 22:37:00 Mr.XRAY
▼ Mr.XRAYさん
 
> 起動中のブラウザに対応したコードを追加しました.
> ただし,IE11 は起動中のウィンドウに対して操作しても TOPMOST になりません.


ハイ.また追加しました.
今度は,自分で起動したブラウザが終了まで待つサンプルです.
「自分で起動して」ですから,既に起動中の場合は何もしません.
>
[plBrowseURL_TOPMOST.zip]  1,697 KB
http://mrxray.on.coocan.jp/Delphi/zip/plBrowseURL_TOPMOST.zip



[10980] Re3:起動したアプリをTOPMOSTにする返信 削除
2017/3/28 (火) 23:10:14 Mr.XRAY
ハイ.さらに追加しました.

今度は,ブラウザの終了を自動検出します.
WMI のイベントシンクを使用しています.
 
[plBrowseURL_TOPMOST.zip]  2,336 KB
http://mrxray.on.coocan.jp/Delphi/zip/plBrowseURL_TOPMOST.zip

イベントシンクのコードは以下のようになっています.

//-----------------------------------------------------------------------------
//  TSWbemSinkのOnObjectReadyイベントのコード
//  イベントの宣言部と,この実装部はWbemScripting_TLBのコードをコピペ
//-----------------------------------------------------------------------------
procedure TForm1.EventOnObjectReady(ASender: TObject;
  const objWbemObject: ISWbemObject;
  const objWbemAsyncContext: ISWbemNamedValueSet);
var
  LPropVal   : OleVariant;
  LPropValue : OleVariant;
  LText      : string;
begin
  LPropVal   := objWbemObject;
  LPropValue := LPropVal.TargetInstance;

  if VarToStr( LPropVal.Path_.Class) = '__InstanceDeletionEvent' then begin
    if FCloseDlgFlag = False then begin
      FCloseDlgFlag := True;
      LText := 'ブラウザが閉じられました';
      MessageBox(Handle, PChar(LText), '情報', MB_ICONINFORMATION);

      SetActiveWindow(Handle);
      SetForegroundWindow(Handle);
    end;
  end;
end;


UP したサンプルコードは,当サイトのサンプル記事のコードをコピペ
して,少し修正を加えだものでごさいます.



[10982] TOPMOSTのウィンドウとは返信 削除
2017/3/29 (水) 10:22:16 Mr.XRAY
TOPMOST を指定したウィンドウは,他のウィンドウよりも常に前面に表示されます.
あるウィンドウを常に最前面に表示したい時に使用します.
SetWindowPos 関数を使用すると,そのようなウインドウにできます.

https://msdn.microsoft.com/ja-jp/library/cc411206.aspx

下の図で,一番手前に表示されているのが,TOPMOST のウインドウです.
その下のウィンドウをアクティブにしていますが,TOPMOST のウインドウが
最前面に表示されています.

Delphi では SetWindowPos 関数を使用しなくても,フォームの FormStyle プロパティの
値で設定できます.
画面上で表示されている順序を Z オーダといいます.
画面は平面ですが X, Y でなく,Z 軸のオーダというわけです.

[Vcl.Forms.TCustomForm.FormStyle]
http://docwiki.embarcadero.com/Libraries/Seattle/ja/Vcl.Forms.TCustomForm.FormStyle



[10983] Re:TOPMOSTのウィンドウとは返信 削除
2017/3/29 (水) 12:21:49 Mr.XRAY
> TOPMOST を指定したウィンドウは,他のウィンドウよりも常に前面に表示されます.
> あるウィンドウを常に最前面に表示したい時に使用します.


どういう時に TOPMOST にするかと言うと,
「お前ら俺より前に出るんじゃない !!」
という時ですね.なんて.

TOPMOST のウィンドウから別のウィドウを起動した時,
TOPMOST より前に表示するには,起動するウィンドウを TOPMOST にします.
その時使用するのが SetWindowPos 関数です.

すると,TOPMOST のウィンドウが 2 つになります.
これらのウィンドウはどちらも前面に表示できるようになります.


UP したサンプルでは,起動済みのブラウザに表示する時,
別のタブで表示します.
これを,現在表示中のタブに表示するのは簡単ではありません.
ブラウザの操作が必要です.
ブラウザの操作はブラウザによって違います.

IE であれば,IE のオブジェクトを生成して,ある程度の操作が可能です.


[10984] Re:起動したアプリをTOPMOSTにする返信 削除
2017/3/29 (水) 12:49:20 Esper.SO
▼ Mr.XRAYさん
> [ShellExecuteで表示された画面が隠れないようにするには?]
> https://forums.embarcadero.com/thread.jspa?threadID=248197&tstart=0


そもそも、TOPMOSTにしないといけないんでしょうかね?
これって、他作業をしたい時、結構邪魔になるんですよね...

# ブラウザではなく、埋め込みブラウザにすれば解決!?

[10985] Re2:起動したアプリをTOPMOSTにする返信 削除
2017/3/29 (水) 15:29:59 Mr.XRAY
▼ Esper.SOさん
> ▼ Mr.XRAYさん
> > [ShellExecuteで表示された画面が隠れないようにするには?]
> > https://forums.embarcadero.com/thread.jspa?threadID=248197&tstart=0
>
> そもそも、TOPMOSTにしないといけないんでしょうかね?
> これって、他作業をしたい時、結構邪魔になるんですよね...


てす.
あるアプリを使用していて,その途中でワードで文書を作成したいと思います.
どういう状況になるかは,です.
まあ,彼の方ですから.

Windows API の関数のリンクを提示しただけで,即座に
「精通していないので」
と返す方ですからね.ヤル気全くなしてす.
最初に質問を読んだ時は,どうして fsStayOnTop なのか訊いてみようかと思いました.
 
> # ブラウザではなく、埋め込みブラウザにすれば解決!?

その手ありですね.
どんな内容のウェブページかにもよりますが,
でも,間違いなく Windows API のページではないことは確かです (笑)

TOPMOST のウィンドウも使い道はあるわけですが,
普通のアプリを普通に使っている時はあまり出番はないでしょうね.


[10990] UPしたサンプルの修正返信 削除
2017/3/29 (水) 19:48:32 Mr.XRAY
UP した一連のコードの一部を修正しました

Internet Exploer --> Internet Explorer

TOPMOST にするコードを以下に変更しました.
SetWindowPos 関数の説明を読んだら,SetForgroundWindow を実行しないと
TOPMOST にならない場合があるようです.
なんせ Windows API に精通していないもんですから (笑)

procedure TForm1.SetHWND_TOPMOST_Window(hWindow: HWND);
begin
  SetForegroundWindow(hWindow);
  SetWindowPos(hWindow, HWND_TOPMOST, 0, 0, 0, 0,
               SWP_NOSIZE or SWP_NOMOVE or SWP_SHOWWINDOW);
end;


[11011] Re2:起動したアプリをTOPMOSTにする返信 削除
2017/4/3 (月) 12:44:37 Mr.XRAY
▼ Esper.SOさん

> # ブラウザではなく、埋め込みブラウザにすれば解決!?

今思い出したので... (^^;
TWebBrowse なんてのは,そのような目的にあるのではないかと.
新たなブラウザの開発用ではないですね.
しかしですね,彼の方にそのような提案をすると,
ものすごて言い訳というか,主張が返ってきます.
過去に何回かあります.最近は「このようにしたら」
と提案のようなことをレスする方はいなくなっていますね.

それだけ意志が強いということですね.
私のように,サイトの目次が見えないのがいいとか,
目次の部分がスクロールしないようにした方が... とか,
人に言われて変えてしまうような軟弱者ではないということですね (^^;
ハハハッ

# しかし,何で TOPMOST なウィンドウにするんだ  <-- しつこい !


[11012] サイトの記事のウリ返信 削除
2017/4/3 (月) 12:51:26 Mr.XRAY
> サイトの目次が見えないのがいいとか,

当サイトの売りは,目次の表示があること,
説明用の画像があること,
記事中にあるオンラインヘルプ等へのリンクが豊富,
なんだけどなぁ.

いえ,独り言です.ミミズのたわごとです.


[11013] Re:サイトの記事のウリ返信 削除
2017/4/3 (月) 13:07:13 Esper.SO
▼ Mr.XRAYさん
> > サイトの目次が見えないのがいいとか,

あれかなぁ?
記事がど真ん中に来ているのが見やすい!!とか?

# 目次があったほうが絶対いいんだけどなぁ(主観)


[11014] Re2:サイトの記事のウリ返信 削除
2017/4/3 (月) 15:03:59 Mr.XRAY
▼ Esper.SOさん

> あれかなぁ?
> 記事がど真ん中に来ているのが見やすい!!とか?


昔そういう要望があった時は,印刷する時に目次を印刷したくない,
というのでした.それで目次を表示しなければ,と思ってそうしました.

今回のは今となっては分かりません.
目次が非表示にならなくなっているけど,
表示しないようにできないか,というのでしたので.
でも,多分そんなところではないかと思います.


[10986] TOPMOSTの簡単なテスト返信 削除
2017/3/29 (水) 15:47:57 Mr.XRAY
サンプルをダウンロードしたけど,Windows API 使いまくりで,
何がなんだか分からない,
いや,精通していないので,という方のために,簡単なサンプルです.
てもやっぱり Windows API 使っています.

以下の Windows API の関数を使用しています.
ほとんど Windows API だけのコードだな.ハハハッ.
難解だな,こりゃ.
この場合「簡単」と言うのは,コードを簡単にコピーしてテストしやすい
という意味にとってください.

  ShellExecute
  FindWindow
  SetForegroundWindow
  SetWindowPos

フォームに TButton を 2 つ配置して,以下のコードとします.

uses
  ShellAPI;

{$R *.dfm}

//=============================================================================
//  フォーム生成時の処理
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  Self.FormStyle := fsStayOnTop;
end;

//=============================================================================
//  メモ帳を起動
//  usesにShellAPIが必要
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellExecute(Handle, '', 'Notepad.exe', nil, nil, SW_SHOW);
end;

//=============================================================================
//  メモ帳を最前面に表示
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
  LHandle : HWND;
  LFlags  : Cardinal;
begin
  LHandle := FindWindow('Notepad', nil);

  if LHandle > 0 then begin
    LFlags := SWP_NOSIZE or SWP_NOMOVE or SWP_SHOWWINDOW;

    SetForegroundWindow(LHandle);
    SetWindowPos(LHandle, HWND_TOPMOST, 0, 0, 0, 0, LFlags);
  end;
end;


[10987] Re:TOPMOSTの簡単なテスト返信 削除
2017/3/29 (水) 16:29:07 igy
▼ Mr.XRAYさん
> ほとんど Windows API だけのコードだな.ハハハッ.
> 難解だな,こりゃ.


うわー、これだけのWindows APIを習得するのは、かなり難しいですねー(棒読み)


[10988] Re2:TOPMOSTの簡単なテスト返信 削除
2017/3/29 (水) 17:34:52 Mr.XRAY
▼ igyさん
> > ほとんど Windows API だけのコードだな.ハハハッ.
> > 難解だな,こりゃ.
>
> うわー、これだけのWindows APIを習得するのは、かなり難しいですねー(棒読み)


ハハハッ.
いや〜,彼の方があんな反応したから意識してしまいます.
改めて考えてみると,意識するしないにかかわらず,
Windows API ってかなり使っていますね.

もちろん,VCL のコード中だって...


[10989] Re3:TOPMOSTの簡単なテスト返信 削除
2017/3/29 (水) 18:32:00 igy
▼ Mr.XRAYさん
> ハハハッ.
> いや〜,彼の方があんな反応したから意識してしまいます.
> 改めて考えてみると,意識するしないにかかわらず,
> Windows API ってかなり使っていますね.
>
> もちろん,VCL のコード中だって...



ですよねー

私なんか、あまりVCLのクラスのメソッドか、Windows APIの関数か、なんてあまり意識せずに使ってますね。
StringGridでOnDrawCellイベントで、文字列を描画するとき、
CanvasのTextOutメソッド・TextRect メソッドより、DrawText関数のほうが便利だから・機能が多いから、
使ってるみたいな感じで・・・


[10991] Re4:TOPMOSTの簡単なテスト返信 削除
2017/3/30 (木) 10:37:50 taki
▼ igyさん
> ▼ Mr.XRAYさん
> > ハハハッ.
> > いや〜,彼の方があんな反応したから意識してしまいます.
> > 改めて考えてみると,意識するしないにかかわらず,
> > Windows API ってかなり使っていますね.


理由は案外単純かもしれません。

私がWindowsAPIが少し苦手なのは、F1でHelpした時、説明が英語だからです。
慣れれば問題ないのでしょうが、慣れようとしないといつまでも高い障壁になります。

英語嫌いなおっさんより。


[10992] Re5:TOPMOSTの簡単なテスト返信 削除
2017/3/30 (木) 13:19:43 Mr.XRAY
> 理由は案外単純かもしれません。
>
> 私がWindowsAPIが少し苦手なのは、F1でHelpした時、説明が英語だからです。
> 慣れれば問題ないのでしょうが、慣れようとしないといつまでも高い障壁になります。
>
> 英語嫌いなおっさんより。


使わなくて済むのであればいいとは思うのです.

https://forums.embarcadero.com/thread.jspa?messageID=881615#881615
のように,

>どのような学習方法がいいのでしょうか?

なんてことを訊かない限り.
お遊戯を手取り足取り教える幼稚園じゃないって !
第一,ヘルプを読まない人の学習方法なんてないって.


[10993] Re6:TOPMOSTの簡単なテスト返信 削除
2017/3/30 (木) 16:07:15 taki
▼ Mr.XRAYさん

> お遊戯を手取り足取り教える幼稚園じゃないって !
> 第一,ヘルプを読まない人の学習方法なんてないって.


おっしゃる通りです。

プログラムを組む人はみ〜んな英語と格闘してきたのです。
Google翻訳を駆使して…悩みながら大きくなったのです。


[10996] Re7:TOPMOSTの簡単なテスト返信 削除
2017/3/30 (木) 16:23:09 Mr.XRAY
▼ takiさん

> プログラムを組む人はみ〜んな英語と格闘してきたのです。
> Google翻訳を駆使して…悩みながら大きくなったのです。


えっ ?  大きくなった ?
廃人になっていった,の間違いでは ?
ウソ,ウソです.冗談ですってば (^^;


[10994] サンプルのMicrosoft Edge対応返信 削除
2017/3/30 (木) 16:12:50 Mr.XRAY
> [ShellExecuteで表示された画面が隠れないようにするには?]
> https://forums.embarcadero.com/thread.jspa?threadID=248197&tstart=0


やっと環境が書かれました.
Windows 10 ! ということは Microsoft Edge ?
で.Microsoft Edge 対応のコードを追加しようと思いましたがやめました.
面倒なので.
代わりに,対応していませんのダイアログを表示するようにしました.
興味ある方は以下を参考にしてください.
Microsoft Edge のクラス名は多分 EdgeUiInputTopWndClass です.

[Windows 10 の Microsoft Edge と IE 11 の起動]
http://mrxray.on.coocan.jp/Delphi/Others/ExecuteFile.htm#01-05

Microsoft Edge が起動しているかをチェックするルーチンでは,
内部プロセスの exe 名は MicrosoftEdge.exe で検出できます.

[plBrowseURL_TOPMOST.zip]  2,875 KB
http://mrxray.on.coocan.jp/Delphi/zip/plBrowseURL_TOPMOST.zip



[10995] Re:サンプルのMicrosoft Edge対応返信 削除
2017/3/30 (木) 16:19:16 Mr.XRAY
> で.Microsoft Edge 対応のコードを追加しようと思いましたがやめました.
> 面倒なので.
> 代わりに,対応していませんのダイアログを表示するようにしました.


ShellExecuteEx 関数では,ShellExecute 関数と同じで,
起動するプログラムを指定しなくても,ファイル名で起動できます.
それは,拡張子に関連付けされたアプリが起動します.
ただし,その場合,起動したアプリのハンドルは取得できません.

つまり,ShellExecuteEx を使う意味がありません.
ShellExecute 関数を使用するのと同じ意味しかありません.


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


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

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


[11005] Re4:しかしスゴイ返信 削除
2017/4/2 (日) 13:03:40 Mr.XRAY
▼ igyさん

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


そうですねぇ.
どんな悪人でもそれが殺人犯であっても,
怪我をしていたり,病気であれは,治療をするのが社会通念 (?) です.


[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言語で私の希望することを達成する方法
> >を教えて頂けませんでしょうか?」と云った発言も許される場なのでしょうか?
>
> も、すでに、福士さんに複数回、ピシャリと言われていることを考えると、ポイント高いです(笑)。


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

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

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


[11000] UPしたサンプルを削除返信 削除
2017/4/1 (土) 23:42:58 Mr.XRAY
> 詳しくは,ZIP ファイルをダウンロードして確認してください.

UP していたサンプルの ZIP ファイルは削除しました.
代わりにサンプルプログラム集に同様のテストが可能なサンプルを掲載しました.


INCM/CMT
Cyclamen v3.82