掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
StringGridのFixedの列幅を変更 (ID:30762)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
真琴:「ねぇ、質問の人は"良い方法があったら"って書いてるけど、"良くない方法"ってあるの?」 海都:「うぅ〜ん、あらゆる条件で不具合がないのが "良い方法"なんだろうけど…とりあえず、コレで」 type TStringGrid = class(Grids.TStringGrid) private HorzOffset: Integer; SizingPosX: Integer; AnchorPosX: Integer; SizingLeft: Integer; SizingCol: Integer; CurColNum: Integer; public procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; end; type TForm1 = class(TForm) StringGrid1: TStringGrid; ....... procedure TStringGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; if (goColSizing in Options)and(Button = mbLeft) then begin SizingCol := CurColNum; if SizingCol <> -1 then begin SizingPosX := AnchorPosX; HorzOffset := SizingPosX - X; end; end; end; procedure TStringGrid.MouseMove(Shift: TShiftState; X, Y: Integer); var i: Integer; begin if not(ssLeft in Shift) then begin SizingCol := -1; CurColNum := -1; Cursor := crDefault; if (goColSizing in Options)and(Y < RowHeights[0]) then begin AnchorPosX := 0; for i:=0 to Pred(FixedCols) do begin SizingLeft := AnchorPosX; inc(AnchorPosX, ColWidths[i]); if (X > AnchorPosX-3)and(X < AnchorPosX+4) then begin Cursor := crHSplit; CurColNum := i; break; end; end; end; end; if SizingCol <> -1 then begin SizingPosX := X + HorzOffset; if (X > SizingLeft+4) then begin ColWidths[SizingCol] := SizingPosX - SizingLeft; end; end; inherited; end; procedure TStringGrid.MouseUP(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if SizingCol <> -1 then begin SizingCol := -1; Cursor := crDefault; end; inherited; end; procedure TForm1. 〜 ........ 真琴:「ふ〜ん、こうすれば固定列の幅も広げたり出来るんだネ、カイトさん」 広海:「マコト、もっと、もっと広げてみろよ」 真琴:「あれっ? 固定列をGrid全体に広げたら、その右のセルがスクロールしても出て来なくなったよ? カイトさん」 海都:「あっそうか…、広げる幅の制限を付け加えないと…」 × if (X > SizingLeft+4) then begin ○ if (X > SizingLeft+4)and(X < ClientWidth-16) then begin 広海:「あとぉ〜、Drag途中でキャンセルもしたいよねェ」 真琴:「あッそうよね、それも出来た方が便利よ、カイトさん」 海都:「それなら…、MouseUPイベントにコレ追加すれば、Drag中の右クリックでキャンセル出来るかな…」 if SizingCol <> -1 then begin if (Button = mbRight) then ColWidths[SizingCol] := AnchorPosX - SizingLeft; // コレを追加 SizingCol := -1; Cursor := crDefault; ...... 真琴:「うん、これでもうイイんじゃない? カイトさん」 海都:「いや、FixedColsは複数でもOKだけど…FixedRowsが複数なら最上行でしかDrag出来ない、あと、条件次第ではゴミが…」 真琴:「えっ、そうなの? じゃぁ、これってまだ"良い方法"じゃないの?」 海都:「ン…まぁ、そうかも…」 春子:「でもぉ、カンペキなのって、作るのも検証するのも大変よね」 海都:「確かに…、プログラムをカンペキに仕上げるのは、時間と手間が必要だョ」 広海:「ダメダメ、カンペキなのを教えてあげなよ」 海都:「そんなヒマないだろぅ」 春子:「そうよ、今日はお客様が多いから、さぁ早く皆で食事の準備しなきゃ」 海都:「じゃぁ、オレは、魚の盛り付けするよ」 春子:「ヨロシクね、マコトとアタシはテーブルの準備よ」 真琴:「は〜い」 海都:「速いよな…、もう半年になるな、正月にココに戻ってから…」 広海:「トシとると時間が経つのが速くなるって、よく言うじゃん」 海都:「違うだろ、楽しい時間はアッという間に過ぎるってコト」 広海:「そういうコト…だネ^^;」 海都:「オレは、もう次の準備始めてるけど…、アンタは? まさか、ココに居付くつもり?」 広海:「それもイイかなぁ…、オレ、ここでサーフィン始めようかと思ってンだ」 海都:「サーフィン? 直前にケガしなきゃ水泳のオリンピック候補トップになれたんだから、やる気出せば次のオリンピック出場も夢じゃないのに」 広海:「オリンピックは、オレの夢なんかじゃないんだよね…、たまたまガキの頃から水泳やらされてただけのコト」 海都:「そうなのか…でも、もったいないな、オレもココが好きで、ズ〜ット居たいとも思う…けど、やっぱり」 広海:「あぁ〜ダメダメ、それじゃ魚の向きが反対」 海都:「えっ、向き? そんなのどっちだってイイだろぅ、偉そうに…」 広海:「盛り付けにも"良い方法"ってのがあるの、それに…ここではオレの方がセンパイ、そういうコト、分かるぅ〜?」
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.