2007年11月27日火曜日

dhtmkxGrid 背景色と表示切り替え

読み込んだデータの内容で色分けする方法


function colorSets(){
var chk;
var col;
for(var y=0;y<mygrid.getRowsNum();y++){
chk = mygrid.cells(mygrid.getRowId(y),2).getValue();
if(chk=="新規"){
col = "Pink";
}else if(chk=="保留"){
col = "Lavender";
}else if(chk=="完了"){
col = "LemonChiffon";
}else if(chk=="受付済"){
col = "#ffb2b2";
}else if(chk=="修正済"){
col = "#ccffcc";
}
for(var i=0;i<=4;i++)
mygrid.cells(mygrid.getRowId(y),i).setBgColor(col);
}
}


セルの特定のカラムを読み取って、内容別にrow毎の色を変更する。

読み込んだデータ別に表示を切り替える方法


var hideids = new Array();
function changeType(){
var chk;
var vitm = $F("changeType");
for(var i=0;i<hideids.length;i++){
mygrid.setRowHidden(hideids[i],false);
}
if(vitm=="全体"){
return;
}
for(var y=0;y<mygrid.getRowsNum();y++){
chk = mygrid.cells(mygrid.getRowId(y),2).getValue();
if(chk!=vitm){
hideids.push(mygrid.getRowId(y));
mygrid.setRowHidden(mygrid.getRowId(y),true);
}
}
}


changeTypeというプルダウンの内容を取得し、
その内容と一致していないrowはidを保持した後(hideids.push部分)、
setRowHiddenを実行し、表示を隠す。
このとき、idを忘れると非表示を復活させられないので、注意が必要。
サンプルでは一度、全rowを表示にしてから比較処理をしている。
こうしないと、全rowを舐めてチェック出来ないからである。
別途、テーブルを持ってれば、こんなことをしなくてもOK。

2007年11月21日水曜日

WindowsMobile 開発メモ(ソフトキー)

ソフトキーの値が判らないので、ヘッダ漁ってみた。
softkey1VK_TSOFT1(VK_F1)0x70
softkey2VK_TSOFT2(VK_F2)0x71
upVK_TUP(VK_UP)0x26
downVK_TDOWN(VK_DOWN)0x28
leftVK_TLEFT(VK_LEFT)0x25
rightVK_TRIGHT(VK_RIGHT)0x27
中心VK_TACTION(VK_RETURN)0x0D
homeVK_THOME(VK_LWIN)0x5B
backVK_TBACK(VK_ESCAPE)0x1B
talkVK_TTALK(VK_F3)0x72
tendVK_TEND(VK_F4)0x73
録音VK_TRECORD(VK_F10)0x79
電源VK_TPOWER(VK_F18)0x81
音量大VK_TVOLUMEUP(VK_F6)0x75
音量小VK_TVOLUMEDOWN(VK_F7)0x76
フリップVK_TFLIP(VK_17)0x80
漢字VK_KANJI0x19


まぁこれはいいとして…。
backキーのイベントが取れないねー。
さっぱりわからん。


public class MsgWindow : MessageWindow
{
const int MOD_ALT = 0x0001;
const int MOD_CONTROL = 0x0002;
const int MOD_SHIFT = 0x0004;
const int MOD_KEYUP = 0x1000;
const int WM_HOTKEY = 0x0312;
const int WM_USER = 0x400;
const int SHCMBM_OVERRIDEKEY = WM_USER + 403;
const int SHCMBM_SETBKCOLOR = WM_USER + 406;
const int SHMBOF_NODEFAULT = 0x00000001;
const int SHMBOF_NOTIFY = 0x00000002;

const int VK_F3 = 0x72;
const int VK_TTALK = VK_F3;
const int VK_TBACK = 0x1B;

const int HOTKEY_ID = 0x0001;

[DllImport("coredll.dll")]
extern static int RegisterHotKey(IntPtr HWnd, int ID, int MOD_KEY, int KEY);

[DllImport("coredll.dll")]
extern static int UnregisterHotKey(IntPtr HWnd, int ID);

[DllImport("coredll.dll", SetLastError = true)]
public static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

[DllImport("aygshell.dll")]
private extern static IntPtr SHFindMenuBar(IntPtr hwnd);

private MainWindow msgform;

private static int HiWord(int number)
{
if ((number & 0x80000000) == 0x80000000)
return (number >> 16);
else
return (number >> 16) & 0xffff;
}

private static int LoWord(int number)
{
return number & 0xffff;
}

private static int MakeLong(int LoWord, int HiWord)
{
return (HiWord << 16) | (LoWord & 0xffff);
}

private static IntPtr MakeLParam(int LoWord, int HiWord)
{
return (IntPtr)((HiWord << 16) | (LoWord & 0xffff));
}

public MsgWindow(MainWindow msgform)
{
this.msgform = msgform;
IntPtr hnwdMB = SHFindMenuBar(msgform.Handle);
int r;

// これも駄目
RegisterHotKey(msgform.Handle, HOTKEY_ID, 0, VK_TBACK);

// これも駄目
SendMessage(SHFindMenuBar(msgform.Handle), SHCMBM_OVERRIDEKEY, (IntPtr)VK_TBACK,
MakeLParam(SHMBOF_NODEFAULT | SHMBOF_NOTIFY,SHMBOF_NODEFAULT | SHMBOF_NOTIFY));

}

protected override void WndProc(ref Message msg)
{
if(msg.Msg== WM_HOTKEY)
{
if ((int)msg.WParam == HOTKEY_ID)
{
}
}
base.WndProc(ref msg);
}
}


X02HTの場合、HardwareButtonは使えないみたいだし、
どうやってフックすりゃいいのでしゃう。
同じ開発をやってるサイトでも判ってないっぽいし、
海外サイト見に行っても上記コードに似たようなものばっか…。

今日はもう諦め。

WM用 (x02ht限定) 2画面ファイラー dlf ver.0.02


右画面



左画面



内蔵ビュアー


今のところ実装は…。

・zip解凍
・拡張子連動
・実行
・名前変更
・コピー
・移動
・内蔵テキストビュアー

vzファイラ→あふ使いなんで、それに近づけたいね。
最近wfっていうのが出てきたから、開発継続しようか迷うな…。

http://enjoi.blogdns.net/up/src/1465.lzh