• ベストアンサー

Delphiでコンポーネントをfunctionから参照するには

Delphiで例えば、StringGridのCellsプロパティをeventで呼ばれる procedureではなく自分で作ったfunctionで参照したり,更新したりできる 簡単な方法がありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

>event procedure ならそれでエラーも出ませんが >functionではStringGrid1が未定義となりコンパイルできません。 functionはFormのprivate関数またはpublic関数にしていないのでしょうか? そうしていれば、#1で書いた方法でできます。 Formに依存しない関数にしているのなら、 S := Form1.StringGrid1.Cells[Col, Row]; Form1.StringGrid1.Cells[Col, Row] := S; としなければなりませんが、このような関数は望ましくはありません。 (結局はForm1に依存しているので) TForm1のprivateセクションに、 function xxxx(xx: xxx): xxx; と記述し、 implementationに、 function TForm1.xxxx(xx: xxx): xxx; begin ・・・・ end; と記述すれば、Formのprivate関数になります。

dogbin
質問者

お礼

ありがとうございました おっしゃるとおりに Formのprivate函数にしたところ エラーが消えて,うまくいきました。 これでDelphiプログラムがかなり自由に組めそうですね。 本当に助かりました。 丁寧にお教え頂き深く感謝いたします。

その他の回答 (1)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

参照は、 S := StringGrid1.Cells[Col, Row]; 更新は、 StringGrid1.Cells[Col, Row] := S;

dogbin
質問者

お礼

ありがとうございます。 event procedure ならそれでエラーも出ませんが functionではStringGrid1が未定義となりコンパイルできません。

関連するQ&A

  • delphiのStringGridで特定のcellの色を変える

    delphiのStringGridで、指定したcellの色を変えることは出来るでしょうか? cells[5,5]だけ色が付いてる、みたいなイメージです。 初心者のためサンプルコードをご教示いただけると大変ありがたいです。

  • Delphiに関して  「このプログラム解読できません!」

    こんにちは。このプログラムが解読不可です。StringGridの1列目と2列目の各セルの内容を右寄せにする ということで、実行させると確かにそうなるのですが、どういう構造かいまいち分かりません。特に 'Rect.Top:=Rect.Top+2;' のところなんて"なんで+2なの~?"ってホントに謎です。gdFixedとかFillRectとかヘルプに書いてあることとなんか違う気がして....DT_RIGHTもわかりません。 このプログラムの解説お願いします! procedure TForm1.StringGrid1DrawCell(Sender:TObject;ACol,ARow:Integer;Rect: TRect; State: TGridDrawState); begin If Not (gdFixed In State) And (ACol In [1,2]) Then Begin StringGrid1.Canvas.FillRect(Rect); Rect.Top := Rect.Top + 2; If (ACol = 1)or(ACol = 2) Then DrawText(StringGrid1.Canvas.Handle, PChar(StringGrid1.Cells                 [ACol,ARow]),Lengthend(StringGrid1.Cells                [ACol,ARow]),Rect,DT_RIGHT) end; end;

  • delphi6 StringGrid セルの位取り

    delphi6 StringGrid セルの位取り セルの値(数字)を右寄せ、位取りさせて表示させたいのですが、きれいに並びません。 A:='00,123,456,789' B:='00,000,123,456'  にすると、きれいに並びますが、 A:='___123,456,789' B:='_________123,456' と、0を空白にすると並びがずれます。 右寄せにするプロパティはないでしょうか? QNo.258234に似た質問がありましたが、もっと簡単にできないでしょうか?

  • Delphiについて

    Delphiを使い始めてちょっとの初心者ですが、 Imageコンポーネントなのですが、 プロパティのPictureを変えれば画像を表示できるのですが、 ソース中に書き込んで変える方法はないのでしょうか? Image1.Pricture := .... とこんな感じで変えられないでしょうか? その画像の拡張子は「.bmp」です。

  • delphi6を使ってます。

    今classを勉強中なのですが一生懸命勉強しても全然覚えられません。 いい勉強方法や本、その他アドバイスをください。 今はclassの初歩段階です。 procedureやfunctionは分かります。

  • 次のDelphiプログラムで

    type TStrArray = class private fStrList: TStringList; procedure SetItem(index: Integer; const Value: string); function GetItem(index: Integer): string; public constructor Create; destructor Destroy; override; procedure Clear; function GetCount: Integer; procedure Push(Item: string); function Pop: string; procedure UnShift(Item: string); function Shift: string; property Items[index: Integer]: string read GetItem write SetItem; default; end; TStrArray = class は TStrArray = class(TObject) としても同じでしょうか? GetItem write SetItem; default; の「default;」の意味を教えてください。

  • Delphi 閉じてないウインドウを閉じる

    Delphi 6 です。 実行中の「***.exe」(ウインドウ)を閉じさせる方法はありますか? 実行中のAAA.exeをでBBB.exeから閉じさせる方法です。 強制終了でなく、OnCloseイベントにも行く方法を教えて下さい。

  • Delphi6 ループ中にキー入力

    Delphi 6 です。 for next などのループの中で、stringgridのセルをEnterキーで選択させたい時、選択されるまで(キーが押されるまで)処理を進めたくない方法は、どうするんでしょうか? flg:=false; for i:=1 to 100 do begin ~諸々の処理で flg:=true; ~ if flg=true then x[i]:= stringgridの選択されたRow番号(はじめからフォーカスされている番号でなく) ~諸々の処理で flg:=false; ~ end;

  • Access 参照設定について

    いつもお世話になっております。 Accessのイベント処理で visualBasicを使い処理しようとしています。 isloaded関数を使いたいのですが、 コンパイルエラーとなります。 ↓ SubまたはFunctionが定義されていません。 いろいろ調べた結果、 参照設定がなされていないようで、 isloaded関数が 'プロパティ/メソッドの一覧'に 表示されていない状況です。 ご教授宜しくお願いします。

  • Excel2003 VBA Functionの定数に関して教えて下さい

    Excel2003 VBA Functionの定数に関して教えて下さい。 例えば、 Function test(x, y) test = A * x + B * y + C End Function という数式を定義し、プログラム中で使用したいとします。 数式を見て分かる通り、xとyは変数でA, B, Cは定数です。 そして、これらA, B, Cの値を A = Cells(3,5) B = Cells(3,6) C = Cells(3,7) のようにシート上の値を使用したいのですが、 上記のようにプログラム中で宣言してもFunctionの中では値が入っていないものとみなされてしまいます。 この問題の回避のため、、 Function test(x, y) A = Cells(3,5) B = Cells(3,6) C = Cells(3,7) test = A * x + B * y + C End Function のようにFunctionの中に、定数を宣言を入れてしまうか、 Function test(x, y, A, B, C) test = A * x + B * y + C End Function のようにA, B, Cも定数ではなく、変数として扱う方法があります。 しかしながら、一つ目の方法では、こういったFunctionの数が増えてくると、 同じ定数を複数の場所で宣言することになり、後からプログラムを書き直そうとしたときに 極めて不便です。 一方で、2つめの方法では、test(x, y, A, B, C)のように、 一つのFunctionを呼び出すためにごちゃごちゃしてスペースをとり、 後から見たときに見にくくなります。 後、Constとして定義する方法もありますが、 A = Cells(3,5) のように、シート上のデータを代入する方法をとりたいと考えています。 上記以外の方法以外でもっとスマートな方法がありましたら 教えて頂けますでしょうか?

専門家に質問してみよう