ご無沙汰しています。
VC++/CLIで画面系のアプリケーションを開発しています。
時間帯別でスケジュールを作成、管理するようなアプリを作成しているのですが
現在、フォーム上にピクチャーボックスを貼り付けてピクチャーボックスには縦軸に
12:00、13::00~といったように時間軸を記載しているイメージを貼り付けています。
(グリッドの縦軸に時間が表示されているイメージです)
やりたいことは実際の時刻を取得したときにそのピクチャーボックス内のイメージに記
載されている縦軸の時間とリンクのようなことをさせたいのですが考え方が難しいで
す。
例えば取得した時刻が12時だった場合、イメージに記載されている縦軸の12:00の位置
を指せるようにしたいのです。
キーワードは各軸ごとの時間を指す座標位置を構造体か配列に持っておくということが
考えられますがそれをどのように実際の時間とリンクさせたらよいのか方法が分かりま
せん。何かよい方法はないでしょうか?
今回は言語にあまり関係のない考え方の問題になると思いますがお力を貸してくださ
い。
> どのように実際の時間とリンクさせたらよいのか方法が分かりません。
実際の時間って何ですか? 現在時刻のことですか?
「実際の時間とピクチャボックスに貼られたイメージとの対応を取りたい」
のであればピクチャボックスに貼られたイメージに何時から何時までを
表現する情報を付加しておくことになるでしょうけど、その方法がわからないのですか?
アドバイスありがとうございます!
>>実際の時間って何ですか? 現在時刻のことですか?
はい現在時刻のことです。あとコンボボックス(文字列)でも時間が選択できるように
なっています。
>>「実際の時間とピクチャボックスに貼られたイメージとの対応を取りたい」
>>のであればピクチャボックスに貼られたイメージに何時から何時までを
>>表現する情報を付加しておくことになるでしょうけど、その方法がわからないのです
>>か?
まさにここの方法が分かりません。唯一キーになりそうなのが各縦軸のX座標だと思う
のですが・・・。
配列を使用してみて
Time[48]
Time[0] = 37(縦軸のX座標) //12時の位置
Time[1] = 118(縦軸のX座標) //13時の位置
Time[2] = 197(縦軸のX座標) //14時の位置
Time[3] = 277(縦軸のX座標) //15時の位置
のように時間軸ごとに配列を持たすことも考えていますがこれだと情報が不足している
と思われます。
現在時刻を取得しても上記の配列だと比較する要素(現在時刻が12時だったら配列の
Time[0]を指すようなこと)がありません。
その配列が時刻の範囲を持てば、その配列を順に検索することで
対応が付くんじゃないですか?
…何故48なのかは判らないけど。。
Time[時間]とすれば、24となるのでは?
皆様アドバイスありがとうございます!
>>その配列が時刻の範囲を持てば、その配列を順に検索することで
>>対応が付くんじゃないですか?
配列に時刻の範囲を持たせるにはどのように考えたらよいのでしょうか?
>>…何故48なのかは判らないけど。。
>>Time[時間]とすれば、24となるのでは?
表示上は2日分の時間を表示させますので48時間必要なのです。
> 配列に時刻の範囲を持たせるにはどのように考えたらよいのでしょうか?
構造体の配列にすりゃえぇでしょ
struct Item {
int from; // ここから
int to; // ここまで
int pos; // イメージの位置
};
Item table[48];
とかなんとか。
>配列に時刻の範囲を持たせるにはどのように考えたらよいのでしょうか?
「時:分:秒」の「時」の部分だけ持たせればいいと思う
int Time[48];
Time[0] = 37;//(縦軸のX座標) //12時の位置
Time[1] = 118;//(縦軸のX座標) //13時の位置
Time[2] = 197;//(縦軸のX座標) //14時の位置
Time[3] = 277;//(縦軸のX座標) //15時の位置
int i , x;
int hour , day; // 時刻(0~23)、日にち(1or2)
i = 24 * ( day - 1 ) + ( hour - 12 ); // 12は Time[0]に該当する時刻
x = Time[ i ]; // 必要なx軸の値
こんなんどうかな
とりあえず、フォーム上に直接縦軸とかを描画して
その上に現在の時間を差す横線を描画するような
プログラムを作って見てはどうですかねぇ。
どうも仕組みが云々と言うよりも画面に描画する時の
考え方が良く分からないように見えるので
スケージュールとか何とかはとりあえず置いておいて
実際に描画するための方法だけに目を向けてみては
どうでしょうか?
いっぺんに何もかも解決しようとしないで
問題を細分化して一つ一つ解決するようにした方が良いと思いますよ。
単純に縦軸を48等分して時間を当てはめるのでは駄目ですか?
PATIOさんのご意見にもありますが、実際に描画してみないとイメージが沸かないと
思います。
方法はいく通りもあると思います。
今までの他の方々のご意見はその中の1部です。
自分なりの方法を考えるのがいいと思います。
そのためににも、まず固定値でいいので実際に描画してみたらどうでしょうか。
皆様、親切な回答ありがとうございます。
>>とりあえず、フォーム上に直接縦軸とかを描画して
>>その上に現在の時間を差す横線を描画するような
>>プログラムを作って見てはどうですかねぇ
描画のプログラム知識がないので
構造体の配列を用いて試してみます。
public struct time{
int iHour;
int iPos;
};
time* jikan;
jikan = new time[48];
memset(jikan,0x00,sizeof(jikan));
jikan[0].iHour = 12; //12時
jikan[0].iPos = 37; //(縦軸のX座標) //12時の位置
jikan[1].iHour = 13; //13時
jikan[1].iPos = 118; //(縦軸のX座標) //13時の位置
・
・
・
>>int i , x;
>>int hour , day; // 時刻(0~23)、日にち(1or2)
>>i = 24 * ( day - 1 ) + ( hour - 12 ); // 12は Time[0]に該当する時刻
>>x = Time[ i ]; // 必要なx軸の値
rinさんの方法だと構造体の配列ではなく配列だけでいけるのでしょうか?何か他
に良い方法があれば引き続き情報宜しくお願いしますm(--)m
図幅 w
2日間の時間sec 172800s
現在時刻 - 座標の左端時刻 = x秒
posX = w/172800 * x
じゃないの、配列にする意味がわかりません
aさん指摘ありがとうございます。
>>図幅 w
>>2日間の時間sec 172800s
>>現在時刻 - 座標の左端時刻 = x秒
>>posX = w/172800 * x
この場合の図幅とは何を指しますでしょうか?貼り付けてあるイメージの幅でしょう
か?また座標の左端時刻とはこの場合12時ってことでしょうか?