掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
背景が透明な線を描画するには、どのようなアプローチが良いか? (ID:20611)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
宣言部やメソッドをひとつずつ確認しながら挿入してみました。 その際、イベントハンドラも、オブジェクトインスペクタを使って開き、コードをコピペしました。 コードに宣言部を挿入して、右クリックして表示される「カーソル位置のクラス定義保管」コマンドも利用しました。 その結果、次の2箇所に「inherited;」が自動挿入されました。 diffで確認し、この部分だけが「えーと」さんのコードと異なっていました。 私は「inherited;」があってもなくても良いのか、絶対必要なのか?までわからないのですが、この2行を削除しても問題なく動作し、図形が表示されました。 この点は、不思議なんですが・・。 ----- { TLine } procedure TLine.Draw(cvs: TCanvas); begin inherited; cvs.Pen.Color := Fcolor; cvs.Pen.Width := Fwidth; cvs.MoveTo(Fstart.X, Fstart.Y); cvs.LineTo(Fstop.X, Fstop.Y); end; { TEllipse } procedure TEllipse.Draw(cvs: TCanvas); begin inherited; cvs.Pen.Color := Fcolor; cvs.Pen.Width := Fwidth; cvs.Ellipse(Fpoint1.X, Fpoint1.Y,Fpoint2.X, Fpoint2.Y); end; ----- ここまでまとめて、「えーと」さんが2件回答くださっていることに気づきました。 さっそくの回答、ありがとうございます!! 最初の段階では、オブジェクトインスペクタを利用せず、コード全体をコピペしました。これが原因かもしれませんね? > w := PaintBox1.Width; // これやってますか? はい、全体をコピペしたので、これはやっていました。 「inherited;」が必要かどうか? については「継承元オブジェクトのメソッドを実行する」処理ですよね? 今回、継承もとのTZukeiのコンストラクタ(Createメソッド)にはコードがありませんから、あってもなくても同じなのでは?と感じます。 この解釈は、正しいでしょうか? どなたか、正確な解釈をご指導いただけると嬉しいです。よろしくお願いいたします。 また「全体をコピペしたから動作しなかった」の証明として、次の実験をいたしましたので報告します。 1)動作したコード全体をエディタにコピーする 2)Delphiで新規アプリケーションを作成する 3)Button1,Button2,PaintBox1を配置する 4)自動生成されたUnit1.pas全体を削除し、上記1)で退避したコードを貼り付ける 5)実行する この結果、オリジナルをコピペした場合と同じく、描画されない結果となりました。 「えーと」様のご指摘のように、コピペではダメなことがわかりました。 これは状況証拠だけなので、どなたか論理的な面で補足をいただけると助かります。 よろしくお願いいたします。 では、これから、いただいたソースをもう一度じっくり拝見し、ひとつずつ解釈して行こうと思います。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.