Safari on iPad has a bug -- does not draw Arabic/Persian scripts right when font tag is in between.
It should look like the bottom but looks like the top, the supposed connected form of the letter appear in an independent form.
Firefox either on the Ubuntu platform or the Windows seems to draw it correctly.
火曜日, 6月 21, 2011
水曜日, 6月 08, 2011
DataGridView: 初期値を指定する
DataGridView を使うと、テーブル形式でデータを扱うことができます。
それぞれのコラムで、値を限定し、ドロップダウンリストで選択できるようにすることもできます。
ただし、この場合には、値に制限がつくことになるので、つねに決められた値を設定してやる必要があります。
つまり、新規にデータを追加する場合など、値を空白とすることはできません。
この際には、データを追加するたびに、初期値を設定してやる必要があります。
なぜかDataTableなどではデフォルト値を設定するメソッドがありません。
イベントをフックし、値を設定してやります。
次に示すコードは、それぞれのコラムの値に適応した初期値を新規作成されたデータに設定するやり方を示したものです。
本来ならば、設定するコラムでそれぞれデフォルト値を設定できるような仕組みになっているべきではあると思います。
それぞれのコラムで、値を限定し、ドロップダウンリストで選択できるようにすることもできます。
ただし、この場合には、値に制限がつくことになるので、つねに決められた値を設定してやる必要があります。
つまり、新規にデータを追加する場合など、値を空白とすることはできません。
この際には、データを追加するたびに、初期値を設定してやる必要があります。
なぜかDataTableなどではデフォルト値を設定するメソッドがありません。
イベントをフックし、値を設定してやります。
次に示すコードは、それぞれのコラムの値に適応した初期値を新規作成されたデータに設定するやり方を示したものです。
private void dataGridView1_CellFormatting(object sender
, DataGridViewCellFormattingEventArgs e)
{
if (e.Value == null)
{
switch (e.ColumnIndex)
{
case 0:
e.Value=dataGridView1.Rows.Count;
break;
case 1:
break;
case 2:
e.Value = "Instant";
break;
case 3:
break;
case 4:
e.Value = "0";
break;
case 5:
e.Value = "0 sec";
break;
}
}
}
本来ならば、設定するコラムでそれぞれデフォルト値を設定できるような仕組みになっているべきではあると思います。
The formality problem: Java and C# -- extended class
Small things get in the way.
The way to write extended classes in Java and C# differs slightly.
Just for the record the following cases depicts the differences.
The extended class -- the case with Java:
The extended class -- the case with C#:
The way to write extended classes in Java and C# differs slightly.
Just for the record the following cases depicts the differences.
The extended class -- the case with Java:
public class NewClassTest
{
class A
{
int i=0;
A(int i)
{
this.i=i;
}
}
class B extends A
{
B()
{
super(1);
}
}
public void test()
{
System.out.println(new B().i);
}
public static void main(String args[])
{
new NewClassTest().test();
}
}
The extended class -- the case with C#:
class Class1
{
protected string value = "to be overwritten";
public Class1(string convert)
{
value = convert;
}
}
class Class2 : Class1
{
public Class2(string additional, string convert)
: base(convert)
{
value = convert + additional;
}
public string value { get; set; }
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Class2 test = new Class2(" additional text", "original text");
label1.Text = test.value;
}
}
土曜日, 6月 04, 2011
C# プログレスバーの色を変える
C#のライブラリでは、プログレスバーの色を変えるメソッドが用意されていません。
そこで、「メモリ容量がいっぱいになりました」的な状態を示すために、プログレスバーの色を緑から赤に変える方法を紹介します。
このように、Win32APIを呼び出す関数を用意して、エラー状態をセットしてやります。
もとの緑色に変更するには、ノーマル状態に戻してやります。
追記: ここで注意せねばならないのは、プログレスバーのバグで、エラー状態を設定した時点では値が変更されません。
エラー状態を設定したら、値の変更を再度行う必要があります。
これはWindowsのバグらしいです。
そこで、「メモリ容量がいっぱいになりました」的な状態を示すために、プログレスバーの色を緑から赤に変える方法を紹介します。
using System.Runtime.InteropServices;
const int WM_USER = 0x400;
const int PBM_SETSTATE = WM_USER + 16;
const int PBM_GETSTATE = WM_USER + 17;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
このように、Win32APIを呼び出す関数を用意して、エラー状態をセットしてやります。
public enum ProgressBarStateEnum : int
{
Normal = 1,
Error = 2,
Paused = 3,
}
public static void SetState(ProgressBar pBar, ProgressBarStateEnum state)
{
SendMessage(pBar.Handle, PBM_SETSTATE, (IntPtr)state, IntPtr.Zero);
}
SetState(progressBar1, ProgressBarStateEnum.Error);
もとの緑色に変更するには、ノーマル状態に戻してやります。
SetState(progressBar1, ProgressBarStateEnum.Normal);
追記: ここで注意せねばならないのは、プログレスバーのバグで、エラー状態を設定した時点では値が変更されません。
エラー状態を設定したら、値の変更を再度行う必要があります。
これはWindowsのバグらしいです。
if (progressBar1.Maximum * .9 < len)
{
progressBar1.Value = 0;
SetState(progressBar1, ProgressBarStateEnum.Normal);
progressBar1.Value = len;
SetState(progressBar1, ProgressBarStateEnum.Error);
}
else
{
progressBar1.Value = len;
SetState(progressBar1, ProgressBarStateEnum.Normal);
}
水曜日, 6月 01, 2011
フォームで、まとめてイベントを管理 AddMessageFilter()
Windows フォームで、まとめてイベントを管理したいとします。
その場でテキストエディターを立ち上げて、文字列を編集するときなど、部品全てについてイベント処理しなければなりません。
テキストエディターで編集して、コンポーネントからフォーカスが外れたとき、イベントを管理する必要があります。
これが意外な難関で、WinProcをオーバーライドしても、このメソッドではイベントが処理されません。個々のコンポーネントで処理しなければなりません。
そこで用意されているのが、ApplicationクラスにあるAddMessageFilter()メソッドです。
Application.AddMessageFilter(new MyMessageFilter())
このような形で、MessageFilter派生クラスを指定してやります。
イベント処理は、MessageFilterクラスのPreFilterMessage()メソッドで行います。
ここで、WM_NCLBUTTONDBLCLK 、WM_NCLBUTTONDOWN はタイトルバーでのイベントで、WM_LBUTTONDOWNはクライアントエリアで発生するイベントを指します。
こんな感じです。
その場でテキストエディターを立ち上げて、文字列を編集するときなど、部品全てについてイベント処理しなければなりません。
テキストエディターで編集して、コンポーネントからフォーカスが外れたとき、イベントを管理する必要があります。
これが意外な難関で、WinProcをオーバーライドしても、このメソッドではイベントが処理されません。個々のコンポーネントで処理しなければなりません。
そこで用意されているのが、ApplicationクラスにあるAddMessageFilter()メソッドです。
Application.AddMessageFilter(new MyMessageFilter())
このような形で、MessageFilter派生クラスを指定してやります。
イベント処理は、MessageFilterクラスのPreFilterMessage()メソッドで行います。
ここで、WM_NCLBUTTONDBLCLK 、WM_NCLBUTTONDOWN はタイトルバーでのイベントで、WM_LBUTTONDOWNはクライアントエリアで発生するイベントを指します。
こんな感じです。
private const int WM_LBUTTONDOWN = 0x201;
private const int WM_NCLBUTTONDBLCLK = 0x00A3;
private const int WM_NCLBUTTONDOWN = 0x00A1;
public bool PreFilterMessage(ref Message msg)
{
switch (msg.Msg)
{
case WM_NCLBUTTONDBLCLK:
case WM_NCLBUTTONDOWN:
case WM_LBUTTONDOWN:
{
int lparam = (int)msg.LParam;
int x = lparam & 0xffff;
int y = lparam >> 16;
Simulator simulator = (Simulator)sender;
Point pos = simulator.RichTextBox1.PointToClient(new Point(x, y));
Rectangle rect = new Rectangle(0, 0, simulator.RichTextBox1.Bounds.Width
, simulator.RichTextBox1.Bounds.Height + SystemInformation.HorizontalScrollBarThumbWidth);
if (!rect.Contains(pos))
{
simulator.focusOff();
}
}
break;
}
return false;
}
日曜日, 5月 22, 2011
C# クラスのAPIレファレンスの自動生成
C#には、自動的にクラスのAPIレファレンスを作成する機能があります。
Visual Studioでは、プロジェクトのプロパティでXMLファイルを出力できます。
あとはSandcastle Help File Builderなどを使ってレファレンスの形にします。
Visual Studioでは、プロジェクトのプロパティでXMLファイルを出力できます。
あとはSandcastle Help File Builderなどを使ってレファレンスの形にします。
土曜日, 5月 07, 2011
C#の、プリンタの状態を示すクラス
C#では、プリンタの状態を示すクラスがあって便利です。
プリンタサーバーを指定するクラス PrintServer 、プリンタキューのリストを返すクラス PrintQueueCollection が準備されています。
プリンタキューからジョブリストを得るメソッド GetPrintJobInfoCollection もあります。
プリンタサーバーを指定するクラス PrintServer 、プリンタキューのリストを返すクラス PrintQueueCollection が準備されています。
プリンタキューからジョブリストを得るメソッド GetPrintJobInfoCollection もあります。
LocalPrintServer myPrintServer = new LocalPrintServer();
PrintQueueCollection myPrintQueues = myPrintServer.GetPrintQueues();
string jobList = "";
foreach (PrintQueue pq in myPrintQueues)
{
if (!pq.IsWaiting)
{
PrintJobInfoCollection jobs = pq.GetPrintJobInfoCollection();
foreach (PrintSystemJobInfo job in jobs)
{
jobList = jobList + "Job: " + job.JobName + " ID: " + job.JobIdentifier+"\n";
}
}
}
土曜日, 4月 09, 2011
C#の多次元配列
C#では、配列の宣言がJavaと異なります。
角カッコが、型のほうにつく。
(C#)
string[] nameList={"Ann","Chris","Freda","Darlene","Toni"};
こんな感じです。
これがJavaだと、変数名のほうにつきます。
(Java)
String list[]={"Brad","Alfie","Chris"};
こんなことでも、結構ストレスになるものです。
C#では、多次元配列がさらに特殊な形をとります。
(C#)
int[,] intList = { { 1, 2 }, { 3, 4 } };
あれ、というような意外感があるように思います。
さらに、Javaのように宣言する配列は、C#ではjagged配列という、また別なデータ構造を意味します。
これは、配列の配列という位置づけで、それぞれの配列の要素に、任意の配列を指定できます。
逆に言うと、それぞれの配列の要素に配列を指定しなければなりません。
(C#)
int[][] jaggedList =new int[2][];
jaggedList[0] = new int[2];
jaggedList[1] = new int[3];
注意が必要です。
角カッコが、型のほうにつく。
(C#)
string[] nameList={"Ann","Chris","Freda","Darlene","Toni"};
こんな感じです。
これがJavaだと、変数名のほうにつきます。
(Java)
String list[]={"Brad","Alfie","Chris"};
こんなことでも、結構ストレスになるものです。
C#では、多次元配列がさらに特殊な形をとります。
(C#)
int[,] intList = { { 1, 2 }, { 3, 4 } };
あれ、というような意外感があるように思います。
さらに、Javaのように宣言する配列は、C#ではjagged配列という、また別なデータ構造を意味します。
これは、配列の配列という位置づけで、それぞれの配列の要素に、任意の配列を指定できます。
逆に言うと、それぞれの配列の要素に配列を指定しなければなりません。
(C#)
int[][] jaggedList =new int[2][];
jaggedList[0] = new int[2];
jaggedList[1] = new int[3];
注意が必要です。
土曜日, 4月 02, 2011
仕事でC#を使うことに。
C#は、Javaもどきとしか認識しておりませんでしたが、なんといってもマイクロソフトのVisual Studioつき。
IDEが完備しているのは強い。情報もある、といえるでしょう。
使いやすい。
イベントの処理の方法など、VC・C++などと同様に扱えます。
無意味な数値を極力使わないJava系のよさも引き継いています
リソースに「番号」を振り分ける悪趣味は、ここにはない。
コンポーネントに追加した順番ですべてが決まります。
--
Eclipse と比較すると、ヘルプやサンプルコードにすぐにアクセス出来ない、遠い感じがします。
情報はすべからくHTML形式にして、ネットに置いて欲しいものです。
IDEが完備しているのは強い。情報もある、といえるでしょう。
使いやすい。
イベントの処理の方法など、VC・C++などと同様に扱えます。
無意味な数値を極力使わないJava系のよさも引き継いています
リソースに「番号」を振り分ける悪趣味は、ここにはない。
コンポーネントに追加した順番ですべてが決まります。
--
Eclipse と比較すると、ヘルプやサンプルコードにすぐにアクセス出来ない、遠い感じがします。
情報はすべからくHTML形式にして、ネットに置いて欲しいものです。
水曜日, 12月 29, 2010
電子書籍:世界標準、日本語も対応 EPUB縦書き可能に
電子書籍のEPUBが日本語に正式対応するという。
来年5月に完成予定のEPUB3.0は縦書きや句読点の禁則処理、ルビ表記などに対応するという。
電子書籍市場は爆発的な伸びを見せており、2010年は前年度比3倍超という試算があるという。
→ 電子書籍:世界標準、日本語も対応 EPUB縦書き可能に (2010-12-29)
来年5月に完成予定のEPUB3.0は縦書きや句読点の禁則処理、ルビ表記などに対応するという。
電子書籍市場は爆発的な伸びを見せており、2010年は前年度比3倍超という試算があるという。
→ 電子書籍:世界標準、日本語も対応 EPUB縦書き可能に (2010-12-29)
水曜日, 12月 01, 2010
水曜日, 10月 27, 2010
世界一安全な日本ドメイン
米マカフィーの「危険なウエブサイトの世界分布2010」によると、日本(.jp)ドメインは危険度0.1%と2年連続で最も安全な国別ドメインとなったという。
→ 最も危険な国別ドメインはベトナム マカフィー調査 (2010-10-27)
→ 最も危険な国別ドメインはベトナム マカフィー調査 (2010-10-27)
金曜日, 10月 22, 2010
Amazon.comのQ3決算、39%増収で16%増益
米アマゾン社は21日、同年代3四半期の決算を前年同期比39%増と発表したという。
→ Amazon.comのQ3決算、39%増収で16%増益 (2010-10-22)
フランスのFNACでも電子ブックを売っているようです。
→ E-book : La Fnac attaque Amazon avec sa liseuse FnacBook
全世界的な現象ですね。
→ Amazon.comのQ3決算、39%増収で16%増益 (2010-10-22)
フランスのFNACでも電子ブックを売っているようです。
→ E-book : La Fnac attaque Amazon avec sa liseuse FnacBook
全世界的な現象ですね。
月曜日, 10月 04, 2010
Firefoxをもっと便利にする10のテクニック
Firefox のショートカットやツールバー、アイコンについての記事をマイコミジャーナルで発見しました。
ちょうどこんなのが欲しかった 的な工夫が満載です。
ちょうどこんなのが欲しかった 的な工夫が満載です。
http://journal.mycom.co.jp/articles/2010/10/04/firefox-useful-10-tips/index.html
日曜日, 5月 09, 2010
ほぼ全社がグーグル電子書籍承認 印刷本から急速シフト
グーグルは9日、共同通信との取材で、同社が6月下旬に予定している電子書籍の販売に、米国のほぼ出版社ほぼ全社が参加していると述べたという。
→ ほぼ全社がグーグル電子書籍承認 印刷本から急速シフト (2010-5-10)
→ 【出版】iPad登場で電子書籍、価格上昇の怪 (2010-5-6)
→ グーグル独占に懸念も 米国の電子書籍市場 (2010-5-10)
アマゾン・ドット・コムの Kindle や、アップル社の iPad ですね、まったくすばらしいです。
一瞬にして本がダウンロードできる。電源をオンにすると自動的に今日の新聞がダウンロードされる。レイアウトなんてのもばっちりです。タブレットってのもいいものです。
iPad なんかだと、極めて自然な動作で、ページが見事にめくれます。動作をためらうと、それなりにページがふわっと止まってくれるわけです。これがやみつきになる。
もちろん、何冊でもメモリの許す限り保有することができます。多くの本を手元に所有する安心感。さらに、ポテンシャルとして可能な限りの本を所有することの出来る期待感。
読みながら辞書が引けるということもあります。
早いところ、日本の書籍が読みたいと切に思います。
→ ほぼ全社がグーグル電子書籍承認 印刷本から急速シフト (2010-5-10)
→ 【出版】iPad登場で電子書籍、価格上昇の怪 (2010-5-6)
→ グーグル独占に懸念も 米国の電子書籍市場 (2010-5-10)
アマゾン・ドット・コムの Kindle や、アップル社の iPad ですね、まったくすばらしいです。
一瞬にして本がダウンロードできる。電源をオンにすると自動的に今日の新聞がダウンロードされる。レイアウトなんてのもばっちりです。タブレットってのもいいものです。
iPad なんかだと、極めて自然な動作で、ページが見事にめくれます。動作をためらうと、それなりにページがふわっと止まってくれるわけです。これがやみつきになる。
もちろん、何冊でもメモリの許す限り保有することができます。多くの本を手元に所有する安心感。さらに、ポテンシャルとして可能な限りの本を所有することの出来る期待感。
読みながら辞書が引けるということもあります。
早いところ、日本の書籍が読みたいと切に思います。
水曜日, 5月 05, 2010
火曜日, 5月 04, 2010
米アップルの「iPad」販売が100万台突破、電子書籍150万冊
米アップル社は3日、iPad の販売台数が先月30日まで100万台に達したと発表したという。
→ 米アップルの「iPad」販売が100万台突破、電子書籍150万冊 (2010-5-4)
電子書籍のダウンロード数も圧倒的です。
日本の電子書籍のコンソーシアムはいったいどうなっているんでしょうか。
→ 米アップルの「iPad」販売が100万台突破、電子書籍150万冊 (2010-5-4)
電子書籍のダウンロード数も圧倒的です。
日本の電子書籍のコンソーシアムはいったいどうなっているんでしょうか。
水曜日, 4月 14, 2010
金曜日, 4月 02, 2010
グーグル社名変更など IT関連企業各社のエープリルフール
恒例のエイプリル・フールの面白ネタをいくつか。
* グーグルが社名をトピカに変更
これって、カンザス州の州都トピカが、3月限定で市名を「グーグル」に変更したことへの返礼とかいうことです。べつに企業城下町ということではなくて、グーグル社に光ファイバー網をひいてほしいという要請の一環とのことです。
* ヤフーのトップ画面が3D
これは本当に画面が用意してあって、アメコミ風のSilverlightでなんちゃってページが置いてありました。広告にカーソルを当てると飛び出てくる趣向で、悪くないアイデアといえるでしょう。
* ユーチューブが動画のテキスト版配信を開始
これは完全にありえないやつで、バンド幅が節約できるとの触れ込みつき。
→ グーグル社名変更など IT関連企業各社のエープリルフール (2010-4-2)
→ カンザス州都は「グーグル市」、過去には「トピカチュウ」も (2010-4-2)
→ グーグルの「エープリルフール」不発 (2010-4-2)
* グーグルが社名をトピカに変更
これって、カンザス州の州都トピカが、3月限定で市名を「グーグル」に変更したことへの返礼とかいうことです。べつに企業城下町ということではなくて、グーグル社に光ファイバー網をひいてほしいという要請の一環とのことです。
* ヤフーのトップ画面が3D
これは本当に画面が用意してあって、アメコミ風のSilverlightでなんちゃってページが置いてありました。広告にカーソルを当てると飛び出てくる趣向で、悪くないアイデアといえるでしょう。
* ユーチューブが動画のテキスト版配信を開始
これは完全にありえないやつで、バンド幅が節約できるとの触れ込みつき。
→ グーグル社名変更など IT関連企業各社のエープリルフール (2010-4-2)
→ カンザス州都は「グーグル市」、過去には「トピカチュウ」も (2010-4-2)
→ グーグルの「エープリルフール」不発 (2010-4-2)
土曜日, 2月 27, 2010
登録:
投稿 (Atom)
Flask の Blueprint のテンプレート問題
Flask の Blueprint は、ルート、静的ファイル、テンプレートをまとめて管理できます。しかし、テンプレートが指定できません。 ここでは、Blueprint の template_folder の問題点と回避策を説明します。 Blueprint のテンプレート問題...
-
コンデンサマイク 極性があります コンデンサマイクがようやく届きました。モジュールではないのでそのままでは信号が弱いので使えません。信号を増幅する必要があります。 ちょっとした手間ですが、首尾よく動いてくれました。この回路の応用で、使えるマイクが出来ます。 ...
-
Qt はまってます。Mac でも書いたアプリがコンパイルできて、しっかり動くのを確認しました。このあいだ Chitubox が Qt 使ってるのを知ってうれしかったです。 Mac でもそのまま動くんですが、アプリのアイコンの設定はプラットフォーム依存です。 公式マニュアルでも設定...
-
今日ホール素子が届きました。 ホール素子ってのは ホール効果 を利用して磁場を感知するセンサーです。 iPad のケースとか、閉じると電源が切れてくれますよね。ケースのカバーの磁石の磁場をホール素子が感知してるわけです。 さっそくホール素子を使ってみよう!電圧...


