Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
7-1074185908
Miau
2004-01-15 19:58
2004.04.04
Типы из DLL


4-1074627646
Iron Maiden
2004-01-20 22:40
2004.04.04
Как убрать мышь


8-1070710296
Astarot
2003-12-06 14:31
2004.04.04
Модем + звук + телефон


1-1079333578
Newb
2004-03-15 09:52
2004.04.04
Адрес офф.сайта Kuliba


3-1078162992
ceval
2004-03-01 20:43
2004.04.04
поменять в таблицы DisplayLabel ,DisplayWidth





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский