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 >>
■46622  Re[5]: 日本語テキストからキーワードを抽出する方法
□投稿者/ こあら -(2010/02/07(Sun) 00:42:52)
    ※注意※
    Firefox3.5.6でテストしています。IEでは動きません。
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>日本語テキストからキーワードを抽出するテスト</title>
    </head>
    <script type="text/javascript" charset="UTF-8">
    
    
    if (!Array.prototype.mergepush){
    	Array.prototype.mergepush = function(object){
    		for (var i = 0; i < this.length; i++) {
    			if (this[i].indexOf(object) != -1) {
    				return i;
    			}
    			if (object.indexOf(this[i]) != -1) {
    				this[i] = object;
    				return i;
    			}
    		}
    		this.push(object);
    		return this.length;
    	}
    }
    
    var keywords;
    function callback(arr) {
    	if(document.all){
    //		dom = new ActiveXObject("Microsoft.XMLDOM");
    //		dom.async = false;
    //		dom.loadXML(xml);
    	}else{
    		dom = document.implementation.createDocument("", "", null);
    		dom.async = false;
    		var sum = 0;
    		for (var i = 0; i < arr[2].length; i++) {
    			sum += parseInt(arr[2][i].replace(/[^0-9]/g, ""));
    		}
    		if (sum > 50000) keywords.push({keyword:arr[0], count:sum});
    	}
    	keywords.sort(function(a,b){var t=10000000;a1=a["count"];b1=b["count"];return ((b1>t)?-b1:b1)-((a1>t)?-a1:a1);});
    
    	var out = document.getElementById("output");
    	out.innerHTML = "";
    	for (var i = 0; i < keywords.length; i++) {
    		out.innerHTML += "<p>" + keywords[i]["keyword"] + ":" + keywords[i]["count"] + "</p>";
    	}
    }
    
    
    function Query() {
    	keywords = new Array();
    	var i = document.getElementById("input");
    	var arr = new Array();
    	var reg = new RegExp('([一-龠]{2,}|[ァ-ヶー]{2,}|[0-9a-zA-Z]{4,})', 'g');
    	while ((m = reg.exec(i.value)) != null) {
    		arr.mergepush(m[0]);
    	}
    
    	for (var e = 0; e < arr.length; e++) {
    //		var url = "http://www.google.co.jp/complete/search?output=toolbar&json=t&q=" + arr[e];
    //		var url = "http://suggestqueries.google.com/complete/search?hl=ja&output=toolbar&json=t&jsonp=callback&qu=" + arr[e];
    		var url = "http://suggestqueries.google.com/complete/search?hl=ja&json=t&jsonp=callback&qu=" + arr[e];
    		var script = document.createElement('script');
    		script.setAttribute('src', url);
    		document.getElementsByTagName('head')[0].appendChild(script); 
    	}
    }
    
    function Clear() {
    	var i = document.getElementById("input");
    	var o = document.getElementById("output");
    	i.value = "";
    	o.style.display = "none";
    	o.innerHTML = "";
    }
    </script>
    <body>
    	<h1>日本語テキストからキーワードを抽出するテスト</h1>
    	<div class="main">
    		<br>
    		<p></p>
    		<p>
    			<h2>デモ</h2>
    			<p>日本語の文章を入力し、問い合わせボタンをクリックしてください。</p>
    			<textarea id="input" cols="40" rows="5"></textarea>
    			<p>
    				<input type="submit" value="問い合わせ" onclick="Query()">
    				<input type="submit" value="クリア" onclick="Clear()">
    			</p>
    		</p>
    		<p>
    			<div id="output" style="width:91%; margin-left: 1.5em; border-width:1px; border: dotted 1px;"></div>
    		</p>
    </body>
    </html>
    
記事No.46399 のレス /過去ログ79より / 関連記事表示
削除チェック/

■46676  Re[7]: 日本語テキストからキーワードを抽出する方法
□投稿者/ こあら -(2010/02/08(Mon) 23:26:00)
    2010/02/08(Mon) 23:29:23 編集(投稿者)

    ※単語をタスキ掛けでGoogleSuggestしますので、あまり長文でテストしない方が良いかもしれません。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>日本語テキストからキーワードを抽出するテスト</title>
    </head>
    <script type="text/javascript" charset="UTF-8">

    function KeywordArray() {}
    KeywordArray.prototype = new Array();

    KeywordArray.prototype.mergePush = function(object){
    for (var i = 0; i < this.length; i++) {
    if (object == this[i].keyword) return false;
    }
    return this.push({keyword:object, degree:0, count:0});
    }

    KeywordArray.prototype.parseContent = function(object){
    var o = object.toLowerCase();
    var reg = new RegExp('([一-龠]{2,}|[ァ-ヶー]{2,}|[0-9a-zA-Z]{4,})', 'g');
    while ((m = reg.exec(o)) != null) {
    this.mergePush(m[0]);
    }
    }

    KeywordArray.prototype.request = function(){
    for (var i = 0; i < this.length; i++) {
    for (var j = i+1; j < this.length; j++) {
    suggestions.push({keywords:this[i].keyword + " " + this[j].keyword, suggestion:null});
    var url = "http://suggestqueries.google.com/complete/search?hl=ja&json=t&jsonp=callback&qu=" + this[i].keyword + "+" + this[j].keyword;
    var script = document.createElement('script');
    script.setAttribute('src', url);
    document.getElementsByTagName('head')[0].appendChild(script);
    }
    }
    };

    KeywordArray.prototype.customSort = function(){
    this.sort(
    function(a,b){
    if (b.degree!=a.degree){
    return b.degree - a.degree;
    } else {
    return b.count - a.count;
    // var t=10000000;
    // return ((b.count>t)?-b.count:b.count)-((a.count>t)?-a.count:a.count);
    }
    });
    }

    KeywordArray.prototype.toString = function(){
    var s="";
    for (var i = 0; i < this.length; i++) {
    s += "keyword[" + i + "]=" + this[i].keyword;
    s += "@degree=" + this[i].degree;
    s += "@count=" + this[i].count + "<br>";
    }
    return s;
    }

    function SuggestionArray() {}
    SuggestionArray.prototype = new Array();

    SuggestionArray.prototype.response = function(object){
    for (var i = 0; i < this.length; i++) {
    if (this[i].keywords == object[0].toLowerCase()) {
    if (!this[i].suggestion) this[i].suggestion = new Array();
    this[i].suggestion.push({suggest:object[1], count:object[2]});
    break;
    }
    }
    }

    SuggestionArray.prototype.receivedAllResponses = function(){
    for (var i = 0; i < this.length; i++) {
    if (!this[i].suggestion) {
    return false;
    }
    }
    return true;
    }

    SuggestionArray.prototype.parse = function(){
    for (var i = 0; i < this.length; i++) {
    for (var j = 0; j < this[i].suggestion.length; j++) {
    for (var k = 0; k < this[i].suggestion[j].suggest.length; k++){
    var arr = this[i].suggestion[j].suggest[k].split(" ");
    for (var l = 0; l < arr.length; l++){
    for (var m = 0; m < keywords.length; m++) {
    if (arr[l].toLowerCase() == keywords[m].keyword){
    keywords[m].degree ++;
    keywords[m].count += parseInt(this[i].suggestion[j].count[k].replace(/[^0-9]/g, ""));
    }
    }
    }
    }
    }
    }
    }

    SuggestionArray.prototype.toString = function(){
    var s="";
    for (var i = 0; i < this.length; i++) {
    s += "keywords=" + this[i].keywords.toString() + "<br>";
    for (var j = 0; j < this[i].suggestion.length; j++) {
    for (var k = 0; k < this[i].suggestion[j].suggest.length; k++) {
    s += this[i].suggestion[j].suggest[k].toString() + "@";
    s += this[i].suggestion[j].count[k].toString() + "<br>";
    }
    }
    s += "<br>";
    }
    return s;
    }

    function callback(data) {
    suggestions.response(data);
    if (suggestions.receivedAllResponses()) {
    suggestions.parse();
    keywords.customSort();
    document.getElementById("output").innerHTML = keywords.toString();
    }
    }

    var keywords;
    var suggestions;
    function Query() {
    keywords = new KeywordArray();
    suggestions = new SuggestionArray();
    document.getElementById("output").innerHTML = "";
    keywords.parseContent(document.getElementById("input").value);
    keywords.request();
    }

    function Clear() {
    var i = document.getElementById("input");
    var o = document.getElementById("output");
    i.value = "";
    o.style.display = "none";
    o.innerHTML = "";
    }

    function Debug() {
    var o = document.getElementById("output");
    o.style.display = "block";
    o.innerHTML = keywords.toString() + "<br>" + suggestions.toString();
    }

    </script>
    <body>
    <h1>日本語テキストからキーワードを抽出するテスト</h1>
    <div class="main">
    <br>
    <p></p>
    <p>
    <h2>デモ</h2>
    <p>日本語の文章を入力し、問い合わせボタンをクリックしてください。</p>
    <textarea id="input" cols="40" rows="5"></textarea>
    <p>
    <input type="submit" value="問い合わせ" onclick="Query()">
    <input type="submit" value="クリア" onclick="Clear()">
    <input type="submit" value="debug" onclick="Debug()">
    </p>
    </p>
    <p>
    <div id="output" style="width:91%; margin-left: 1.5em; border-width:1px; border: dotted 1px;"></div>
    </p>
    </body>
    </html>
記事No.46399 のレス /過去ログ79より / 関連記事表示
削除チェック/

■46980  クリスタルレポートの円グラフについて
□投稿者/ momo -(2010/02/15(Mon) 16:19:58)

    分類:[C#] 

    現在、C#でクリスタルレポートを使用して、
    円グラフの作成を行っています。

    CrystalReportのsection3(詳細)部分に

    No 金種 枚数 金額
    1 1万円 10 100000
    2 5千円 5 25000
    3 2千円 2 4000
    4 1千円 1 1000

    と表示はできたのですが、枚数の各割合を円グラフ
    を使って表したいです。

    チャートを挿入して、
    @タイプで円を選択
    Aデータでレポートフィールドの金種名を選択
     (変更時…@金種名-Aと表示されています。)
    B表示する値:レポートフィールドの枚数を選択

    上記Bを行うと、表示する値が"枚数の件数"と表示
    されてしまいます。

    表示する値:は必ず"***の件数"となるのでしょうか?

    また、どのようにしたら各金種に対する枚数を
    表示できるのでしょうか?

    よろしくお願いします。







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

■46990  Re[1]: クリスタルレポートの円グラフについて
□投稿者/ momo -(2010/02/15(Mon) 18:47:30)
    No46980 (momo さん) に返信
    > 現在、C#でクリスタルレポートを使用して、
    > 円グラフの作成を行っています。
    >
    > CrystalReportのsection3(詳細)部分に
    >
    > No 金種 枚数 金額
    > 1 1万円 10 100000
    > 2 5千円 5 25000
    > 3 2千円 2 4000
    > 4 1千円 1 1000
    >
    > と表示はできたのですが、枚数の各割合を円グラフ
    > を使って表したいです。
    >
    > チャートを挿入して、
    > @タイプで円を選択
    > Aデータでレポートフィールドの金種名を選択
    >  (変更時…@金種名-Aと表示されています。)
    > B表示する値:レポートフィールドの枚数を選択
    >
    > 上記Bを行うと、表示する値が"枚数の件数"と表示
    > されてしまいます。
    >
    > 表示する値:は必ず"***の件数"となるのでしょうか?
    >
    > また、どのようにしたら各金種に対する枚数を
    > 表示できるのでしょうか?
    >
    > よろしくお願いします。
    >
    >
    >
    >
    >
    >
    >
    >
記事No.46980 のレス / END /過去ログ79より / 関連記事表示
削除チェック/

■47485  Re[15]: ブザーを鳴らす
□投稿者/ もりお -(2010/03/03(Wed) 23:13:32)
    2010/03/03(Wed) 23:15:55 編集(投稿者)


    No47480 (itoh さん) に返信

    > できればPlayerは表示されないほうがよいですが。

    お好みな対応をお取りくださいな。

    hidden 属性をセットしてみたり
    <embed src="beep.mp3" type="application/x-mplayer2" hidden="true"></embed>

    CSS で表示しないようにしてみたり
    <style type="text/css">
    .player {
    visibility:hidden;
    }
    </style>
    <embed class="player" src="beep.mp3" type="application/x-mplayer2"></embed>

    CSS で表示しないようにしてみたり2
    <style type="text/css">
    .player {
    display:none;
    }
    </style>

    見えないぐらい小さくしてみたり
    <style type="text/css">
    .player {
    width:0px;
    height:0px;
    }
    </style>

    表示されないぐらい遠くに配置してみたり
    <style type="text/css">
    .player {
    position:absolute;
    top:-10000px;
    left:-10000px;
    }
    </style>
記事No.47371 のレス /過去ログ80より / 関連記事表示
削除チェック/

■49389  Re[3]: C#でDF.exeのような比較ツール作成での改行判断
□投稿者/ れい -(2010/05/03(Mon) 00:52:08)
    No49388 (れい さん) に返信
    > 昔、.Netにジェネリックが追加されたとき、
    > ジェネリックの勉強を兼ねて作った差分リストのコードを持っています。
    >
    > 提供しますので適当に使ってください。

    提供しようとおもったんですが
    10000文字しか書き込めない、ということなので無理でした。

    8000文字x2に分割しても投稿できませんでした。

    ソースは別に貼りつけられるといいんだけど。

    欲しかったら言ってください。
記事No.49367 のレス /過去ログ83より / 関連記事表示
削除チェック/

■50047  vb.net(2008)テキストBOX IME制御 その2
□投稿者/ Morio -(2010/05/27(Thu) 09:14:24)

    分類:[.NET 全般] 

    VB.net(2008)を使用して、IMEのソフトキー画面を作っています。
    IMEの動作は、行われるようになりましたが、以下の処理で悩んでいます。

      1.from1に、textbox1を配置
      2.form1に、コマンドボタンを数個配置(キャプションには、"あ","い","う"等を記載して見た目ソフトキーになるように)
        Button1.caption = "あ"
        Button2.caption = "い"
        Button3.caption = "う"

      3.form1_Activate にて
    hIMC = ImmGetContext(TextBox2.Handle)'コンテキスト取得
        ImmSetOpenStatus(hIMC, True)'IMEオープン
    TextBox1.Focus()'テキストボックスへフォーカス
      これで、IMEが起動

    4.各コマンドボタンのClickイベントにて
        strKana= Button2.caption' "い"form1のローカルString変数にボタンのキャプション文字をセット
    TextBox1.Focus()'テキストボックスへフォーカスセット

      5.textbox1のEnterもしくはGotfocusイベントにて
    Dim length As Integer
    Dim ret As Long
    length = Encoding.Unicode.GetByteCount(strKana)
    '文字入力をする
        ret = ImmSetCompositionString(hIMC, eSCS.SCS_SETSTR, strKana, length, Nothing, 0)
          
    この環境で、実施した場合に、ボタンを
       @Button1、Button2、Button3の順番でクリックすると、テキストボックスに表示される文字は
        button3の"う"の文字だけが変換前文字として表示されます。
       Aもう一度、Button1、Button2、Button3の順番でクリックすると、
       "うあいう"と表示されます。

       一度もクリックしていない文字のボタン押下時は、その文字だけになる @の状態
       一度クリックした文字のボタンを押下すると、Aの状態

       Aの状態が最初から実施されることを望んでいますが、何が問題なのか??です。
       もちろん、textbox1にキーボードから直接入力すれば、正しくAの動作をします。
       
      またまた、すみませんが、ご教授願います。


      使用しているAPIです。
    Public Declare Function ImmGetConversionStatus Lib "imm32.dll" _
    (ByVal himc As IntPtr, ByRef lpdw As Integer, ByRef lpdw2 As Integer) As Boolean

    Public Declare Function ImmSetConversionStatus Lib "imm32.dll" _
    (ByVal himc As IntPtr, ByVal dw1 As Integer, ByVal dw2 As Integer) As Boolean

    Public Declare Function ImmGetContext Lib "imm32" (ByVal hWnd As IntPtr) As IntPtr

    Public Declare Function ImmSetOpenStatus Lib "imm32" (ByVal hIMC As IntPtr, _
    <MarshalAs(UnmanagedType.Bool)> ByVal fOpen As Boolean ) As <MarshalAs(UnmanagedType.Bool)> Boolean

    Public Enum eSCS As Integer 'As UInteger
    SCS_SETSTR = &H9
    SCS_CHANGEATTR = &H11
    SCS_CHANGECLAUSE = &H24
    SCS_SETRECONVERTSTRING = &H10000
    SCS_QUERYRECONVERTSTRING = &H20000
    End Enum

    Public Declare Auto Function ImmSetCompositionString Lib "imm32" _
    (ByVal hIMC As IntPtr,ByVal dwIndex As eSCS,ByVal lpComp As String, ByVal dwCompLen As Int32, _
    ByVal lpRead As String,ByVal dwReadLen As Int32 ) As <MarshalAs(UnmanagedType.Bool)> Boolean

    Public Declare Function ImmReleaseContext Lib "imm32" (ByVal hWnd As IntPtr, ByVal hIMC As IntPtr _
    ) As <MarshalAs(UnmanagedType.Bool)> Boolean
親記事 /過去ログ84より / 関連記事表示
削除チェック/

■50204  2010'春夏新作
□投稿者/ 高明 百惠 -(2010/05/31(Mon) 09:59:17)
>

    分類:[.NET 全般] 

    2010'春夏新作
    ●在庫情報随時更新!(*^-^*)
    ★注文金額25000以上:贈る送3500円の商品
    ★注文金額30000以上:贈る送4000円の商品
    ★注文金額35000以上:贈る送5500円の商品
    ★注文金額55000以上:贈る送10000円の商品
    ★注文金額70000以上:贈る送12000円の商品


    (店舗HP):www.aa-yahoo.com 高明 百惠
記事No.50080 のレス /過去ログ84より / 関連記事表示
削除チェック/

■50394  CDM_GETFILEPATHが仕事をしない!!
□投稿者/ Z -(2010/06/05(Sat) 23:18:27)

    分類:[C#] 

    お世話になっています。
    OpenFileDialogのカスタマイズというよくあることをやっていたのですが、
    変な事象が発生したので、ご教授して頂けないでしょうか。

    変な事象というのはWindowsVistaで「CDM_GETFILEPATH」が仕事をしないという事象です。
    (XPやWin7の環境がないため、Vista以外では確認しておりません)

    ソースは以下の通りです。お目汚しなソースですが、ご容赦ください。


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.Runtime.InteropServices;

    namespace WindowsFormsApplication1
    {
    public partial class Form1 : Form
    {
    [DllImport("user32.dll")]
    internal static extern IntPtr CreateWindowEx(
    uint dwExStyle, string lpClassName, string lpWindowName, uint dwStyle, int x, int y,
    int nWidth, int nHeight, IntPtr hWndParent, IntPtr hMenu, IntPtr hInstance, IntPtr lpParam);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
    internal static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, StringBuilder lParam);

    const uint WS_VISIBLE = 0x10000000;
    static readonly IntPtr HWND_MESSAGE = new IntPtr(-3);
    static readonly IntPtr NULL = IntPtr.Zero;

    public static IntPtr target = IntPtr.Zero;

    public Form1()
    {
    InitializeComponent();

    IntPtr dummy = CreateWindowEx(0, "Message", null, WS_VISIBLE, 0, 0, 0, 0,
    HWND_MESSAGE, NULL, NULL, NULL);

    new HandlerHelper().AssignHandle(dummy);

    OpenFileDialog dlg = new OpenFileDialog();

    dlg.ShowHelp = true;

    dlg.ShowDialog(this);

    dlg.Dispose();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
    if (target != IntPtr.Zero)
    {
    StringBuilder filePath = new StringBuilder(256);
    uint cd = 0x0465;//CDM_GETFILEPATH;
    SendMessage(target, cd, (IntPtr)256, filePath);
    Debug.WriteLine(filePath.ToString());
    }
    }

    public class HandlerHelper : NativeWindow
    {
    protected override void WndProc(ref Message m)
    {
    if (m.Msg == 0x0006) //WM_ACTIVATE
    {
    if (Form1.target == IntPtr.Zero)
    {
    Form1.target = m.LParam;
    }
    }

    base.WndProc(ref m);
    }
    }
    }
    }


    この状態で実行すると「CDM_GETFILEPATH」はちゃんと仕事を行い、
    選択しているファイルを取得してきます。

    しかし、

    //dlg.ShowHelp = true;

    とし、ヘルプボタンを表示しないようにします。
    そうすると、「VistaっぽいOpenFileDialog」になるのですが…

    これで実行すると、「CDM_GETFILEPATH」は仕事をしてくれません。

    いろいろググってみたのですが…原因が分かりませんでした。

    どなたかご教授して頂けないでしょうか。


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

■50537  OutOfMemoryExceptionについて
□投稿者/ おそら -(2010/06/10(Thu) 14:41:15)

    分類:[.NET 全般] 

    OutOfMemoryExceptionについて調べていて気になったので質問します。

    http://msdn.microsoft.com/ja-jp/library/system.outofmemoryexception(VS.80).aspx
    を見ると「プログラムの実行を継続するためのメモリが不足している場合にスローされる例外。」
    との記述がありますが、これってどのような状況をさしているのでしょうか。

    例えば以下のようなコードを適当に実行するとExceptionが発生します。

    StringBuilder test = new StringBuilder();
    test.Append("");←適当に300文字くらい

    for (long i = 0; i < 100000000000; i++)
    {
    test.Append(test.ToString());
    }

    実行環境
    XP/SP2 メモリ2G

    実行前は使用メモリ500M程度、iが18になった時にExceptionが発生します。
    使用量は900M程度(タスクマネージャーにて確認)
    この時なぜ発生するのか、何の単位でこのメモリーが不足しているのかって分かるものでしょうか。

    因みにwindowsフォーム及びWebでも同様にエラーになります。

    今後プロジェクトでメモリを大量に使用するソースを書く為、
    どのような原因で発生するのか把握しておきたいのですが、ご教示よろしくお願いいたします。
親記事 /過去ログ85より / 関連記事表示
削除チェック/

■51831  印刷プレビュー(PrintPreviewDialog)で表示
□投稿者/ じいおい -(2010/07/21(Wed) 23:12:16)

    分類:[.NET 全般] 

    おせわになります。じいおいといいます。
    どうしても分からないので、教えていただければ幸いです。開発環境はWindowsXPsp3のVB2008です。

    プリンタでは、出力できるのに、印刷プレビューではちゃんと表示しません。
    していることは、PrintDocumentのPrintPageにおいて
    Graphics.DrawLinesで10000点以上の連続線を書かせているだけです。

    御教授お願いいたします。
親記事 /過去ログ87より / 関連記事表示
削除チェック/

■51832  Re[1]: 印刷プレビュー(PrintPreviewDialog)で表示
□投稿者/ じいおい -(2010/07/21(Wed) 23:39:09)
    じいおいです。書いたコードです。
    
    
    Private Sub Button1_Click(ByVal sender As Object,ByVal e As EventArgs) Handles Button1.Click
    
      Dim pdlg As New PrintDialog()
      pdlg.Document = PrintDocument1
      pdlg.ShowDialog()
    
      Dim ppd As PrintPreviewDialog()
      ppd.Document = PrintDocument1
      ppd.ShowDialog()
    
    End Sub
    
    Privete Sub PrintDocument1_PrintPage(ByVal sender As Object,ByVal e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
      
      Dim g = e.Graphics
      Dim w = g.VisibleClipBounds.Width
      Dim h = g.VisibleClipBounds.Height
    
      Dim c = 10000I
      Dim p(c) As PointF
      For i = 0 To c
        p(i) = New PointF(w / c * i,h / c * i)
      Next
    
      g.DrawLines(Pens.Aqua,p)
    
    End Sub
記事No.51831 のレス /過去ログ87より / 関連記事表示
削除チェック/

■52565  OpenGLをC++/CLIで使うとプロセスが残ってしまう
□投稿者/ SimA -(2010/08/15(Sun) 13:17:29)

    分類:[C++/CLI] 

    はじめまして、はじめて質問いたします。

    Windowsフォームアプリケーション上でOpenGLを使って
    シミュレーションの結果を描画させたいと考えています。

    プロトタイプとなるものをC++/CLIで作成しました。

    Form1.hへ必要と思われる内容を記述していますがアプリケーションを
    「ビルド」⇒「実行」⇒「終了」
    とさせてもタスクマネージャにプロセスが残ってしまい
    正常終了させることができません。

    どこかコードの記述に誤りがあると思いますが、コードを見て
    頂いて誤りを指摘して頂きたいと思っています。

    以下にForm1.hのコードを記載させていただきます。
    どうぞ宜しくお願いいたします。


    #pragma once

    #include <windows.h>
    #include <iostream>
    #include <math.h>
    #include <gl/gl.h>
    #include <gl/glu.h>
    #include <stdio.h>

    using namespace std;

    namespace test_1 {

    ///////////<追加したコード@>/////////////////////////////////

    // グローバル変数
    double dt = 0.005; // 時間ステップサイズ
    int FrameCounter = 0; // フレーム数

    //////////////////////////////////////////////////////////////

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;

    /// <summary>
    /// Form1 の概要
    ///
    /// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた
    /// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを
    /// 変更する必要があります。この変更を行わないと、
    /// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、
    /// 正しく相互に利用できなくなります。
    /// </summary>

    // Form1クラス宣言
    public ref class Form1 : public System::Windows::Forms::Form
    {


    ////////<追加したコードA>///////////

    private:
    HDC hDC;
    HGLRC hRC;

    /////////////////////////////////////


    private: System::Windows::Forms::Button^ button1;
    private: System::Windows::Forms::Button^ button2;


    public:
    Form1(void)
    {
    InitializeComponent();
    //
    //TODO: ここにコンストラクタ コードを追加します
    //

    /////////////////////<追加したコードB>/////////////////////////////////////


    hDC = GetDC((HWND)(pictureBox->Handle.ToInt32()));

    PIXELFORMATDESCRIPTOR pfd =
    {
    sizeof(PIXELFORMATDESCRIPTOR),
    1,
    PFD_DRAW_TO_WINDOW
    | PFD_SUPPORT_OPENGL
    | PFD_DOUBLEBUFFER,
    PFD_TYPE_RGBA,
    32,
    0,0,0,0,0,0,
    0,0,0,0,0,0,0,
    16,
    0,0,
    PFD_MAIN_PLANE,
    0,
    0,0,0
    };

    int pixelFormat = ChoosePixelFormat(hDC,&pfd);
    BOOL success = SetPixelFormat(hDC,pixelFormat,&pfd);
    hRC = wglCreateContext(hDC);

    wglMakeCurrent(hDC,hRC);
    wglMakeCurrent(0,0);

    glClearColor( 1,1,1,0 );
    glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT );

    wglMakeCurrent(hDC,0);
    SwapBuffers(hDC);

    }

    ///////////////////////////////////////////////////////////////////////////////


    protected:
    /// <summary>
    /// 使用中のリソースをすべてクリーンアップします。
    /// </summary>

    //デストラクタ
    ~Form1()

    {

    //////////////////////////<追加したコードC>////////////////////////////////////

    wglMakeCurrent(hDC,0);
    wglDeleteContext(hRC);
    ReleaseDC((HWND)pictureBox->Handle.ToInt32(),hDC);

    ////////////////////////////////////////////////////////////////////////////////


    if (components)
    {
    delete components;
    }
    }

    private: System::Windows::Forms::Button^ button;
    protected:
    private: System::Windows::Forms::PictureBox^ pictureBox;


    private:
    /// <summary>
    /// 必要なデザイナ変数です。
    /// </summary>
    System::ComponentModel::Container ^components;

    #pragma region Windows Form Designer generated code
    /// <summary>
    /// デザイナ サポートに必要なメソッドです。このメソッドの内容を
    /// コード エディタで変更しないでください。
    /// </summary>
    void InitializeComponent(void)
    {
    this->pictureBox = (gcnew System::Windows::Forms::PictureBox());
    this->button1 = (gcnew System::Windows::Forms::Button());
    this->button2 = (gcnew System::Windows::Forms::Button());
    (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox))->BeginInit();
    this->SuspendLayout();
    //
    // pictureBox
    //
    this->pictureBox->BackColor = System::Drawing::SystemColors::Window;
    this->pictureBox->Location = System::Drawing::Point(12, 59);
    this->pictureBox->Name = L"pictureBox";
    this->pictureBox->Size = System::Drawing::Size(268, 195);
    this->pictureBox->TabIndex = 0;
    this->pictureBox->TabStop = false;
    //
    // button1
    //
    this->button1->Location = System::Drawing::Point(28, 20);
    this->button1->Name = L"button1";
    this->button1->Size = System::Drawing::Size(96, 23);
    this->button1->TabIndex = 1;
    this->button1->Text = L"描画開始";
    this->button1->UseVisualStyleBackColor = true;
    this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
    //
    // button2
    //
    this->button2->Location = System::Drawing::Point(171, 20);
    this->button2->Name = L"button2";
    this->button2->Size = System::Drawing::Size(84, 23);
    this->button2->TabIndex = 2;
    this->button2->Text = L"描画終了";
    this->button2->UseVisualStyleBackColor = true;
    this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);
    //
    // Form1
    //
    this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
    this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    this->ClientSize = System::Drawing::Size(292, 266);
    this->Controls->Add(this->button2);
    this->Controls->Add(this->button1);
    this->Controls->Add(this->pictureBox);
    this->Name = L"Form1";
    this->Text = L"Form1";
    (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox))->EndInit();
    this->ResumeLayout(false);

    }


    #pragma endregion

    // ボタン2
    private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
    {
    this->Close();
    }

    // ボタン1
    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
    {
    for(;;)
    {
    wglMakeCurrent(hDC,hRC);

    // OpenGLの関数を実行
    display();

    Application::DoEvents();
    System::Threading::Thread::Sleep(1000/30);
    wglMakeCurrent(hDC,0);
    SwapBuffers(hDC);
    }
    }



    // 描画用の関数
    public: System::Void display()
    {

    double u;
    u=1.0;
    double t;

    glViewport(0, 0, (GLsizei)pictureBox->Width, (GLsizei)pictureBox->Height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0,(GLsizei)pictureBox->Width / (GLsizei)pictureBox->Height,0.1,20.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClearColor(0,0,0,0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    glTranslated(0.0, 0.0, -2.0);
    glEnable(GL_POINT_SMOOTH);
    glColor3d(1.0, 0.0 ,0.0);
    glPointSize(100);
    glBegin(GL_POINTS);

    int i;
    for (i=0; i<30; i++)
    {

    t = dt*(double)FrameCounter;
    u = sin(t);

    FrameCounter++;

    if( FrameCounter>=10000)
    {
    FrameCounter = 0; // 初期時刻へ戻す
    u=1.0; // 初期状態に戻す
    }
    }

    glEnable(GL_POINT_SMOOTH);
    glColor3d(1.0, 0.0 ,0.0);
    glPointSize(10);
    glBegin(GL_POINTS);
    glVertex3d(0.0, 0.5*u, 0.0);
    glEnd();
    glPopMatrix();
    glFlush();
    }

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

■53102  Re[1]: _tsetlocale連続使用すると消費メモリ増大し続ける
□投稿者/ 774RR -(2010/09/03(Fri) 10:51:25)
    Visual Studio 2005 Pro にて
    ---loctest.c---
    int main() {
     getchar();
     for (int i=0; i<100000; ++i) _tsetlocale(LC_ALL, _T(""));
     getchar();
    }
    としてみたところ、単にこれだけならばタスクマネージャ上の数値は増えなかった。

    何か他に原因があるんぢゃないの? (2番目の引数を strdup で作ってるとか)

    なぜ setlocale を何回も呼び出さなきゃならんのかが微妙だけど...
    初期化時に1回呼び出せば必要十分なはずだが。
記事No.53100 のレス /過去ログ89より / 関連記事表示
削除チェック/

■53134  Re[1]: DataTable同士の結合について
□投稿者/ 魔界の仮面弁士 -(2010/09/03(Fri) 17:37:36)
    No53128 (kz さん) に返信
    > 表示処理の際に複数のテーブルの情報を結合して
    > 取得したい箇所があるのですが、
    > それぞれのDataTableに各テーブルの情報を格納後、
    > 結合することは可能でしょうか?
    > (SQLでいうINNER JOINのような動きをしたい)
    
    いろいろな方法があると思いますが、たとえば:
    
    (案1) DataSet の Relation を用いて結合する。
    (案2) Linq を使って処理する。
    (案3) 自前でループ処理。
    
    
    
    案1 の例:
    
    【tbl1】キー: 日付, 額面
      日付    額面   枚数
      -----  -----  ----
      09/03   1000     4
      09/03   5000     3
      09/03  10000     8
    
    【tbl2】キー: 額面
      額面   肖像
      -----  ---------
       1000  野口英世
       2000  紫式部
       5000  樋口一葉
      10000  福澤諭吉
    
    
    tbl1 と tbl2 は、共に同一 DataSet に所属しているとします。
    この場合、
      ds.Relations.Add("TEST", tbl2.Columns("額面"), tbl1.Columns("額面"))
      tbl1.Columns.Add("肖像", GetType(String), "Parent.肖像")
    とすると、tbl1 の内容が、
    
      日付    額面   枚数  肖像
      -----  -----  ----   ---------
      09/03   1000     4   野口英世
      09/03   5000     3   樋口一葉
      09/03  10000     8   福澤諭吉
    
    となります。
記事No.53128 のレス /過去ログ89より / 関連記事表示
削除チェック/

■53138  Re[2]: DataTable同士の結合について
□投稿者/ kz -(2010/09/03(Fri) 17:45:57)
    No53134 (魔界の仮面弁士 さん) に返信
    > ■No53128 (kz さん) に返信
    >>表示処理の際に複数のテーブルの情報を結合して
    >>取得したい箇所があるのですが、
    >>それぞれのDataTableに各テーブルの情報を格納後、
    >>結合することは可能でしょうか?
    >>(SQLでいうINNER JOINのような動きをしたい)
    >
    > いろいろな方法があると思いますが、たとえば:
    >
    > (案1) DataSet の Relation を用いて結合する。
    > (案2) Linq を使って処理する。
    > (案3) 自前でループ処理。
    >
    >
    >
    > 案1 の例:
    >
    > 【tbl1】キー: 日付, 額面
    >   日付 額面 枚数
    >   ----- ----- ----
    >   09/03 1000 4
    >   09/03 5000 3
    >   09/03 10000 8
    >
    > 【tbl2】キー: 額面
    >   額面 肖像
    >   ----- ---------
    >    1000 野口英世
    >    2000 紫式部
    >    5000 樋口一葉
    >   10000 福澤諭吉
    >
    >
    > tbl1 と tbl2 は、共に同一 DataSet に所属しているとします。
    > この場合、
    > ds.Relations.Add("TEST", tbl2.Columns("額面"), tbl1.Columns("額面"))
    > tbl1.Columns.Add("肖像", GetType(String), "Parent.肖像")
    > とすると、tbl1 の内容が、
    >
    >   日付 額面 枚数 肖像
    >   ----- ----- ---- ---------
    >   09/03 1000 4 野口英世
    >   09/03 5000 3 樋口一葉
    >   09/03 10000 8 福澤諭吉
    >
    > となります。

    魔界の仮面弁士様

    案1の方法を用いてサンプルを作成したところ、
    イメージ通りの操作が出来ました。
    ありがとうございました。

    他の方もアドバイスありがとうございました。
記事No.53128 のレス / END /過去ログ89より / 関連記事表示
削除チェック/

■54243  Decimal型の情報落ちについて
□投稿者/ パウ -(2010/10/11(Mon) 17:22:33)

    分類:[.NET 全般] 

    金額計算におけるDecimal型の情報落ちについての質問です。
    例えばdec1が1兆円より桁が大きいか、dec2がもっと小さい値の場合、足し込むと
    情報落ちが発生しますが、そもそもそんなに大きい値は扱うことは少ない、または
    そんなに小さい額は0円と同じだ、という理由などで一般的な金額計算の範囲では
    Decimal型の情報落ちについて考慮しなければいけないほどの誤差は出ない、
    ということでよろしいのでしょうか?
    よろしくお願いします。

    Dim dec1 As Decimal = 1000000000000D ' 1兆円

    Dim dec2 As Decimal = 0.0000000000000001D '0に近いけど0じゃない円

    Dim ans As Decimal = dec1 + dec2
親記事 /過去ログ91より / 関連記事表示
削除チェック/

■54264  Re[3]: Decimal型の情報落ちについて
□投稿者/ ミラ -(2010/10/12(Tue) 12:28:47)
    解決済みですが
    信頼していたDecimalさんについてなので割り込ませてください

    ・提示されているコードについて
    こちらの環境(Framework2.0)で試したところ

    ans = 1000000000000.0000000000000001D

    となりましたがこれの何が問題となっているのか
    パウさんが提示する問題の本質について詳しく教えてください

    ・Decimal型の情報落ちについて
    私の知ってるものは
    Dim dec3 As Decimal = 1
    dec3 = dec3 / 3
    dec3 = dec3 * 3

    dec3 = 0.9999999999999999999999999999D

    これ以外にもDecimal型で注意しなければいけないものってあれば教えてください
記事No.54243 のレス /過去ログ91より / 関連記事表示
削除チェック/

■54267  Re[4]: Decimal型の情報落ちについて
□投稿者/ shu -(2010/10/12(Tue) 13:07:27)
    No54264 (ミラ さん) に返信
    > ・提示されているコードについて
    > こちらの環境(Framework2.0)で試したところ
    >
    > ans = 1000000000000.0000000000000001D
    dec1かdec2の0がたぶん1個足りないのだと思います。
    (パウさんが提示されたコードの方)
    これはDecimalといえども固定byteデータであり有効範囲という
    ものが存在するので、この問題は仕方ないと思います。

    これを避けたいのであれば用意された型ではなくinteger配列を利用した
    多倍長計算が必要になります。

    ただ金額計算で必要とされるのはこんな小さな数字は切り捨てて1兆円として
    答えが出るのを望まれることが多いのではないかと思います。


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

■54900  Expression.Lambda関数のtailCall引数
□投稿者/ ground -(2010/11/09(Tue) 00:22:26)

    分類:[.NET 全般] 

    現在、.NET4のSystem.Linq.Expression名前空間を利用して軽量言語を作成しています。
    その際、末尾再帰最適化を行いたいと考え、tailCall引数をtrueにして試したところ、
    falseの時と同様に、StackOverFlowが発生してしまいました。

    どのようにLambdaExpressionを作ればよいかご教示ください。

    例:
    -- 末尾再帰が最適化されるF#
    let rec add a b = if a <= 0 then b else add (a-1) (b+1);;
    let result = add 1000000 1000000;;

    -- C#で動かないコード
    var a = Expression.Parameter(typeof(int), "a");
    var b = Expression.Parameter(typeof(int), "b");
    var add = Expression.Parameter(typeof(Func<int, int, int>), "add");
    var lambda = Expression.Lambda(
    Expression.Condition(
    Expression.LessThanOrEqual(a, Expression.Constant(0)),
    b,
    Expression.Invoke(add,
    Expression.Subtract(a, Expression.Constant(1)),
    Expression.Add(b, Expression.Constant(1)))),
    true, // ← 末尾再帰を指定
    a, b);
    var provider = Expression.Lambda<Func<Func<int, int, int>>>(
    Expression.Block(new[] { add }, Expression.Assign(add, lambda)));

    var addFunc = provider.Compile().Invoke();
    Console.WriteLine(addFunc(1000000, 1000000)); // StackOverFlowが発生する。
親記事 /過去ログ92より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

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

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

パスワード/

- Child Tree -