Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизCanvas.ClipRect Найти похожие ветки
← →
RomeoGolf (2004-03-15 17:42) [0]У Image1.Canvas есть свойство ClipRect, причем, зараза, ReadOnly. При создании этот прямоугольник равен самому Image1, но при изменении размеров компонента при прогоне ClipRect остается прежним и перерисовывается только первоначальная область. Изменять, как любое ReadOnly, не получается, естесственно. Есть, судя по справке, SetClipRect и GetlipRect, насчет второго не пробовал, а первый не работает, дескать необъявленный идентификатор. Вышел из положения, убивая компонент и рождая снова с новыми размерами, но может, кто знает, как с ClipRect"ом бороться?
← →
pasha_golub © (2004-03-15 18:08) [1]Как изменяются размеры компонента? Состояние свойств Strech, AutoSize & Proportional огласите, плиз. И побольше кода.
← →
RomeoGolf (2004-03-15 18:25) [2]К сожалению, насчет кода - та же проблема, что и с другим моим вопросом в этом форуме. Машина, кде исходники, километрах в пяти от машины, где выход в сеть, а вот скопировать куски и захватить с собой не додумался.
Размеры изменяются следующим образом:
Image1.height:= SpinEdit1.Vaiue;
Image1.width := SpinEdit2.Vaiue;
Размеры Image1 изменяются точно, проверено и считыванием размеров, и, например, контролем за координатами мыши над формой - над компонентом форма мышь "теряет"
заполняется Image1.Canvas.Draw(0,0,BMP);
где BMP: TBitMap, и заполняется попиксельно из массива весь, размеры соответствуют, описанным выше финтом проверено.
Измерен также и ClipRect, он не меняется, а хотелось бы.
← →
ek (2004-03-15 18:34) [3]там есть такой глюк у TImage, я делал в дизайне максимального размера, а потом менял его на нужный при открытии формы
← →
RomeoGolf (2004-03-15 18:37) [4]Спасибо, интересное решение, я как-то не подумал.
← →
pasha_golub © (2004-03-15 18:48) [5]RomeoGolf (15.03.04 18:37) [4]
Если делать так
Image1.Canvas.Draw(0,0,BMP);
то ЕСТЕСТВЕННО ClipRect будет равен ClipRect"y BMP. Надо рисовать
Canvas.StretchDraw(..).
И зачем вообще рисовать, если есть Image.Picture.Assign(BMP)?
Вообщем, давайте-ка код - будем чистить.
← →
RomeoGolf (2004-03-15 18:52) [6]Код далеко, притащу к выходным, а ClipRect y BMP нужных размеров, проверял.
← →
pasha_golub © (2004-03-15 19:11) [7]Опять же говорю, обратите внимание на
1. Stretch, Proportional, AutoSize
2. Canvas.StretchDraw
3. Canvas.Picture.Assign(..)
← →
RomeoGolf (2004-03-19 18:30) [8]На всякий случай, вот пример кода:
type
TRGB=record
b,g,r:byte;
end;
function Col2RGB(Col: TColor):TRGB ;
begin
result.r:= Col and $ff; // Знаю, что можно без and $ff, но я перестраховщик.
result.g:= (Col shr $8) and $ff;
result.b:= (Col shr $10) and $ff;
end;
procedure TForm1.Stranitsa(Sender: TObject);
var
b:TBitMap;
p:^TRGB;
x,y:integer;
i :integer;
LocMas: array[0..900] of integer;
begin
Randomize;
for i:= 0 to 900 do
LocMas[i]:= random(255);
b:=TBitMap.Create;
b.pixelformat:=pf24bit;
b.width:=Image3.Clientwidth;
b.height:=Image3.Clientheight;
for y:=0 to b.height-1 do
begin
p:=b.scanline[y];
for x:=0 to b.width-1 do
begin
for i:= 0 to b.width do
p^:= Col2RGB(random($FFFFFF));
inc(p);
end;
end;
//Form1.ControlStyle:= Form1.ControlStyle+[csOpaque]; // - в OnCreate
//Image3.Canvas.Draw(0,0,b);
Image3.Picture.Assign(b);
b.free;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Image3.Height:=Image3.Height+5;
Image3.Width:=Image3.Width+5;
end;
Stranitsa выполняется по таймеру или по кнопке, вариант отладочный, а вообще мне надо двумерный массив (Arr[y,x] of byte) представить в виде цветной таблицы, попиксельно, цвет в зависимости от значения элемента массива.
Image.Picture.Assign(BMP) - действительно работает как надо,
Canvas.StretchDraw(..) - не помогает, а Strech влияет на размеры отображаемого пиксела, а не ClipRect"а. Когда Strech - true, пикселы увеличиваются, заполняя весь Image, но прорисовывается часть массива, влезающая в первоначальную область. Чего я, впрочем, и ожидал. А в сочетании с Proportional получается довольно интересный эффект, впрочем, ненужный и к теме не относящийся.
AutoSize - если true, то в моих условиях(Align = alNone) вообще не дает изменять размеры, а если Align = alГде-то, то работает, но такой вариант не для моей формы. Хотя можно и так, но вы мне уже предложили два отличных варианта - макс. размер в дизайне и Image.Picture.Assign(BMP).
Большое спасибо, мне кажется, тему можно закрывать.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.092 c