掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
文字列の整列 (ID:31567)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
真琴:「このような場合は TListViewを使うのが普通じゃない? ハルコさん」 春子:「まぁネ、でもナニかTListBoxを使いたい特別なワケがあるのかも、それで…」 const MAX_TAB = 5; TABCODE = #9; type TTabArray = array[0..MAX_TAB-1] of Integer; TMultiStrings = class; TListBox = class(StdCtrls.TListBox) private FMultiItems: TMultiStrings; procedure SetMultiItems(Value: TMultiStrings); published property MultiItems: TMultiStrings read FMultiItems write SetMultiItems; public Tabulator: TTabArray; constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure CreateWnd; override; end; TMultiStrings = class(TStrings) private ListBox: TListBox; public function Add(const S1, S2, S3: string): Integer; overload; function Add(Value: array of string): Integer; overload; end; type TForm1 = class(TForm) ListBox1: TListBox; ........ implementation uses Consts; function TMultiStrings.Add(const S1, S2, S3: string): Integer; var S: string; begin with ListBox do begin SendMessage(Handle, LB_SETTABSTOPS, MAX_TAB, Longint(@Tabulator)); S := S1 + TABCODE + S2 + TABCODE + S3; Result := SendMessage(Handle, LB_ADDSTRING, 0, Longint(PChar(S))); if Result < 0 then raise EOutOfResources.Create(SInsertLineError); end; end; function TMultiStrings.Add(Value: array of string): Integer; var S: string; i: Integer; begin with ListBox do begin SendMessage(Handle, LB_SETTABSTOPS, MAX_TAB, Longint(@Tabulator)); S := Value[0]; for i:=1 to Length(Value)-1 do begin if i >= MAX_TAB then break; S := S + TABCODE + Value[i]; end; Result := SendMessage(Handle, LB_ADDSTRING, 0, Longint(PChar(S))); if Result < 0 then raise EOutOfResources.Create(SInsertLineError); end; end; constructor TListBox.Create(AOwner: TComponent); begin inherited; //TabWidth := 1; TabWidth := (GetDialogBaseUnits and $FFFF) div 4; FMultiItems := TMultiStrings.Create; FMultiItems.ListBox := Self; Tabulator[0] := 60; Tabulator[1] := 130; Tabulator[2] := 190; Tabulator[3] := 250; Tabulator[4] := 310; end; procedure TListBox.CreateWnd; begin inherited; //SendMessage(Handle, LB_SETTABSTOPS, MAX_TABS, Longint(@Tabulator)); SendMessage(Handle, LB_SETHORIZONTALEXTENT, 1000 + GetSystemMetrics(SM_CXFRAME), 0); end; destructor TListBox.Destroy; begin inherited; FMultiItems.Free; end; procedure TListBox.SetMultiItems(Value: TMultiStrings); begin Items.Assign(Value); end; {TForm1} procedure TForm1.Button1Click(Sender: TObject); begin with ListBox1 do begin MultiItems.Add(['Name','Operation','Person in charge','Reservation day','Charge']); Items.Add(StringOfChar('-', 80)); MultiItems.Add(['田中一郎 様','カット','担当:鈴木次郎','8月25日','\3,500']); MultiItems.Add(['','パーマ','担当:田中四郎']); MultiItems.Add('','シャンプー&ブロー','担当:田中四郎'); MultiItems.Add(['伊集院峰弘 様','パーマ','担当:佐藤三郎','8月27日','\2,000']); end; end; 真琴:「ハルコさん、これはタブ設定だから等幅フォントでなくてもOKなの?」 春子:「そうよ、マコト、でも最大文字数がもっと増えたらタブ幅も調整しないと」 真琴:「これも便利、オープン配列コンストラクタって言うのネ?」 春子:「そういうワケ」 真琴:「だけど、この水平スクロールバーは無くてもイイんじゃない?」 春子:「それはオマケ、…しっかし、暦の上では秋なのに相変わらず暑いね〜」 真琴:「うん、それに昨日は三歳の男の子が迷子になっちゃって大変だったの」 春子:「えっ、迷子に? それでその子は見つかったの? マコト」 真琴:「大丈夫、見つかった、…海でおぼれたんじゃないかって皆心配したけど」 春子:「そっか、とにかく良かったね、無事で」 真琴:「ねぇ、ハルコさん、この前の夢の話なんだけど…」 春子:「ン? マコトが迷子になったって夢のコト?」 真琴:「そう、あの時ハルコさんは言ってくれたよね、これに懲りずに挑戦しろって」 春子:「えっ? そんなコトは…」 真琴:「また迷子になっても何度でも助けてあげるからって、アタシを励まして…」 春子:「違う違う、マコト、もうアタシは助けられないって言ったでしょ」 真琴:「そうよ、確かにそう言ったの、ハルコさんは…、やっぱりあれは夢じゃなかったんだね」 春子:「…マコト、アタシをひっかけた?」
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.