Pre Tips  2004/6/18


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)

   













Return



Geocities