◆ [Delphi] TFrameを上手に使ってメンテナンス性を向上させる 4 ~子フレームの作成2~
どーもボキです。

前回に引き続き、子フレームを作成する。
作成するフレームはこんな感じ。フレームにパネルを10枚貼り付けてある。
a0021757_22432049.gif


実装したコードは以下。
Initでは、パネルに表示されている文字を消去し、
Procでは、フレームにランダムに色を設定し、その色をベースにパネルの色をグラデーションさせている。

overrideを忘れずに。

この記事では、overrideのことよりも、むしろFindComponentでコンポーネントをfor文で管理したり、
指定した値分だけ色をズラす自作関数OffsetColorの方が、参考になるんじゃないかな?

子フレーム(uFR_Test2.pas)のソースコード
unit uFR_Test2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uFR_Common, ExtCtrls;

type
TFR_Test2 = class(TFR_Common)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
Panel7: TPanel;
Panel8: TPanel;
Panel9: TPanel;
Panel10: TPanel;
private
{ Private 宣言 }
public
{ Public 宣言 }
procedure Init; override;
procedure Proc; override;
end;

var
FR_Test2: TFR_Test2;

implementation

{$R *.dfm}

{ TFR_Common1 }



procedure TFR_Test2.Init;
var
i : Integer;
begin
inherited;

// パネルのCaptionを消す
for i := 1 to 10 do
TPanel(FindComponent('Panel' + IntToStr(i))).Caption := ''
end;



procedure TFR_Test2.Proc;
// TColorを指定したOffset分ずらす
function OffsetColor(iColor : TColor; Offset : Smallint) : TColor;
//----------------------------------------------------------------------------
function _offset(iByte : Byte) : Byte;
label _END_;
var
data : Smallint;
begin
data := iByte;
if (Offset > 0) and (data = $FF) then goto _END_;
if (Offset < 0) and (data = $00) then goto _END_;

Inc(data,Offset);

if data > $FF then data := $FF else
if data < $00 then data := $00;

_END_:Result := data;
end;
//----------------------------------------------------------------------------
var
cl : TColor;
cr,cg,cb : Word;
begin
// TColorをBGR毎に分ける
cl := iColor;

// B,G,R
cb := $FF and (cl shr 16); // Blue
cg := $FF and (cl shr 8 ); // Green
cr := $FF and cl; // Red

cb := _offset(cb);
cg := _offset(cg);
cr := _offset(cr);

Result := TColor((cb shl 16) or (cg shl 8) or cr);
end;
var
i : Integer;
c : TColor;
Pnl : TPanel;
begin
inherited;

// 色をグラデーション表示
Self.Color := Random($FFFFFF);
c := Self.Color;
for i := 1 to 10 do begin
Pnl := FindComponent('Panel'+IntToStr(i)) as TPanel;
Pnl.Color := OffsetColor(c,25);
c := Pnl.Color;
end;
end;

end.


[PR]
by yozda | 2011-02-12 22:50 | プログラミング | Trackback | Comments(0)
トラックバックURL : http://yozda.exblog.jp/tb/12102026
トラックバックする(会員専用) [ヘルプ]
<< [Delphi] TFrame... [Delphi] TFrame... >>