HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0518
ぺろリストビューの文字列中央揃え4解決


ぺろ

リンク

2016/5/18(Wed) 23:00:59|NO.75519

リストビューの文字の中央揃えとフォントの指定について分からないので質問させて下さい。
テキストの中央揃えはLVCFMT_CENTERを指定してやると中央になると分かったのですが
指定の仕方が分かりません。
できればフォントの変更もできたらいいなと思ってます。
自分でいろいろ付け加えたり消したりしましたが断念しました。
よろしくお願いします。



color 100,100,100 : boxf : color pos 0, 130 : objsize 480,320 make_listview listheight :id_list = stat column_name = "素材1", "素材2","素材3" repeat 3 add_column3 id_list, column_name(cnt), cnt loop item_name = "2016年12月25日","","テキスト1テキスト1テキスト1テキスト1" add_item id_list, item_name item_name = "2016年11月15日","","テキスト2テキスト2テキスト2" add_item id_list, item_name item_name = "2016年8月12日","","テキスト3テキスト3テキスト3テキスト3テキスト3テキスト3" add_item id_list, item_name #module mod_listview #include "hscallbk.as" #uselib "" #func sort_items "" int, int, int #define LVM_SETITEM $00001006 #define LVM_INSERTITEM $00001007 #define LVM_INSERTCOLUMN $0000101B #define LVM_SORTITEMSEX $00001051 #define LVM_GETITEMTEXTA $0000102D #define LVS_REPORT $00000001 #define WS_EX_NOPARENTNOTIFY $00000004 #define WS_VISIBLE $10000000 #define WS_CHILD $40000000 #define LVM_SETIMAGELIST 0x1003 #define LVSIL_NORMAL 0x0000 #define LVSIL_SMALL 0x0001 #deffunc make_listview int objheight if vartype(proc) != vartype("callback") : gosub *init winobj "SysListView32", "ListView", WS_EX_NOPARENTNOTIFY, WS_VISIBLE | WS_CHILD | LVS_REPORT, -1, -1 newObjID = stat sendmsg objinfo_hwnd(newObjID), LVM_SETIMAGELIST, LVSIL_SMALL;, hSmallImgList return stat *init setcallbk proc, sort_items, *sort_flag sdim name, 64, 2 dim lvcolumn, 8 dim lvitem, 6 lvcolumn.0 = 0x000F lvcolumn.2 = 2 lvitem.0 = 0x0001 lvitem.6 = 64 return #deffunc add_column3 int id_list, str column_name, int index if(index < 0 | id_list < 0) { logmes "パラメータが不正です。" return -1 } counter=counter+1 if counter = 1 : lvcolumn.2 = 120 if counter = 2 : lvcolumn.2 = 80 if counter = 3 : lvcolumn.2 = 350 if counter = 4 : lvcolumn.2 = 60 if counter = 5 : lvcolumn.2 = 60 if counter = 6 : lvcolumn.2 = 80: counter=0 name = column_name lvcolumn.3 = varptr(name) sendmsg objinfo_hwnd(id_list), LVM_INSERTCOLUMN, index, varptr(lvcolumn) return stat #deffunc add_item int id_list, array item, int index if(index < 0 | id_list < 0) { logmes "パラメータが不正です。" return -1 } if vartype(item) != vartype("str") { logmes "配列変数の型が不正です。文字列型の変数を渡してください。" return -1 } // アイテムの作成 lvitem.1 = index lvitem.2 = 0 lvitem.5 = varptr(item) sendmsg objinfo_hwnd(id_list), LVM_INSERTITEM, 0, varptr(lvitem) // サブアイテムの作成 repeat length(item) - 1, 1 lvitem.2 = cnt lvitem.5 = varptr(item(cnt)) sendmsg objinfo_hwnd(id_list), LVM_SETITEM, 0, varptr(lvitem) loop return stat #deffunc sort int id_list, int column, int vtype, int sortmode if(column < 0 | id_list < 0 | vtype < 0) { logmes "パラメータが不正です。" return -1 } lvitem.2 = column var_type = vtype sendmsg objinfo_hwnd(id_list), LVM_SORTITEMSEX, sortmode, varptr(proc) return #defcfunc local compareAsInt int id_list, int index1, int index2, int sortmode gosub *startCompare return int(name(sortmode & 1)) - int(name((sortmode & 1) ^ 1)) #defcfunc local compareAsStr int id_list, int index1, int index2, int sortmode gosub *startCompare return name(sortmode & 1) ! name((sortmode & 1) ^ 1) return *startCompare lvitem.5 = varptr(name(0)) sendmsg objinfo_hwnd(id_list), LVM_GETITEMTEXTA, index1, varptr(lvitem) lvitem.5 = varptr(name(1)) sendmsg objinfo_hwnd(id_list), LVM_GETITEMTEXTA, index2, varptr(lvitem) return // サブアイテム(ファイルサイズ)でソート // 第3引数が0なら昇順、1なら降順 *sort_flag if var_type == vartype("int") { return compareAsInt@mod_listview(id_list, callbkarg(0), callbkarg(1), callbkarg(2)) } else : if var_type == vartype("str") { return compareAsStr@mod_listview(id_list, callbkarg(0), callbkarg(1), callbkarg(2)) } return 0 #global // end of mod_listview #module ;============= リストビュー操作モジュール =============== #uselib "comctl32.dll" #func InitCommonControlsEx "InitCommonControlsEx" int ; 各種定数定義 #define ICC_LISTVIEW_CLASSES 4 #define WS_CHILD 0x40000000 #define WS_VISIBLE 0x10000000 #define LVS_REPORT 0x0001 #define LVM_SETITEM 0x1006 #define LVM_INSERTITEM 0x1007 #define LVM_DELETEITEM 0x1008 #define LVM_INSERTCOLUMN 0x101B #define LVM_GETNEXTITEM 0x100C #define LVM_GETITEMTEXT 0x102D #define LVCF_FMT 0x0001 #define LVCF_WIDTH 0x0002 #define LVCF_TEXT 0x0004 #define LVCF_SUBITEM 0x0008 #define LVIF_TEXT 0x0001 #define LVNI_SELECTED 0x0002 // ★★★★★★★★★★★★多分 LVCFMT_CENTER で指定するんだと思います ★★★★★★★★★★★★ // ; (外部から参照できるように global 指定) #define global LVCFMT_LEFT 0x0000 #define global LVCFMT_RIGHT 0x0001 #define global LVCFMT_CENTER 0x0002 ; リストビュー作成 #deffunc CreateListView int sx, int sy ; コモンコントロールライブラリの初期化 initinfo = 8, ICC_LISTVIEW_CLASSES InitCommonControlsEx varptr(initinfo) ; リストビューの作成 styleFlags = WS_CHILD | WS_VISIBLE | LVS_REPORT winobj "SysListView32", "", 0, styleFlags, sx, sy return ; リストビューに列を追加 #deffunc InsertListViewColumn int objID, int index, str text, int align, int pixels textbuf = text ; LVCOLUMN 構造体をセット dim lvcolumn, 8 lvcolumn(0) = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM lvcolumn(1) = align lvcolumn(2) = pixels lvcolumn(3) = varptr(textbuf) ; LVM_INSERTCOLUMN メッセージ送信 sendmsg objinfo_hwnd(objID), LVM_INSERTCOLUMN, index, varptr(lvcolumn) return ; リストビューに項目追加 #deffunc InsertListViewItem int objID, int index, str text textbuf = text ; LVITEM 構造体をセット dim lvitem, 13 lvitem(0) = LVIF_TEXT lvitem(1) = index lvitem(5) = varptr(textbuf) ; LVM_INSERTITEM メッセージ送信 sendmsg objinfo_hwnd(objID), LVM_INSERTITEM, 0, varptr(lvitem) return ; リストビューの項目またはサブ項目テキスト設定 #deffunc SetListViewItemText int objID, int index, int subitem, str text textbuf = text ; LVITEM 構造体をセット dim lvitem, 13 lvitem(0) = LVIF_TEXT lvitem(1) = index lvitem(2) = subitem lvitem(5) = varptr(textbuf) ; LVM_SETITEM メッセージ送信 sendmsg objinfo_hwnd(objID), LVM_SETITEM, 0, varptr(lvitem) return ; リストビューの項目またはサブ項目テキスト取得 #defcfunc GetListViewItemText int objID, int index, int subitem ; LVITEM 構造体をセット dim lvitem, 13 lvitem(2) = subitem textbufsize = 256 ; 取得できるまでバッファサイズを拡張 repeat sdim textbuf, textbufsize lvitem(5) = varptr(textbuf) lvitem(6) = textbufsize ; LVM_GETITEMTEXT メッセージ送信 sendmsg objinfo_hwnd(objID), LVM_GETITEMTEXT, index, varptr(lvitem) if stat < textbufsize - 1 : break textbufsize *= 2 loop return textbuf ; リストビューの項目削除 #deffunc DeleteListViewItem int objID, int index ; LVM_DELETEITEM メッセージ送信 sendmsg objinfo_hwnd(objID), LVM_DELETEITEM, index, 0 return ; リストビューの選択項目のインデックス取得 #defcfunc GetSelectedListViewItem int objID, int startIndex ; LVM_GETNEXTITEM メッセージ送信 sendmsg objinfo_hwnd(objID), LVM_GETNEXTITEM, startIndex, LVNI_SELECTED return stat #global ;================= モジュール終わり ===================== ;【HSP3.x 移植版】 ;『HSPの裏技』リストビューでアイコンを使ってみる ; http://chokuto.ifdef.jp/urawaza/lv_icon.html ; ※ファイル iconlist.bmp は上記URLで公開されているものを使用 ; ; [参照]『Advanced HSP』ビットマップオブジェクト ; http://chokuto.ifdef.jp/advanced/bitmapobject.html #module ;###### ビットマップオブジェクト作成モジュール ######### #uselib "gdi32.dll" #cfunc CreateCompatibleDC "CreateCompatibleDC" int #cfunc CreateCompatibleBitmap "CreateCompatibleBitmap" int, int, int #func SelectObject "SelectObject" int, int #func BitBlt "BitBlt" int, int, int, int, int, int, int, int, int #func DeleteDC "DeleteDC" int #func DeleteObject "DeleteObject" int #define SRCCOPY 0x00CC0020 ; DIBセクションオブジェクト作成 #defcfunc CreateDIB int px, int py, int sx, int sy ; DIBセクションオブジェクト作成 hBitmap = CreateCompatibleBitmap(hdc, sx, sy) ; メモリデバイスコンテキスト作成 hdcMemory = CreateCompatibleDC(hdc) ; ビットマップをデバイスコンテキストに選択 SelectObject hdcMemory, hBitmap hOldBitmap = stat ; HSPウィンドウからビットマップにイメージをコピー BitBlt hdcMemory, 0, 0, sx, sy, hdc, px, py, SRCCOPY ; デバイスコンテキストの選択ビットマップを戻す SelectObject hdcMemory, hOldBitmap ; デバイスコンテキストを削除 DeleteDC hdcMemory ; ビットマップオブジェクト(DIBセクション)のハンドルを返す return hBitmap ; DIBオブジェクト削除 #deffunc DeleteDIB int hbmp ; ビットマップオブジェクトを削除 DeleteObject hbmp return #global ;############# モジュール終わり ######################## #module ;########### イメージリスト操作モジュール ############## #uselib "comctl32.dll" #cfunc ImageList_Create "ImageList_Create" int,int,int,int,int #func ImageList_Destroy "ImageList_Destroy" int #func ImageList_AddMasked "ImageList_AddMasked" int,int,int #func ImageList_Draw "ImageList_Draw" int,int,int,int,int,int #define global ILC_COLOR 0x0000 #define global ILC_COLOR4 0x0004 #define global ILC_COLOR8 0x0018 #define global ILC_COLOR16 0x0010 #define global ILC_COLOR24 0x0018 #define global ILC_COLOR32 0x0020 #define global ILC_COLORDDB 0x00FE #define global ILC_MASK 0x0001 #define ILD_TRANSPARENT 0x0001 ; イメージリスト作成 #defcfunc CreateImageList int sx, int sy, int type, int num return ImageList_Create(sx, sy, type, num, 0) ; メージリスト破棄 #deffunc DestroyImageList int handle ImageList_Destroy handle return ; イメージリストに描画中ウィンドウのイメージ追加 #deffunc AddImageListItem int handle, int cx, int cy, int sx, int sy, int maskColor dialog AddImageListItem ; DIB作成 hDIB = CreateDIB(cx, cy, sx, sy) ; ビットマップをイメージリストに追加 ImageList_AddMasked handle, hDIB, maskColor firstItemIndex = stat ; DIB削除 DeleteDIB hDIB return firstItemIndex ; イメージリストのイメージ描画 #deffunc DrawImageListItem int handle, int index, int cx, int cy ImageList_Draw handle, index, hdc, cx, cy, ILD_TRANSPARENT return #global ;############# モジュール終わり ########################



