Q&A

  • 뜻대로 되지 않는 플그림....^^
unit Color;

interface

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

type
  TForm1 = class(TForm)
    Bevel1: TBevel;
    Scroll_Red: TScrollBar;
    Scroll_Green: TScrollBar;
    Scroll_Blue: TScrollBar;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    RadioGroup1: TRadioGroup;
    BitBtn1: TBitBtn;
    Memo1: TMemo;
    Edt_Red: TEdit;
    Edt_Green: TEdit;
    Edt_Blue: TEdit;
    BitBtn2: TBitBtn;
    procedure Scroll_RedChange(Sender: TObject);
    procedure Scroll_GreenChange(Sender: TObject);
    procedure Scroll_BlueChange(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
    procedure Set_Color;
  public
  published
    procedure Show_Color;
    { Public declarations }
  end;

var
  Form1: TForm1;
  Def_fCol, Def_bCol: TColor;    //색상의 기본값을 저장한다.

implementation

{$R *.dfm}

//패널이 지정한 색값을 넣어준다.
procedure TForm1.Set_Color;
var
    Col : TColor;
begin
    //스크롤 바의 움직인 위치값을 Col에 넣는다.
    Col := RGB(Scroll_Red.Position, Scroll_Green.Position, Scroll_Blue.Position);

    if RadioGroup1.ItemIndex = 0 then
      //글자색을 변경한다.
      Memo1.Font.Color := col
    else
      //배경색을 변경한다.
      Memo1.Color := col;
      Show_Color;
end;

procedure TForm1.Scroll_RedChange(Sender: TObject);
begin
    Set_color;
end;

procedure TForm1.Scroll_GreenChange(Sender: TObject);
begin
    Set_color;
end;

procedure TForm1.Scroll_BlueChange(Sender: TObject);
begin
    Set_color;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
    Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Show_Color;
  Def_fCol := Memo1.Font.Color; //글자색의 초기값을 저장한다.
  Def_bCol := Memo1.Color;      //배경색의 초기값을 저장한다.
end;

//현재 스크롤바의 색상을 보여준다.
procedure TForm1.Show_Color;
begin
   Edt_Red.Text := InttoStr(Scroll_Red.Position);
   Edt_Green.Text := InttoStr(Scroll_Green.Position);
   Edt_Blue.Text := InttoStr(Scroll_Blue.Position);
end;

//화면의 색상을 기본값(Default)으로 변경
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
   //에디트 박스에 기본값인 0을 입력한다.
   Edt_Red.Text := '0';
   Edt_Green.Text := '0';
   Edt_Blue.Text := '0';
   //화면색과 글자색을 기본색으로 변경
   Memo1.Font.Color := Def_fCol;
   Memo1.Color := Def_bCol;
   //스크롤바를 기본 값으로 되돌진다.
   Scroll_Red.Position := 0;
   Scroll_Green.Position := 0;
   Scroll_Blue.Position := 0;
end;

end.

--------------------------------------------------------------------
이상이 책을 보고 짠 글자색과 배경색을 바꾸는 프로그램을 약간 변경한건데요..
프로그램은 스크롤 바를 이용하여 글자색과 배경색을 바꾸는 프로그램입니다.

원래 계획은 Default(BitBtn2)를 클릭하면 저장된 기본 글자색과 배경색이 바뀌는 프로그램이었습니다... 하지만 계획과는 달리 글자색은 기본색으로 바뀌는데 흰색이었던 배경색이 검은색으로 보입니다. 그상태에서 다시한번 Default키를 눌러야만 원래의 배경색인 흰색이 나옵니다. 아직 초보단계라 문제가 무엇인지 모르겠네요.... 제발 도움부탁 드립니다.
1  COMMENTS
  • Profile
    루단스 2002.04.04 10:31

    //스크롤바를 기본 값으로 되돌진다.
    Scroll_Red.Position := 0;
    Scroll_Green.Position := 0;
    Scroll_Blue.Position := 0;

    //화면색과 글자색을 기본색으로 변경
    Memo1.Font.Color := Def_fCol;
    Memo1.Color := Def_bCol;

    이렇게 위부분을 위치를 바꿔보세요.
    제가볼때는 아무문제없는데..
    님께서 하신것에서는 기본색으로 바꿔주고
    다시 스크롤바를 0으로 해주는과정에서 스크롤바체인지 이밴트에서
    색을 바꾸는것이아닌지 의심이가는군요.

    그러니...위에처럼...두부분처리하는곳의 위치만 바꿔서 해보세요.
    다른문제는 아닌듯합니다.
    그럼 즐코하세요.