C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■29674  PDFファイルの文字列について
□投稿者/ Kei -(2008/12/12(Fri) 10:45:48)

    分類:[.NET 全般] 

    ただいま独学でVC++の勉強をしているのですが、どうしてもわからない事があるので質問させていただきました。
    PDFファイルから文字列データの内容を取得し表示するロジックを考えています。
    しかし、文字列データはFLATE形式の圧縮がかかっていて文字として認識できないため、文字化けしたデータが表示されるだけです。
    なんとか解凍したいのですが、そもそも文字列の圧縮を解凍するって可能なのでしょうか?
    FLATE形式について文献やネットで調べているのですが、これといっていいロジックが思いつきません。
    どなたが詳しい方いらっしゃいましたらご教授よろしくお願いします。
親記事 /過去ログ53より / 関連記事表示
削除チェック/

■90463  Re[8]: AddHandler Eventの別スレッドについて
□投稿者/ TanuTanu -(2019/03/12(Tue) 19:54:56)
    魔界の仮面弁士 様

    何度もお手数お掛けし申し訳ありません。
    ご教授頂いた件、下記の通りとなります。

    ■Option Strict ON にするとエラー多発の件

    以下のようなエラーが多数発生してしまいます。

    エラー BC30574 Option Strict On では、遅延バインディングを使用できません。
    CreateObject("Shell.Application").Windows

    エラー BC30512 Option Strict On では 'Object' から 'InternetExplorer' への暗黙的な変換は許可されていません。
    objIE.LocationName

    エラー BC30512 Option Strict On では 'Integer' から 'IntPtr' への暗黙的な変換は許可されていません。
    PWnd = FindWindowExA(0, 0,・・・

    ■下記の処理で、メッセージボックスには何が表示されますか?

    下記が表示されました。
    ※ボタン名称は非公開にしております。

    function onclick()
    {
    on Click ボタン名称()
    }

    ■改変を防止するようなセキュリティソフト等でブロックされているとか…?

    セキュリティソフトが入っております。

    ■試しに実施した事

    yahooButton.onclick = Nothing 削除してみました。
    MsgBox("webDisp_onclick", MsgBoxStyle.SystemModal)は表示されますが、ボタンクリックで表示されるWEBページダイアログが表示されません。

    イベントの復元を実装すれば希望する動作になりそうな感じがします。
    しかし私には復元方法が解りません。

    不躾で申し訳ありませんが何卒宜しくお願いいたします。


記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90469  Re[9]: AddHandler Eventの別スレッドについて
□投稿者/ 魔界の仮面弁士 -(2019/03/13(Wed) 09:51:47)
    2019/03/13(Wed) 14:39:48 編集(投稿者)

    No90463 (TanuTanu さん) に返信
    > CreateObject("Shell.Application").Windows

    えぇ…。(−ー;
    別スレッドである No90411 を含め、今までこんなコードの話は
    出ていなかったように思うんですが、どこかで言及されていましたっけ?


    上記をレイトバインドで処理したいのであれば、
    過去ログの No47158 , No35068 あたりを探ってみてください。


    というか上記を使っているのなら、わざわざ API を駆使して
    >>> 下記サイトのGetIEDocumentでHTMLDocumentを取得しております。
    のような方法を取る必要は無いと思いますよ。

    Windows プロパティから得たコレクションを列挙することで、
    個々の InternetExplorer オブジェクトを取得できるので、
    その Document プロパティにアクセスすれば、
    HTMLDocument のインスタンスを得ることができますよね。


    > エラー BC30512 Option Strict On では 'Object' から 'InternetExplorer' への暗黙的な変換は許可されていません。
    > objIE.LocationName
    objIE 変数が As Object なのだとしたら、As SHDocVw.InternetExplorer にしてください。

    この場合、参照設定として、
     ・"Microsoft Internet Controls" (SHDocVw)
     ・"Microsoft Shell Controls And Automation" (Shell32)
    が必要です。


    参照設定を加えずに Option Strict On のままにしたいのであれば、
    先日の回答 ( No90410 , No90461 )や、上記過去ログ ( No35068 )などのように、
    CallByName を経由してアクセスする必要があります。


    > エラー BC30512 Option Strict On では 'Integer' から 'IntPtr' への暗黙的な変換は許可されていません。
    > PWnd = FindWindowExA(0, 0,・・・
    IntPtr 型の引数に 「0」という Integer 値を渡しているからでしょう。
    ここは IntPtr.Zero とすべきです。

    さらに言えば、FindWindowExA API ではなく FindWindowExW API を用いた方が望ましいと思います。


    > 下記が表示されました。
    > ※ボタン名称は非公開にしております。
    だとしたら、ターゲットにしているページが間違っています。

    取得した HTMLDocument が、先の No90454 で示した
    >> https://www.javadrive.jp/javascript/event/sample2_1.html
    になっていることを再度確認してみてください。

    このページから取得した yahoo ボタンであれば、下記の内容が表示されるはずなんですが…。

    ---------------------------
    function onclick(event)
    {
    kakunin(1)
    }
    ---------------------------


    上記の URL でも問題が生じるなら、環境依存の問題がありそうです。

    上記の URL では成功したけれども、目標としている URL だと失敗するのなら、
    jQueryのイベントハンドラが使われているなど、そのページ固有の
    別の問題がある可能性があるので、具体的な URL なり、
    正確なページの内容(HTML & JavaScript)が分からない事には、
    情報不足過ぎて答えようが無いです。
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90511  Re[6]: AddHandler Eventの別スレッドについて
□投稿者/ 魔界の仮面弁士 -(2019/03/15(Fri) 11:55:19)
    2019/03/15(Fri) 12:07:39 編集(投稿者)

    解決済みで閉じられているので、いちおうチェックは付けた状態に戻しておきます。


    No90477 (TanuTanu さん) に返信
    > その結果、yahooButton = DirectCast(doc.all.item("yahoo"), mshtml.IHTMLElement)の行にて下記エラーが発生致しました。

    その行のどの部分に問題があるのかを確認してみてください。

    NullReferenceException とは、インスタンスが空の時、すなわち
    オブジェクトが Nothing である場合に、
    そのメンバーを操作しようとして発生する例外ですよね。


    If doc Is Nothing Then
     MsgBox("doc が空だった")
    ElseIf doc.all Is Nothing Then
     MsgBox("doc.all が空だった")
    ElseIf doc.all.item("yahoo") Is Nothing Then
     MsgBox("doc.all.item(""yahoo"") が空だった")
    Else
     MsgBox("いずれも空ではなさそう")
     yahooButton = DirectCast(doc.all.item("yahoo"), mshtml.IHTMLElement)
    End If




    > FindWindowExWの値は0ですが、FindWindowではハンドル値取得できました。
    > PWnd1 = FindWindowExW(IntPtr.Zero, IntPtr.Zero, "TabThumbnailWindow", "JavaScript テスト - Internet Explorer")

    示されているのが結果だけで、要因となりうる情報が隠されたままなので、修正すべき箇所を指摘できないです。(^^;

    あえてもう一度質問させていただきます。
    『その API (FindWindowEx および FindWindowExW) の宣言部はどうなっていますか?』( No90475 の再掲 )


    少なくとも当方では、下記の API 宣言で取得できています。

    ' Imports System.Runtime.InteropServices

    ' === 案1 ===
    <DllImport("user32", CharSet:=CharSet.Unicode, SetLastError:=True)>
    Private Shared Function FindWindowExW(hwndParent As IntPtr, hwndChildAfter As IntPtr, lpszClass As String, lpszWindow As String) As IntPtr
    End Function

    ' === 案2 ===
    <DllImport("user32", CharSet:=CharSet.Auto, SetLastError:=True)>
    Private Shared Function FindWindowEx(hwndParent As IntPtr, hwndChildAfter As IntPtr, lpszClass As String, lpszWindow As String) As IntPtr
    End Function

    ' === 案3 ===
    Private Declare Unicode Function FindWindowExW Lib "user32" (hwndParent As IntPtr, hwndChildAfter As IntPtr, <MarshalAs(UnmanagedType.LPTStr)> lpszClass As String, <MarshalAs(UnmanagedType.LPTStr)> lpszWindow As String) As IntPtr

    ' === 案4 ===
    Private Declare Auto Function FindWindowEx Lib "user32" (hwndParent As IntPtr, hwndChildAfter As IntPtr, <MarshalAs(UnmanagedType.LPTStr)> lpszClass As String, <MarshalAs(UnmanagedType.LPTStr)> lpszWindow As String) As IntPtr




    宣言が間違っていて、IntPtr.Zero が返却されてしまうパターン。

    ' === 没1 ===
    <DllImport("user32", EntryPoint:="FindWindowExW", SetLastError:=True)>
    Private Shared Function FindWindowEx(hwndParent As IntPtr, hwndChildAfter As IntPtr, lpszClass As String, lpszWindow As String) As IntPtr
    End Function

    ' === 没2 ===
    <DllImport("user32", SetLastError:=True)>
    Private Shared Function FindWindowExW(hwndParent As IntPtr, hwndChildAfter As IntPtr, lpszClass As String, lpszWindow As String) As IntPtr
    End Function

    ' === 没3 ===
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExW" (hwndParent As IntPtr, hwndChildAfter As IntPtr, lpszClass As String, lpszWindow As String) As IntPtr



    正しい宣言ではないが、一応呼び出せてしまうパターン。

    ' === 非推奨1 ===
    Private Declare Unicode Function FindWindowExW Lib "user32" (hwndParent As IntPtr, hwndChildAfter As IntPtr, lpszClass As String, lpszWindow As String) As IntPtr

    ' === 非推奨2 ===
    Private Declare Unicode Function FindWindowEx Lib "user32" Alias "FindWindowExW" (hwndParent As IntPtr, hwndChildAfter As IntPtr, lpszClass As String, lpszWindow As String) As IntPtr



    >  WEBページ・・・CreateObject("Shell.Application").Windowsで対応しております。
    これを用いている部分のコードも見せていただけないでしょうか。

    SHDocVw.ShellWindows を宣言しておきながら、FindWindowEx API や、GetIEDocument までも
    追加で呼び出している理由が、どうしても分からなかったのです。

    No90463 の発言より、「objIE.LocationName」を利用しているであろうことは推察できましたが、
    目的は LocationName プロパティでウィンドウのタイトルを得ることだけなのでしょうか。
    あるいは HWND プロパティからウィンドウハンドルも得ているとか?

    objIE.Document プロパティを通じて HTMLDocument を得ることができるはずなので、
    わざわざ GetIEDocument を呼び出す必要性は無いと思っています。( No90469 で指摘 )

    (例)
    http://jumbofoot.cocolog-nifty.com/yass_vbnet_tips/2007/02/shellhtmldocume_f1cd.html


    WM_HTML_GETOBJECT でないと取得できない相手の場合は、API 宣言が必要になりますが、
    その場合、今度は CreateObject("Shell.Application").Window を使う意味が分からない…。



    >  上記WEBページから派生したWEBページダイアログ ・・・ GetIEDocument で対応(現在、ここのボタンクリックのイベントを対応しております。)

    ここでいう『派生』とは何を示していますか? ページ遷移の事でしょうか?

    ページが遷移したのであれば、以前の HTMLDocument はもう使えないので、
    読み込みが完了したことを通知するための DocumentComplete イベントにて、
    イベント引数 pDisp の Document プロパティを受け取るようにします。
    (フレームを持つページの場合は、各フレームごとに発生することに注意)

    あるいは、ターゲットとなる InternetExplorer オブジェクト(IWebBrowser2)を保持しておいて、
    その Document プロパティを取得しなおすという方法も使えますが、いずれにせよ、
    読み込みが完了する前に GetIEDocument なり Document プロパティなりで
    HTMLDocument を得ていた場合、DOM が不完全な状態になっていることがあります。

    なので、取得した HTMLDocument が、目的のページの内容を指しているかを
    確認しておくことも重要です。(これも No90469 で指摘 )


    それに、FindWindowEx を使うにしても、その使い方が不自然に思えます。
    そもそも "TabThumbnailWindow" クラスを探している理由は何でしょうか?
    先の GetIEDocument を使うことが目的なら、探すべきウィンドウは
    "Internet Explorer_Server" クラスのウィンドウ(またはその親ウィンドウ)の
    ハンドルであるはずですよね。


    また、「WEBページダイアログ」とは何を指していますか?
    キャプションが "JavaScript テスト - Internet Explorer" となる、 No90454
    https://www.javadrive.jp/javascript/event/sample2_1.html だとすれば、
    そもそもダイアログは存在していません。
    別のページが対象なのかもしれませんが、その場合は、doc.all.item("yahoo") は存在しないかもしれませんし。

    No90476 では「javascriptによる擬似モーダルダイアログ『だと思う』」とお答えいただきましたが、
    それが具体的になんであるのか(たとえば jQuery の colorbox とか)や、
    イベント割り当てが onclick なのかそれ以外なのかもはっきりしないままです。
記事No.90434 のレス / END /過去ログ156より / 関連記事表示
削除チェック/

■91818  ボタンクリックで年度変更できるようにしたい
□投稿者/ 勉強中 -(2019/08/05(Mon) 16:34:23)

    分類:[JavaScript] 

    開発環境:ASP.NET,Javascript
    対象フレームワーク:.Net Framework4

    昨年度、来年度のボタンをクリックするたびに、テキストボックスの表示を昨年度、来年度に表示する処理をしたいです。
    例)
    @テキストボックス:2019年度 → 昨年度ボタンクリック → テキストボックス:2018年度
    Aテキストボックス:2019年度 → 来年度ボタンクリック → テキストボックス:2020年度

    自分でも検索し調べながら、実践しているのですがなかなか上手くいかず苦戦しています。
    もし宜しければご教授の程宜しくお願い致します。

    下記、自分でやってみたコードです。

    【aspx】
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
     <asp:ImageButton ID="F50_Cmd_BefLeft" OnClientClick="return false" runat="server" ClientIDMode="Static"/>
     <asp:TextBox ID="F50_Txt_StYear" runat="server" ClientIDMode="Static" MaxLength="4"></asp:TextBox>
     <asp:ImageButton ID="F50_Cmd_BefRight" OnClientClick="return false" runat="server" ClientIDMode="Static" />
    </asp:Content>

    【Javascript】
    $(function(){

     //カウンタとなる変数を用意
     var cnt = 0;

     function showMonthDate() {
     var nowDate = new Date;
     var myDate = new Date(nowDate.getTime() + 18748800000 * cnt);
     var YY = myDate.getYear();
     var mm = ("0" + (myDate.getMonth() + 1)).slice(-2);

     document.getElementById("#F50_Txt_StYear").value = YY + "/" + mm;
     };
     //即実行
     showMonthDate();

     //開始左ボタンクリック
     document.getElementById("F50_Cmd_BefLeft").onclick = function () {
     //カウントダウンする
      cnt--;
      //実行
     showMonthDate();
     }

     //開始右ボタンクリック
     document.getElementById("F50_Cmd_BefRight").onclick = function () {
     //カウントアップする
     cnt++;
     //実行
     showMonthDate();
     }

    });

    説明不足の部分もあると思いますので、その時は教えてください。
    以上、よろしくお願い致します。
親記事 /過去ログ158より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -