为何不能编译通过?问题出在rgb_color(j)这,我只是想显示三个色条,源程序是显示一个色条的,我在外加了一个FOR(50分)

  • 主题发起人 主题发起人 chinasea
  • 开始时间 开始时间
C

chinasea

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.FormPaint(Sender: TObject);
var i:tcolor;
j:integer;
rgb_color:(clred,clgreen,clblue);
begin
with paintbox1do
begin
for j:=1 to 3do
begin
for i:=clblack to integer(rgb_color(j))do
begin
canvas.pen.color:=i;
canvas.moveto(integer(i-clblack)+20,10);
canvas.lineto(integer(i-clblack)+20,50);
end;
end;
end;
end;
 
一、
var
rgb_color:(clred,clgreen,clblue);
改为:
type
Trgb_color = (clred, clgreen, clblue);
// 先定义类型
var
rgb_color: Trgb_clolr;
二、
rgb_color(j)改为 Trgb_color(j)
^^^^^^^^^
这是变量名,怎么能强制转换呢?
 
因为rgb_color是一个枚举类型,你可以声明一个此类型的变量,不过变量只能
是此类型中的某一个值,且必须是此类型中的值
好好看看枚举类型的资料
 
可以用
i: trgb_color;
for i := clred to clbluedo
begin
canvas.color := i;//可能不行,那只能 case 了。
end;
 
前面的回答都没有回答到点子上!!!
你错在变量申明部分。你可选择将rgb_color定义为数组类型变量或数组类型常量。
注意:在定义数组时,一定要加上“Array of ”哦!!
方法1:将rgb_color定义为数组类型变量,代码如下:
var
rgb_color: array [1..3] of TColor;
方法2:将rgb_color定义为数组类型常量,代码如下:
const
rgb_color:= array [1..3] of TColor = (clred,clgreen,clblue);
在下面附上分别用第二种方法修正后的程序代码,保证可以编译通过。
procedure TForm1.FormPaint(Sender: TObject);
var
i:tcolor;
j:integer;
const
rgb_color:= array [1..3] of (clred,clgreen,clblue);
begin
with paintbox1do
begin
for j:=1 to 3do
begin
for i:=clblack to integer(rgb_color[j])do
begin
canvas.pen.color:=i;
canvas.moveto(integer(i-clblack)+20,10);
canvas.lineto(integer(i-clblack)+20,50);
end;
end;
end;
end;
 
我按turborabbit的方法试了,还是不行。
编译时还是出错:
rgb_color:= array [1..3] of tcolor=(clred,clgreen,clblue);
我给加了一些 ^^^^^^^
另:clred=255
clblue=32768
clgreen=1617....
我如何做循环,难道如下:
j=1 255^1
j=2 255^2
j=3 255^3
看来用tcolor是很难解决此问题了?
 
procedure TForm1.Button1Click(Sender: TObject);
const
clTable: array [1..3] of TColor = (clRed, clGreen, clBlue);
var
I: Integer;
begin
with PaintBox1do
for I := 1 to 3do
begin
Canvas.Pen.Color := clTable;
Canvas.Pen.Width := 4;
Canvas.MoveTo(I * 10, 100);
Canvas.LineTo(I * 10, 200);
end;
end;
 
哈哈, 好久见不到如此少女般可爱的问题了, 俺替你作了一段供参考
要画出渐变的单色条,关键在于对RGB分量的计算.
var
i, j, r: integer;
k:do
uble;
begin
k := 1 / PaintBox1.Width;
for j := 1 to 3do
begin
for i := 0 to PaintBox1.Widthdo
with PaintBox1.Canvasdo
begin
R := Round(255 * k * i);
case j of
1: pen.Color := TColor(RGB(R,0,0));
2: pen.Color := TColor(RGB(0,R,0));
3: pen.Color := TColor(RGB(0,0,R));
end;
moveto(i, (j-1)* (PaintBox1.Height div 3));
lineTo(i, j * (PaintBox1.Height div 3));
end;
end;
end;
 
多人接受答案了。
 
后退
顶部