[DllImport("winmm.dll", EntryPoint="mciSendString")]
public extern static System.Int32 mciSendStringA(
string lpstrCommand, string lpstrReturnString,
int uReturnLength, int hwndCallback);
private void button2_Click(object sender, System.EventArgs e)
{
string FileName =
@"C:\madonna.mp3";
mciSendStringA("open \""+FileName+"\"", null, 0, 0);
mciSendStringA("Play \""+FileName+"\"", null, 0, 0);
VCL.Netならuses MMSystem;でおわる。 いちいち 定義をインポートする必要なし。
Delphi2006 C++ つくので のりかえ検討しましょう。
ちゃんちゃん
[DllImport("winmm.dll", EntryPoint="mciSendString")]
public extern static System.Int32 mciSendStringA(
string lpstrCommand, string lpstrReturnString,
int uReturnLength, int hwndCallback);
private void button2_Click(object sender, System.EventArgs e)
{
string FileName =
@"C:\madonna.mp3";
mciSendStringA("open \""+FileName+"\"", null, 0, 0);
mciSendStringA("Play \""+FileName+"\"", null, 0, 0);
VCL.Netならuses MMSystem;でおわる。 いちいち 定義をインポートする必要なし。
Delphi2006 C++ つくので のりかえ検討しましょう。
ちゃんちゃん
[DllImport("winmm.dll", EntryPoint="mciSendString")]
public extern static System.Int32 mciSendStringA(
string lpstrCommand, string lpstrReturnString,
int uReturnLength, int hwndCallback);
private void button2_Click(object sender, System.EventArgs e)
{
string FileName =
@"C:\madonna.mp3";
mciSendStringA("open \""+FileName+"\"", null, 0, 0);
mciSendStringA("Play \""+FileName+"\"", null, 0, 0);
VCL.Netならuses MMSystem;でおわる。 いちいち 定義をインポートする必要なし。
Delphi2006 C++ つくので のりかえ検討しましょう。
ちゃんちゃん
955 :
936:2005/07/01(金) 16:28:29
>>952 再生されましたヾ(*´∀`*)ノありがとうございます。
よーく見て勉強しようと思います。
DelphiやC++も検討しようかと思います。ありがとう。
mciSendText(コマンド);でうごきます。
mciSendTextの名前は好きな名前に変えてください。
stausの時は、戻り値に入ります。
こんな感じです。
textBox1.Text = ciSendText("Status \""+FileName+"\" mode");
訂正のコード載せておきます。
// using System.Text; // を追加します。
//
[DllImport("winmm.dll", EntryPoint="mciSendString")]
public extern static System.Int32 mciSendStringA(
string lpstrCommand,
System.Text.StringBuilder lpstrReturnString,
int uReturnLength, int hwndCallback);
public string mciSendText(string lpstrCommand)
{
StringBuilder buf = new StringBuilder(500); // サイズは適当に決めて下さい
mciSendStringA(lpstrCommand, buf ,buf.Capacity ,0);
return buf.ToString();
}
ハンドルにintを使うなと言うに。
EntryPointと定義する関数名が逆。
その.NETらしからぬネーミングどうにかなんない?
>>955 それから
[DllImport("winmm.dll", EntryPoint="mciSendString")]
を
[DllImport("winmm.dll")]
にしてください。
961 :
936:2005/07/02(土) 21:53:26
>>956-960 たくさんのアドバイスありがとうございます。
皆さんのアドバイスを参考にいろいろいじって勉強しようと思います。
今まではC++を使おうかと思ったのですが、MFCやらC++.NETやらAPIやらややこしそうだったので
C#に決めたのですが、今度は型の変換がややこしいということですね。
その辺も、アプリを作りながら考えようかと思います。
どうもありがとうございました。
963 :
936:2005/07/03(日) 20:25:44
>>962 とってもすてきなサイトをどうもありがとうございます。
すごく参考になりました。
Win32APIを使う際に、C#用に型変換しなくちゃいけないのは面倒だなと思っていたところなので
とっても助かります。
Win32API使う際にはぜひ活用しようと思います。
ありがとうございました。
964 :
デフォルトの名無しさん:2005/07/04(月) 08:36:43
指定時刻に、メッセージボックスが表示されるようにしようと思うのですが
タイマーのコンポーネントを使って、1秒ごとに、アラーム時刻と現在時刻を比較して一致したら
メッセージボックスを表示という仕組みにしようかなと思いついたのですが
それだと、タイマーと現在時刻の同期がとれるのかという疑問がわいてきました。
C#でアラーム機能を盛り込むのに、もっとスマートな方法はないでしょうか。
タイマーのように、アラームのコンポーネントがあれば楽でいいのですが。
何か他にスマートな方法があれば助言いただけるとうれしいです。
965 :
964:2005/07/04(月) 08:54:41
設定時刻を秒に変えて、タイマーにする方法を思いつきました。
とりあえずこの方法でやってみようと思います。
他にもっと簡単な方法があれば助言いただけるとうれしいです。
966 :
964:2005/07/04(月) 09:23:00
やっぱり単純にタイマーで日付時刻を比較する方法にしようと思います。
簡単なコードで確認したところ、システム時計と、.NETのタイマーコンポーネントとは
ちゃんと同期がとれているようです。
どうもお騒がせしました。
967 :
デフォルトの名無しさん:2005/07/04(月) 17:16:49
日付を選択できるDateTimePickerというコンポーネントがありますが
日付と時刻を選択できるコンポーネントってないでしょうか。
もしあれば教えてください。
なければテキストボックスとラベルの組み合わせを使うことにします、
DateTimePicker
969 :
967:2005/07/04(月) 17:58:59
>>968 回答ありがとうございます。
どこか設定をいじったらDateTimePickerに時刻が現れるのかと思っていろいろ
いじってみましたが見つかりませんでした。
日付と時刻を同時に設定できるようなコンポーネントがあったらうれしいのですが。
日付しか扱えなかったらDate"Time"Pickerの名前に反するじゃないかw
FormatプロパティとCustomFormatプロパティを使う。
DateTimePicker
972 :
967:2005/07/04(月) 20:55:43
>>970-971 ご指摘のプロパティをいじったら時刻が表示されました。
どうもありがとう。CustomFormatプロパティとか調べていろいろいじってみようと
思います。
973 :
デフォルトの名無しさん:2005/07/06(水) 16:51:11
DateTime構造体を初期化するにはどのように書けばいいのでしょうか。
参考書で自作クラスのフィールドの各メンバ変数を初期化するというところで躓いてます。
参考書では
using System;
public class AlarmData //自作のAlarmDataクラスです。
{
private DateTime date;
private string title;
public AlarmData()
{
this.date = DateTime(0); //この部分でエラーが出ます。
this.title = "";
}
}
このように記述されていますが、これをビルドすると
'System.DateTime' は 'クラス' を意味しますが、このコンテキストでは無効です。
と、出力されます
グーグルで「DateTime 初期化 C#」とか「DateTime(0) 初期化 C#」とか「DateTime構造体 初期化」とか
入れて調べてみましたが、DateTime構造体を0に初期化する方法はわかりませんでした。
こういう場合、どのように記述すればDateTime構造体が初期化されるのでしょうか。
new
DateTime.〜
976 :
973:2005/07/06(水) 17:04:36
>>974 this.date = new DateTime();
と書いたらビルド成功しました。ありがとうございます。
this.date = DateTime.Parse("");
と書いてみたこともあったのですが、ビルド成功しますが。はたしてこれが初期化の記述であるのか自信がありませんでした。
ParseはstringをDateTimeに変換する関数ですが、これを使って初期化したことになるのかという疑問がわいてきたんです。
>>975 アドバイスありがとうございます。
DateTime構造体のなんらかのメソッドを使って初期化する方法もあるよということでしょうか。
だとすると、上でかいたParseを使った方法でも初期化したことになるのでしょうか。
初期化というのが微妙な表現だ。
構造体は値型なんだから、値を持ってるということが事実。それがどんなものに因るにせよ。
978 :
973:2005/07/06(水) 17:27:44
>>977 AlarmDataコンストラクタでフィールドを初期化するというところなので、初期化という表現を
使ったのですが、DateTime構造体の場合どう書けばいいのかと困ってしまいました。
とにかく、this.date = new DateTime(); でやってみようと思います。
これで何か問題があれば
>値を持ってるということが事実
ということろを参考に、何か適当に値を入れてやってみようと思います。
>>976 > this.date = DateTime.Parse("");
これって成功するの?
例外吐くような気がするけど。
980 :
973:2005/07/06(水) 18:59:49
>>979 ビルドは成功しました。
実行してアプリを動かしてみても例外をはいたりはしてません。
が、おそらくそのコードは間違ってるのでしょうね。
981 :
979:2005/07/06(水) 19:04:47
982 :
973:2005/07/06(水) 19:14:19
>>981 情報ありがとうございます。
new使って今コード書いてます。たぶんこれでいけるような気がします。
どうもありがとう。
プロパティグリッドの各プロパティ表示ON/OFFの切り替えって
属性を直接書き換えないとできないのですか?
動的にbrowsable属性を切り替える感じです。
元クラスを書き換えたり継承したりはできない状況なのです。
984 :
デフォルトの名無しさん:2005/07/07(木) 13:38:58
トレイアイコンを状態によって切り替えるために以下のようなソースを作ってみましたが、
アイコンのリソースの設定をどうやったらいいか分かりません。
ヒントをいただけませんか?
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(TrayControllerForm));
if(~)
{
notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon1")));
}
else
{
notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon2")));
}
985 :
984:2005/07/07(木) 15:24:10
>984
自己レスです。
アイコンをEXEに埋め込む場合は、
RESXGEN.EXEでアイコンのイメージを.resx形式に変換して
埋め込むらしい。。。
986 :
デフォルトの名無しさん:2005/07/07(木) 15:32:46
DateTimePicker
987 :
898:2005/07/07(木) 16:02:12
印刷プロパティのフリーのクラスライブラリー無いの?
988 :
Form1.cs:2005/07/08(金) 07:49:20
using System.Collections;
public class Form1 : System.Windows.Forms.Form
{
private AlarmList report;
public Form1()
{
this.report = new AlarmList();
}
private void button1_Click(object sender, System.EventArgs e)
{
string title = textBox1.Text;
this.report.Add(title);
UpdateListBox();
}
//リストボックスを更新するメソッド
private void UpdateListBox()
{
ArrayList items = this.report.GetItems();
IEnumerator it = items.GetEnumerator();
listBox1.Items.Clear();
while(it.MoveNext())
{
AlarmData item = (AlarmData)(it.Current);
listBox1.Items.Add(item.ToString()); //.ToString()がないとListBoxに文字列が表示されない
}
}
}
989 :
AlarmList.cs AlarmDataクラスを自作:2005/07/08(金) 07:50:15
namespace AddList
{
using System;
using System.Collections;
public class AlarmData
{
private string title;
public AlarmData()
{
this.title = "";
}
public AlarmData(string title)
{
this.title = title;
}
//リストボックスに表示する用に文字列を整えるメソッド
public string ToString()
{
string moji;
moji = String.Format("{0}", title);
return moji;
}
}
990 :
AlarmList.cs AlarmListクラスを自作:2005/07/08(金) 07:50:48
public class AlarmList
{
private ArrayList items;
public AlarmList()
{
this.items = new ArrayList();
}
public void Add(string title)
{
AlarmData item = new AlarmData(title);
this.items.Add(item);
}
public void Add(AlarmData item)
{
this.items.Add(item);
}
public ArrayList GetItems()
{
return this.items;
}
}
}
991 :
988:2005/07/08(金) 07:55:22
>>988の
listBox1.Items.Add(item.ToString()); の部分を
listBox1.Items.Add(item);
にして、リストボックスにテキストボックスに入力した文字列を表示させたいのですが
listBox1.Items.Add(item); と書くとリストボックスに
AlarmList.AlarmData
と表示されてしまいます。
listBox1.Items.Add(item); と書いてリストボックスに文字列を表示させるにはどうすれば
いいのかで悩んでます。
同じコードを前にC++で書いたことがあるのですが、そのときはlistBox1.Items.Add(item);
と書いてもちゃんと文字列が表示されました。
なのでC#のなんらかの原因があるのかと思うのですが、何か助言いただけるとうれしいです。
992 :
988:2005/07/08(金) 08:04:04
なんで listBox1.Items.Add(item); にしたいかというと
後々、リストボックスから一行を削除するのに
this.report.Remove(item);
と書いて、削除しようとするとアプリが固まってしまうからです。
listBox1.Items.Add(item) にすると固まらずに一行を削除可能なのですが
そうすると今度は、リストボックスに表示されるはずの文字列の代わりにAlarmList.AlarmData
という文字列が表示されてしまうので困ってます。
このコード、コンパイル時に警告が出ているはずだが。
994 :
988:2005/07/08(金) 08:21:10
>>993 こちらでは、ちゃんとビルド成功しますし、アプリの実行もできてるのですが。
投稿するために極力けずりましたが、けずったものでもちゃんとビルド成功してますけどなんでだろう。
警告とエラーは別物なんだが
996 :
988:2005/07/08(金) 08:33:30
>>995 アドバイスありがとうございます。
出力ウィンドウをよく見てみたら
ビルドの完了 -- エラー 0、警告 1
とありました。
'AddList.AlarmData.ToString()' は継承されたメンバ 'object.ToString() を隠します。
現在のメンバでそのインプリメンテーションをオーバーライドするには、override キーワードを追加してください。
オーバーライドしない場合は、new キーワードを追加してください。
と出ます。
しかし、listBox1.Items.Add(item.ToString()); とToStringをつけると警告が消えます。
ここに何かヒントがあるのでしょうか。
ちょっとAlarmData.ToString()をいじってみようかと思います。
997 :
988:2005/07/08(金) 08:38:25
>>995 解決しました。
public override string ToString()
{
}
にしたところ、 listBox1.Items.Add(item) でちゃんと文字列が表示されました。
どうもありがとうございました。大変たすかりました。
結局問題の本質は理解しないというかしようとしないんだろうな……。
999 :
988:2005/07/08(金) 08:49:49
>>998 'AddList.AlarmData.ToString()' は継承されたメンバ 'object.ToString() を隠します。
現在のメンバでそのインプリメンテーションをオーバーライドするには、override キーワードを追加してください。
オーバーライドしない場合は、new キーワードを追加してください。
の意味が残念ながらわかりません。
ご指摘のとおり、なんか知らないけどoverrideつけたら解決したよという段階にすぎません。
プログラミングの習得にかなりの時間使っちゃったので、今はもうとにかく動くものを作ろうという決意のもとやってます。
結局、ご指摘の問題の本質は理解できてませんが、時間があいたらその件はじっくり考えようと思います。
今、自分なりに考えた解釈は
クラスの設計時に、ToStringというメソッドを作ると、オブジェクトをToStringの返す文字列に整形してくれるんだけど
それにはoverrideって書かないとやってあげないよっていう意味かなとしか解釈できません。
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。