この記事に返信する


掘木

リンク

2016/5/19(Thu) 12:48:40|NO.75523

ん?見落としかな?
LVCFMT_CENTERを指定するのだから、
ListViewColumnForMaT_… こいつはLVCOLUMNに関係するもの。

列の追加を見るとlvcolumn.1が使われていなくて、
MSDNのLVCOLUMNの項を見る感じここに入れるっぽく見える。
これは試してみました?

フォントの変更は一括であるならWM_SETFONTをとりあえず試してみたらどうだろう。



ぺろ

リンク

2016/5/19(Thu) 20:58:47|NO.75529

ありがとうございます。
中央揃えについては自力で解決しました

あとはフォントの変更なんですが、うまくいきません



zero

リンク

2016/5/19(Thu) 22:10:39|NO.75530

単純に、WM_SETFONTを送ればいいみたいですね。

とりあえず適当に作りましたが、これをモジュールに組み込んでおいて、

#deffunc change_font int id_list mref bmscr, 67 hfont = bmscr.38 sendmsg objinfo_hwnd(id_list), 0x30/*WM_SETFONT*/, hfont, 1 return stat

次のようにして使います。

;(前略) font "フォント名", 16/*サイズ*/, 1/*スタイル指定*/ change_font id_list ;(後略)



ぺろ

リンク

2016/5/20(Fri) 13:50:59|NO.75533

ありがとうございます
解決しました



ONION software Copyright 1997-2021(c) All rights reserved.