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

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

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

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >>
■2401  Re[3]: TreeViewを用いた画面作成
□投稿者/ mao -(2006/01/26(Thu) 17:58:21)

    分類:[C#] 

    フレームはダメですか?
    作り方すら分からないので
    今調べています・・


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

■2400  Re[2]: TreeViewを用いた画面作成
□投稿者/ 名無しぃシャープ -(2006/01/26(Thu) 17:43:51)

    分類:[C#] 

    あ、フレームを使いたいって話かな?
    フレームはあんまりお勧めできませんよー。
記事No.2398 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2399  Re[1]: TreeViewを用いた画面作成
□投稿者/ 名無しぃシャープ -(2006/01/26(Thu) 17:42:36)

    分類:[C#] 

    っていうか、あなたが利用しているサイトこそがそれのような・・
    http://jeanne.wankuma.com/

    ASP.NETの話?
記事No.2398 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2398  TreeViewを用いた画面作成
□投稿者/ mao -(2006/01/26(Thu) 17:30:37)

    分類:[C#] 


    分類:[C#] 

    いつもお世話になっております。
    左側にTreeViewを用いて複数の階層ディレクトリを作成し、
    それらをクリックしたさいに右側の画面が
    変化する、という仕様なのですが、参考になりそうな
    サイト等ご存知でしょうか。
    下記のサイトの左側が階層ディレクトリ・・ってのが理想です。
    ttp://homepage3.nifty.com/midori_no_bike/CS/index.html
    //みどりのバイクの管理人様すいません。参考にさせてください
    左側の階層ディレクトリをクリックした後の画面変更が
    周りに資料がなくて・・
    アドバイスお願いします。



親記事 /0過去ログ2より / 関連記事表示
削除チェック/

■2397  Re[5]: DEVMODEの値を変更したい
□投稿者/ あや -(2006/01/26(Thu) 11:50:58)

    分類:[C#] 

    肝心なところを見逃してしまい大変申し訳ありませんでした m(__)m
    (決して意図的ではありませんのでご勘弁を・・・)

    再度内容を確認し、以下のようにすることで読み書きができました。
    勉強不足のためまだ不安なところがありますが、ひとまず動くようになりましたのでホッとしています。

    以下、現在のソースと不安なところです。

      # APIの宣言と、ロックを解放〜に自信がありません。
      # GlobalUnlock()、SetHdevmode()、GlobalFree()の引数はhMemでいいのでしょうか?
      # 私が試した限りでは、devmodePtrでも正しく動作しています。

      [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
      public struct DEVMODE {
          ・・・
      };

      [DllImport("kernel32.dll")]
      private static extern IntPtr GlobalLock(IntPtr hMem);
      [DllImport("kernel32.dll")]
      private static extern bool GlobalUnlock(IntPtr hMem);
      [DllImport("kernel32.dll")]
      private static extern IntPtr GlobalFree(IntPtr hMem);

      private void btnTest_Click(object sender, System.EventArgs e) {
       IntPtr hMem = this.printDocument.PrinterSettings.GetHdevmode(); // ハンドル取得
       IntPtr devmodePtr = GlobalLock(hMem); // ロック・ハンドルからポインタを取得
       DEVMODE dm =
           (DEVMODE)Marshal.PtrToStructure(devmodePtr, typeof(DEVMODE)); // ポインタから構造体にコピー

       dm.dmCopies = 10; // 印刷部数を10部に設定
       dm.dmCollate = 1; // 部単位で印刷
       Marshal.WriteByte(devmodePtr, dm.dmSize+720, 0); // ドライバ固定の720Byte目を0
       Marshal.StructureToPtr(dm, devmodePtr, true); // 構造体からポインタにコピー

       GlobalUnlock(hMem); // ロックを解放
       this.printDocument.PrinterSettings.SetHdevmode(hMem); // PriterSetteingsにコピー
       GlobalFree(hMem); // ハンドルを解放
      }

    よろしくお願いします。

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

■2395  Re[4]: DEVMODEの値を変更したい
□投稿者/ Hongliang -(2006/01/25(Wed) 20:13:55)
>

    分類:[C#] 

    大事なところを読み飛ばさないでください〜。

    ・Win32APIのGlobalLock関数で、ハンドルからアドレスポインタを取得する。

    GetHdevmodeで取得できるのは「ハンドル」です。ポインタじゃありません。
    //ポインタのポインタ、みたいなものです。
    だからこの値(が表すアドレス)に直接構造体を割り当てても意味ありません。
    ハンドルからポインタを取得するのにGlobalLockが必要なのです。
    もちろん使い終わったらGlobalUnlockも忘れずに。

    それから、恐らくこの構造体では文字セットの問題が発生すると思います。
    GetHdevmodeが内部で呼び出しているのは(私が試した限り)NT系ではW系の関数です。つまりデバイス名とフォーム名がUnicodeで返されています。
    StructLayout属性はデフォルトではCharSetがAnsiに設定されていますから、文字列へのマーシャリングで失敗するでしょう。
    プラットフォームにあう文字セットを使用するように、StructLayout属性のCharSetフィールドをAutoに設定してください。
記事No.2377 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2392  Re[4]: DEVMODEの値を変更したい
□投稿者/ あや -(2006/01/25(Wed) 17:45:20)

    分類:[C#] 

    Hongliangさんのアドバイスを元にとりあえずDEVMODEを取得するところからチャレンジしてみたのですが、取得するたびにDEVMODEの内容が少しずつ違うのですが・・・
    以下ソースと結果ですが、何か間違っているところはあるでしょうか?(DEVMODEの定義はPINVOKE.NETを参考にさせていただきました)

      [StructLayout(LayoutKind.Sequential)]
      public struct DEVMODE {
       [MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)]
       public string dmDeviceName;
       public short dmSpecVersion;
       public short dmDriverVersion;
       public short dmSize;
       public short dmDriverExtra;
       public int dmFields;
       public short dmOrientation;
       public short dmPaperSize;
       public short dmPaperLength;
       public short dmPaperWidth;
       public short dmScale;
       public short dmCopies;
       public short dmDefaultSource;
       public short dmPrintQuality;
       public short dmColor;
       public short dmDuplex;
       public short dmYResolution;
       public short dmTTOption;
       public short dmCollate;
       [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
       public string dmFormName;
       public short dmLogPixels;
       public short dmBitsPerPel;
       public int dmPelsWidth;
       public int dmPelsHeight;
       public int dmDisplayFlags;
       public int dmDisplayFrequency;
       public int dmICMMethod;
       public int dmICMIntent;
       public int dmMediaType;
       public int dmDitherType;
       public int dmReserved1;
       public int dmReserved2;
       public int dmPanningWidth;
       public int dmPanningHeight;
      };

      [DllImport("kernel32.dll")]
      private static extern IntPtr GlobalFree(IntPtr hMem);

      private void btnTest_Click(object sender, System.EventArgs e) {
       IntPtr devmodePtr = this.printDocument.PrinterSettings.GetHdevmode();
       DEVMODE dm = (DEVMODE)Marshal.PtrToStructure(devmodePtr, typeof(DEVMODE));
       GlobalFree(devmodePtr);

       Debug.WriteLine("dm.dmDeviceName[" + dm.dmDeviceName + "]");
       Debug.WriteLine("dm.dmSpecVersion[" + dm.dmSpecVersion + "]");
       Debug.WriteLine("dm.dmDriverVersion[" + dm.dmDriverVersion + "]");
       Debug.WriteLine("dm.dmSize[" + dm.dmSize + "]");
       Debug.WriteLine("dm.dmDriverExtra[" + dm.dmDriverExtra + "]");
    }

    結果1回目
     dm.dmDeviceName[ !]
     dm.dmSpecVersion[0]
     dm.dmDriverVersion[0]
     dm.dmSize[144]
     dm.dmDriverExtra[981]

    結果2回目
     dm.dmDeviceName[ p・p]
     dm.dmSpecVersion[0]
     dm.dmDriverVersion[0]
     dm.dmSize[136]
     dm.dmDriverExtra[981]

    長くなってしまいましたが、よろしくお願いします。
記事No.2377 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2389  Re[3]: DEVMODEの値を変更したい
□投稿者/ あや -(2006/01/25(Wed) 13:13:58)

    分類:[C#] 

    レスが前後してしまったようで・・・

    Hongliangさんのアドバイスを元にもうちょっと調べてみようと思います。
    また何かありましたらよろしくお願いします。

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

■2386  Re[3]: DEVMODEの値を変更したい
□投稿者/ 中博俊 -(2006/01/25(Wed) 12:54:47)
>

    分類:[C#] 

    とりあえず私が断念した内容と同じ(w

    すなおにmc++ or C++/CLIでラップするのが近道だと思います。
記事No.2377 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2383  Re[2]: DEVMODEの値を変更したい
□投稿者/ あや -(2006/01/25(Wed) 12:27:48)

    分類:[C#] 

    説明不足ですいません。

    DEVMODE構造体はわかっているつもりです。
    お聞きしたいのは、GetHdevmodeから返ってくるのがIntPtrなので、これをどうやって
    DEVMODE構造体にするのかと、ドライバ固定の値をどうやって設定するのかということです。

    お手数かけますが、よろしくお願いします。
記事No.2377 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2382  Re[2]: DEVMODEの値を変更したい
□投稿者/ Hongliang -(2006/01/25(Wed) 12:12:13)

    分類:[C#] 

    手順的には、

    ・C#側でDEVMODE構造体を定義しておく。
    ・GetHdevmodeメソッドでハンドルを取得する。
    ・Win32APIのGlobalLock関数で、ハンドルからアドレスポインタを取得する。
    ・System.Runtime.InteropServices.Marshal.PtrToStructureメソッドでポインタから構造体にコピーする。
    ・構造体を変更する。
    ・同じアドレスにMarshal.StructureToPtrメソッドでコピーする。
    ・Win32APIのGlobalUnlock関数でロックを解放。
    ・SetHdevmodeメソッドで書き込む。
    ・Win32APIのGlobalFree関数でメモリを解放する。

    ってことになりますかね。
    DEVMODE構造体のC#における表現はPINVOKE.NET辺り見ると載ってるかもしれません。
    プリンタ固有ってことはこの構造体の後ろにくっついてるんだろうけど、それらについてはMarshal.Read.../Write...メソッドを使うとかしないといけないかもしれません。
記事No.2377 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2380  Re[1]: DEVMODEの値を変更したい
□投稿者/ T★M -(2006/01/25(Wed) 11:36:22)
記事No.2377 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2377  DEVMODEの値を変更したい
□投稿者/ あや -(2006/01/25(Wed) 10:29:04)

    分類:[C#] 


    分類:[C#] 

    はじめまして。

    C#にて印刷プログラムの開発をしていますが、プリンタ固有の情報を変更するため、DEVMODEの値を変更する必要があります。
    PrinterSettingsクラスにGetHdevmode、SetHdevmodeというメソッドがあるので、これが使用できるかと思うのですが、使用方法が全くわかりません。

     public void Print() {
       // DEVMODEを取得する
       IntPtr devmode = this.printDocument.PrinterSettings.GetHdevmode();

       // プリンタ固有の値を変更する
       // DEVMODEの値を変更したいのですが使用方法がわかりません

       // 変更したDEVMODEを設定する
       this.printDocument.PrinterSettings.SetHdevmode(devmode);
     }

    MSDNにもサンプルが載っておらず困っています。何かよい方法がありましたらアドバイスお願いします。

親記事 /0過去ログ2より / 関連記事表示
削除チェック/

■2391  Re[6]: データなどを線で囲みたいです
□投稿者/ mao -(2006/01/25(Wed) 14:26:05)

    分類:[C#] 

    突っ込まれてしまいました。
    2つのパソからアクセスしています。
    今は家に帰ったのでmaoのほうです。
    紛らわしくて申し訳ございませんでした。

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

■2387  Re[5]: データなどを線で囲みたいです
□投稿者/ 名無しぃシャープ -(2006/01/25(Wed) 13:03:39)

    分類:[C#] 

    何で名前が変わっちゃうの?(w
記事No.2375 のレス / END /過去ログ2より / 関連記事表示
削除チェック/

■2385  Re[4]: データなどを線で囲みたいです
□投稿者/ mao -(2006/01/25(Wed) 12:53:02)

    分類:[C#] 

    BorderStyleは知りませんでした。勉強になります。
    draw以外の方法を教えていただきありがとうございました。


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

■2384  Re[3]: データなどを線で囲みたいです
□投稿者/ 名無しぃシャープ -(2006/01/25(Wed) 12:38:39)

    分類:[C#] 

    No2379に返信(norinorimiさんの記事)
    > 理解不能な文章で申し訳ありません。
    > 複数のstring型のデータを
    > 表示していますが(labelを利用)、
    > その周りを囲みたいのです。

    Labelならば、BorderStyleプロパティで事と足りませぬか?
    ダメなら、自分でDrawすることになりますが、そのあたりは検索してください。
    すぐ見つかりますゆえに。
記事No.2375 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2379  Re[2]: データなどを線で囲みたいです
□投稿者/ norinorimi -(2006/01/25(Wed) 11:21:17)

    分類:[C#] 

    理解不能な文章で申し訳ありません。
    複数のstring型のデータを
    表示していますが(labelを利用)、
    その周りを囲みたいのです。

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

■2378  Re[1]: データなどを線で囲みたいです
□投稿者/ 名無しぃシャープ -(2006/01/25(Wed) 11:18:04)

    分類:[C#] 

    No2375に返信(norinorimiさんの記事)
    > 複数のデータを表示する際に
    > 見栄えを良くする為に周りを色のついた線などで囲むなど
    > したいのですが、一通り調べてみてしっくりくるのが見つかりませんでした。
    > 大したことではないと思うのですが、
    > ショウガナイ教えてやるか・・という方おられましたら
    > 是非ともお願いします。

    複数のデータというものがなんなのかわからないのでお答えできません。
記事No.2375 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2375  データなどを線で囲みたいです
□投稿者/ norinorimi -(2006/01/25(Wed) 10:16:35)

    分類:[C#] 


    分類:[C#] 

    複数のデータを表示する際に
    見栄えを良くする為に周りを色のついた線などで囲むなど
    したいのですが、一通り調べてみてしっくりくるのが見つかりませんでした。
    大したことではないと思うのですが、
    ショウガナイ教えてやるか・・という方おられましたら
    是非ともお願いします。

親記事 /0過去ログ2より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >>

ヒット件数が多いので過去ログ1〜2 までの検索結果 / 過去ログ3からさらに検索→

パスワード/

- Child Tree -