掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
privateで宣言された変数にアクセスする方法 (ID:29247)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>何が悪いのかコンパイルできません。 真琴:「"コンパイルできない"って言ってるけど、どんなコード書いたのかなぁ」 広海:「この上のサンプルコードを書き加えただけなんじゃないの?」 海都:「そうかな? もし、そうならコンパイル出来ないのは当たり前…、こうしなくちゃ」 type TDBGrid = class(DBGrids.TDBGrid) public procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override; end; procedure TDBGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); begin inherited; if (ACol > 0)and(AROW = 0) then begin Canvas.Brush.Color := $DD88FF; InflateRect(ARect, -1, -1); Canvas.FillRect(ARect); Canvas.TextOut(ARect.Left + 2, ARect.Top + 2, Fields[ACol-1].FieldName); end else if ARow = Row then begin Canvas.Brush.Color := $FF8800; if gdSelected in AState then Canvas.Brush.Color := $AA8800; Canvas.FillRect(ARect); if ACol = 0 then Canvas.TextOut(ARect.Left + 3, ARect.Top + 2, '>') else Canvas.TextOut(ARect.Left + 2, ARect.Top + 2, Fields[ACol-1].DisplayText); end else if ACol = 0 then begin Canvas.Brush.Color := $FF88BB; InflateRect(ARect, -1, -1); Canvas.FillRect(ARect); end; end; 真琴:「ねぇ、カイトさん、新しいクラスの宣言で、同じ"TDBGrid"の名前を使ってもいいの?」 海都:「普通は別名の方がイイけどね、DBGrids.TDBGridのように書けば同じ名前でも大丈夫」 真琴:「あれ?…カイトさん、このコード書き足してみても、色変わらないよ、エラーは出ないけど」 広海:「ウソ、教えてるンじゃないのぉ? アンタもタマには冗談こいたりして」 海都:「オレはお前とは違うの、茶化すンじゃないよ」 春子:「新しいクラスを動的に作成して、元の DBGrid1と入れ換えればイイのよね? カイトさん」 海都:「そう、新コンポにするよりは、動的生成の方がラクだと思うよ」 真琴:「でもぉ…、動的生成って、フォームに貼り付けるわけイカナイでしょ? それも面倒じゃない?」 海都:「そういう時こそ、クローン関数の出番、いわゆる万能細胞のようなもの」 真琴:「えっ、万能細胞? あっ、最近ニュースで言ってたよね、京大の教授が世界で初めて作ったって」 海都:「ま、そこまでスゴクはないけど、貼り付けたどんなTControlとも入れ換えが出来て、便利な関数だよ」 type TCloneClass = class of TControl; function CreateClone(Origin: TControl; CloneClass: TCloneClass): TControl; var Stream: TStream; begin result := CloneClass.Create(Origin.Owner); Stream := TMemoryStream.Create; try with TWriter.Create(Stream, $1000) do try Root := Origin.Owner; WriteSignature; WriteComponent(Origin); WriteListEnd; finally Free; end; with TReader.Create(Stream, $1000) do try Root := Origin.Owner; // Owner := Origin.Owner; Parent := TControl(Origin).Parent; Origin.Free; Position := 0; BeginReferences; try ReadSignature; ReadComponent(result); FixupReferences; finally EndReferences; end; finally Free; end; finally Stream.Free; end; end; 海都:「置き換えは、FormのOnCreateハンドラに、CreateClone(DBGrid1, TDBGrid);と書くだけ」 真琴:「それだけで、フォームに貼り付けたDBGrid1と置き換え? あっホント色変わった、これスッゴク便利」 広海:「オレは万能細胞よりか、万能財布の方がイイけどね」 真琴:「万能財布? ナニそれ」 広海:「いくら使ってもぉ、中のカネが減らないのが万能財布、…そんなの欲しいよなぁ」 春子:「さッすが、ヒロミくんらしい発想、…スゴイわ」 広海:「だよね、ネネッ、みんなもソウ思うよね」 真琴:「あのねェ、それって、誉められてるんじゃなくて…」
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.