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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
1215
ふぃる曲名の長さについて聞きたいです4未解決


ふぃる

リンク

2013/12/15(Sun) 17:35:39|NO.58752

今、自分は音楽プレイヤーを作っています
読み込んだ曲をリストに追加していってプレイリストみたいにしたいと思っています
そこでなんですが、
曲のタイトルをその音楽ファイル名から取っていて、
曲のタイトル(ファイル名)が長いときに「...」と表示させたいのですが、
今自分は
「タイトルの文字の数がある一定の数以上になった場合、
ある一定の数まで抜き取り、「...」を付け加える」
というように組んでいます
しかし、これだと半角全角の関係で表示される長さがまちまちです

プレイリストに追加してある曲のタイトルがきれいにそろって表示させるにはどうしたら良いのでしょうか?
分かりにくい長文ですみません



この記事に返信する


(’’

リンク

2013/12/15(Sun) 18:24:49|NO.58753

Win32APIのdrawTextExに投げれば一発でいけます

#include "user32.as"
#define DT_SINGLELINE $00000020 //シングルライン #define DT_END_ELLIPSIS $00008000 //...で省略する //x,y,width(クリッピングする横幅),heigtの順 rc=20,20,80,60 sysfont 17 color 255 DrawTextEx hdc,"DrawTextEx",-1,varptr(rc),DT_SINGLELINE|DT_END_ELLIPSIS,0 redraw

fontもcolorも反映されます(redrawが必要)



hnakai

リンク

2013/12/15(Sun) 18:27:28|NO.58754

Win32APIのDrawTextA関数を用います。
DrawTextの最後の引数にDT_ENDELLIPSISを指定することで
RECTで指定した領域に収まらなかった時に「...」となります。

参考
http://msdn.microsoft.com/ja-jp/library/cc428474.aspx
http://hsp.tv/play/pforum.php?mode=pastwch&num=23012
http://geocities.yahoo.co.jp/gl/gbmogiki/view/20091019/1255956196


#uselib "user32.dll" #func DrawText "DrawTextA" int,sptr,int,sptr,int #define DT_TOP 0x00000000 #define DT_LEFT 0x00000000 #define DT_CENTER 0x00000001 #define DT_RIGHT 0x00000002 #define DT_VCENTER 0x00000004 #define DT_BOTTOM 0x00000008 #define DT_WORDBREAK 0x00000010 #define DT_SINGLELINE 0x00000020 #define DT_EXPANDTABS 0x00000040 #define DT_TABSTOP 0x00000080 #define DT_NOCLIP 0x00000100 #define DT_EXTERNALLEADING 0x00000200 #define DT_CALCRECT 0x00000400 #define DT_NOPREFIX 0x00000800 #define DT_INTERNAL 0x00001000 #define DT_EDITCONTROL 0x00002000 #define DT_PATH_ELLIPSIS 0x00004000 #define DT_END_ELLIPSIS 0x00008000 #define DT_MODIFYSTRING 0x00010000 #define DT_RTLREADING 0x00020000 #define DT_WORD_ELLIPSIS 0x00040000 string1 = "普通の文字列" string2 = "とてもとてもとてもとても長い文字列" repeat redraw 0 color 255,255,255:boxf color 0,0,0 limitwidth=100+cnt\200 //表示する幅 デモ用に変化させている line limitwidth,0,limitwidth,480 RECT = 0,0,limitwidth,30 //左上x座標,左上y座標,右下x座標,右下y座標 DrawText hdc, string1, -1, varptr(RECT),DT_TOP|DT_END_ELLIPSIS RECT = 0,30,limitwidth,60 DrawText hdc, string2, -1, varptr(RECT),DT_TOP|DT_END_ELLIPSIS await 16 redraw 1 loop



ふぃる

リンク

2013/12/15(Sun) 19:48:08|NO.58759

(’’さん、hnakaiさん、素早いご返答ありがとうございます

参考になりました!!...とはっきり言えないです...
もっと自分の頭がよかったら理解できるのでしょうけど、
初心者の自分にははっきりと理解できていません><

2つ聞きたいことがあります
1つ目はDrawTextExの使い方(各パラメータの意味など)
2つ目は
#define DT_SINGLELINE	$00000020

の意味と最後の$000...の数値の意味 を知りたいです まだ、HSPと少しjavaとCをかじった程度なのでWin32APIとかはっきり言って分からないです... 教えていただけたら幸いです><



kanahiron

リンク

2013/12/15(Sun) 22:04:41|NO.58766

winAPIはここを見れば全て書いてあります
http://msdn.microsoft.com/ja-jp/library/ms123401.aspx

DrawTextExのページはこれですね
http://msdn.microsoft.com/ja-jp/library/cc428478.aspx

このページを見れば解説は要らないでしょう 同じことを書くことになります


#define DT_SINGLELINE $00000020
は、 DT_SINGLELINE という文に $00000020を定義するという意味です
変数みたいなものです
$00000020は、Cでは0x20という書き方です
別に32と書いても問題ありません
16進数表記の8桁なのは、フラグ立てとして見やすいからだと思います(0xFFFFFFFFで32bit変数の最大値です)



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