Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
3-1078504651
Aldor
2004-03-05 19:37
2004.04.04
MySQL. Работа с двумя таблицами, блокировка одной из них.


1-1079424777
ikivio
2004-03-16 11:12
2004.04.04
SysErrorMessage(GetLastError) - range Check Error


1-1079254528
Tarquin
2004-03-14 11:55
2004.04.04
Как проверить существование файла при его удалении.


11-1058000796
DSP
2003-07-12 13:06
2004.04.04
IPX-kol данные передать


4-1074679500
Sergey SP
2004-01-21 13:05
2004.04.04
Вставить текст в контрол