1 StringGridへの行単位の入力と全行クリアー
2 実行時StringGridへの行の追加とオートスクロール
3 実行時TeeChartへStringGridから情報を追加更新するには
4 実行時StringGridのデータをTeeChartでAnimate再現する
5 StringGrid2〜1へのデータの(クリップボード経由)の全移動と選択移動
6 縦書きHTML変換ソース(Tagが含まれているのでTXTで)
7 TColorのHtml形式への変換
8 Popupmenu の Ownerdraw
9 TChart のプログラムでの Scroll
10 小技
11 Clipboard Check
12 Marking new!!
13 文字列の色付け new!!
14 前に検索 new!!
15 最大化で終了した時の次回起動の最大化 new!!
16 IME の取得や 操作あれこれ new!!
1 StringGridへの行単位の入力と全行クリアー
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Rows[0].CommaText :='Lap," ",Number,Total,Laptime';
end;
(," ", は空白セルです)
参考文献[Delphi3.1リファレンスガイド 秀和システム P289]感謝!
procedure TForm1.ResetClick(Sender: TObject);
var ColIndex: Longint;
begin
{ cun :=0;//実践では必要}
with StringGrid1 do
for ColIndex := 0 to ColCount - 1 do begin
Cols[ColIndex].Clear;
end;
{StringGrid1.Rows[0].CommaText :='Lap," ",Number,Total,Laptime';
StringGrid1.TopRow :=1;//実践では必要}
end;
end;
*閉鎖中 TOMEさんのTSmartGrid コンポーネント Version 1.02 (1998/3/20)のソースを 参考にいたしました 感謝!
(文責 SIGEYOSI M)
2 実行時StringGridへの行の追加とオートスクロール
procedure TForm1.Button1Click(Sender: TObject);
begin
cun := cun+1 ;
//正確には Inc(cun)でしょう cunは変数宣言が必要です
//初期設定の20行を越えたら一行づつ行を足してゆきます
//一番上の行は固定行なので20‐1を越えたら……
begin
if cun >=20 then
StringGrid1.RowCount := cun+1;
end;
//挿入した行に文字を入れます
StringGrid1.Rows[cun].CommaText :=IntToStr(cun);
StringGrid1.Selection := TGridRect(Rect(0,0,0,(cun)));
//最終行を選択します
//縦スクロールする為にVisibleRowCount(見えている行数)を全行数
//から引きTopRowがGridの一番上に来るようにします
begin
if cun>(StringGrid1.VisibleRowCount) then
StringGrid1.TopRow := cun-((StringGrid1.VisibleRowCount)-1) ;
end;
end;
参考文献[Delphi3.1リファレンスガイド 秀和システム P292]感謝!
(文責 SIGEYOSI M)
3 実行時TeeChartへStringGridから情報を追加更新するには
procedure TForm1.StartClick(Sender: TObject);
//これでグラフの横軸目盛り0に数値0が代入されるようになります
//ただし固定セルが文字の場合です 数字では数字が代入されてしまいます
begin
Chart1.Series[0].Add(StrToIntDef(SmartGrid1.Cells[6,cun] ,0),
'',Chart1.Series[0].SeriesColor);
Chart1.Series[1].Add(StrToIntDef(SmartGrid1.Cells[8,cun] ,0),
'',Chart1.Series[1].SeriesColor);
end;
procedure TForm1.LapClick(Sender: TObject);
begin
cun:= cun+1; //変数宣言が必要です
//これは横軸0と1目盛りに同じ値を二度代入して グラフの増減が
//間延びしないようにしています 暫定的なものです
//通常はいりません
{begin
if cun<=1 then
Chart1.Series[0].Add(StrToIntDef(StringGrid1.Cells[6,cun] ,0),
'',Chart1.Series[0].SeriesColor); end;
begin
if cun<=1 then
Chart1.Series[1].Add(StrToIntDef(StringGrid1.Cells[8,cun] ,0),
'',Chart1.Series[1].SeriesColor); end;}
//ここからクリックのたびに6列と8列の値をグラフへcun=1からN回
//まで代入してゆきます
Chart1.Series[0].Add(StrToInt(StringGrid1.Cells[6,cun] ),
'',Chart1.Series[0].SeriesColor);
Chart1.Series[1].Add(StrToInt(StringGrid1.Cells[8,cun] ),
'',Chart1.Series[1].SeriesColor);
end;
参考文献[『Delphi4 プログラミング バイブル』p348‐349 インプレス] 感謝
* 1〜3は SIGEYOSI にある DstopLS12 からのソースコードです
4 実行時StringGridのデータをTeeChartでAnimate再現する
**6列と8列のデータをChartへ (DstopLS13c からのソースコードです)
Cho : Integer;//グローバル変数
procedure TForm1.Button1Click(Sender: TObject);
var
I, ARow, Bottom: Integer;
begin
//データ不在時キャンセル
if StrToIntDef((StringGrid1.Cells[6,1]), 0) = 0 then Exit;
try
Button1.Enabled := False;//途中で押すとエラーになるので
Button2.Enabled := False;//途中で押すとエラーになる他のボタン
Form1.DoubleBuffered := True;//ラベルなどのちらつき防止
Button3Click(Self);//Chart Clear
Invalidate;//この2行で割り込みを可能にする
Application.ProcessMessages;
Bottom := StringGrid1.RowCount - 1;
Button4.Enabled := False;
for ARow := 0 to Bottom do
begin
if Cho <= 1 then I := 1 else I := Cho;//Chartが0から始まらぬように
with Chart1, StringGrid1 do
begin
Series[0].Add(StrToInt(Cells[6, I]), '', Series[0].SeriesColor);
Series[1].Add(StrToInt(Cells[8, I]), '', Series[1].SeriesColor);
end;
Label1.Caption := IntToStr(Cho);//回数表示
Inc(Cho);
//この2行はスクリーンセーバーのキャンセルにも有効です
Invalidate;
Application.ProcessMessages;
//待ち時間ミリ秒
Sleep(500);
if Bottom=Cho then//終了時の処理
begin
Button1.Enabled := True;
Button2.Enabled := True;
end;
end;
except
ShowMessage('Err');//念の為
Button1.Enabled := True;
Button2.Enabled := True;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);//ChartClear
begin
Cho:=0;
Chart1.Series[0].Clear;
Chart1.Series[1].Clear;
Chart1.UndoZoom;
Repaint;
end;
*Leafel's note 御協力いただきました 感謝!
5 StringGrid2〜1へのデータの(クリップボード経由)の全移動と選択移動
uses Clipbrd;//追加
var
Ccp : Integer;
//StringGrid2の全内容をクリップボードへ
procedure TForm1.Button5Click(Sender: TObject);
var
s: TStringList;
i, j: Integer;
begin
Ccp := 0;
if (StringGrid2.RowCount <= 1) or
(StringGrid2.ColCount <= 1)
then
Exit; {多分このグリッドには内容がない}
{項目ごとにカンマで区切ってクリップボードに保存}
s := TStringList.Create;
try
begin
for i := 1 to StringGrid2.RowCount - 1 do
for j := 0 to StringGrid2.ColCount -1 do
begin
s.Add(StringGrid2.Cells[j, i]);
Inc(Ccp);
end;
Clipboard.AsText := s.CommaText;
end;
Ccp := (Ccp div 10)+1 ;
finally
s.Free;
end;
end;
//クリップボードの内容をStringGrid1へ貼りつける
procedure TForm1.Button6Click(Sender: TObject);
var
s: TStringList;
i: Integer;
row, col: Integer;
ColIndex: Longint;
begin
if Clipboard.HasFormat(CF_TEXT) then
begin
s := TStringList.Create;
begin
with StringGrid1 do //Result := True;
for ColIndex := 1 to ColCount - 1 do
begin
Cols[ColIndex].Clear;
end;
end;
try
s.CommaText := Clipboard.AsText;
{以下、グリッドの左上から適当に組み立てる}
row := 1;
col := 0;
for i := 0 to s.Count-1 do
begin
StringGrid1.RowCount := Ccp;
StringGrid1.Cells[col, row] := s[i];
Inc(col);
{1行分読み込みましたか?}
if col = StringGrid1.ColCount then
begin
col := 0;
Inc(row); {次の行へ}
end;
end;
finally
s.Free;
end;
end;
end;
//Edit1.Text の文字を含む(-->1列目)行のみ抜き出してクリップボードへ
procedure TForm1.Button7Click(Sender: TObject);
var
s: TStringList;
i, j: Integer;
begin
Ccp:=0;
if (StringGrid2.RowCount <= 1) or
(StringGrid2.ColCount <= 1)
then
Exit; {多分このグリッドには内容がない}
{項目ごとにカンマで区切ってクリップボードに保存}
s := TStringList.Create;
try
for i := 1 to StringGrid2.RowCount - 1 do
begin
for j := 0 to StringGrid2.ColCount -1 do
begin
if StringGrid2.Cells[1,i] = Edit1.Text then
begin
s.Add(StringGrid2.Cells[j, i]);
Inc(Ccp);
end;
Clipboard.AsText := s.CommaText;
end;
end;
Ccp := (Ccp div 10)+1 ;//10 はStringGrid2 StringGrid1 の列数
finally
s.Free;
end;
end;
*(DstopLS13d からのソースコードです)
**クリップボードへの全データ読み書きは主に
*Delphi広場 過去ログ 2879 を参考にしました 感謝!
(文責 SIGEYOSI M)
|