Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];

Вниз

Обнаружена ошибка в TImage! (Или в моей дезоксирибонуклеиновой)   Найти похожие ветки 

 
Курдль   (2004-02-18 18:10) [0]

Суть проблемы - TImage не ресайзится!
Т.е. он размеры свои изменяет, но в канве увеличенного размера ничего рисовать не дает. (Или я чего-то в этой жизни не понимаю).
Если кому интересно - пусть выполнит простой пример:

var
Form1: TForm1;
img: TImage;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
img := TImage.Create(nil);

img.Width := 200; img.Height := 200;
img.Canvas.LineTo(img.Width, img.Height);

img.Width := 300; img.Height := 300;
img.Canvas.MoveTo(img.Width, 0);
img.Canvas.LineTo(0, img.Height);

InsertControl(img);
end;


 
Плохиш   (2004-02-18 18:20) [1]

В скобочках сабжа ответ ;-)

А хто за тебе имаге перерисовывать будет? Так что давайка иди книги читать.


 
TUser   (2004-02-18 18:21) [2]

А если так
img := TImage.Create(nil);

img.Width := 200; img.Height := 200;
img.Canvas.LineTo(img.Width, img.Height);

img.Width := 300; img.Height := 300;
img.Picture.Bitmap.Width:=img.width;
img.Picture.Bitmap.Height:=img.height;

img.Picture.Bitmap.Width:=img.Width;
img.Canvas.MoveTo(img.Width, 0);
img.Canvas.LineTo(0, img.Height);

InsertControl(img);

Это то, что надо, или первая линия также должна изменяться вместе с размерами картинки. А вообще, при изменении размеров Image размеры картинки в ней меняются только если поставить Stretch=true;


 
Плохиш   (2004-02-18 18:26) [3]

>TUser © (18.02.04 18:21) [2]

Ты посмотри сначала, куда он свой код пихает ;-)

У него всё вообще только один раз отрисовывается.


 
Курдль   (2004-02-18 18:34) [4]

Плохиш! К ответу! :)

Тут люди спрашивают, как иконку в форме поменять!

Что ты подразумеваешь под перерисовкой Image? Repaint? Refresh?
Не помогает! А нарисовать на канве Line - это и есть простейшая прорисовка, но она не работает!

Спасибо, TUser!
Твой способ работает, но это ж кривота какая-то! :)
Ну ладно, пока пусть так живет :)


 
Плохиш   (2004-02-18 18:42) [5]


> Что ты подразумеваешь под перерисовкой Image? Repaint? Refresh?

OnPaint


 
Плохиш   (2004-02-18 18:44) [6]

FormResize


 
Курдль   (2004-02-18 18:56) [7]

Плошишь! Ты с какого дуба упал?
Если ты внимательно читал в детстве книжки, то OnPaint - всего навсего придуманная процедура, вызываемая системным событием WM_PAINT для объектов ОКОННОГО типа при необходимости их перерисовать.
В данном же случае НЕ РАБОТАЕТ элементарная "резьба по канве" (точнее, по новым границам канвы). И это явный баг!
Ну а FormResize... Ты чё сегодня курил? :)))


 
Игорь Шевченко   (2004-02-18 19:06) [8]

Курдль © (18.02.04 18:56) [

Ты читать умеешь ? Или ты write-only ?


 
Плохиш   (2004-02-18 19:20) [9]

>Курдль © (18.02.04 18:10)

procedure TForm1.FormCreate(Sender: TObject);
begin
img := TImage.Create(nil);

img.Width := 200; img.Height := 200;
img.Canvas.LineTo(img.Width, img.Height);

img.Width := 300; img.Height := 300;
img.Canvas.MoveTo(img.Width, 0);
img.Canvas.LineTo(0, img.Height);

InsertControl(img);
end;

Рекомендую поменять траву


 
Gero   (2004-02-18 21:14) [10]

> OnPaint - всего навсего придуманная процедура
LOL


 
Курдль   (2004-02-18 22:22) [11]

Плохишу.
Чем-то не нравится размещение тестового кода в обработчике onCreate? Я бы мог поместить этот кусок кода куда угодно. Какая разница?
Обработчик OnPaint вызывается системой при необходимости перерисовать форму (объект оконного типа).
А мне надо хотя бы один раз нарисоавть для примера что угодно вне первоначально заявленных границ Canvas-а!
Так ведь и один раз не получается! Я прнимаю это, как баг Delphi.
Я не прав?

Игорю Шевченко.
Извини, если обидел или как-то иначе навредил.

Я пришел сюда за помощью. Если есть желающие снизойти, прошу поделиться своей, просто таки, хакерской крутизной! :)


 
Gero   (2004-02-18 22:35) [12]

> Я прнимаю это, как баг Delphi

Не стоит все свои ошибки валить на Borland.
А если тебе не понятно, то после OnCreate форма перерисовуется, и все твои рисунки стираются.


 
Курдль   (2004-02-18 22:52) [13]

Некоторые ошибки, все же, я отношу и на свой счет (%10).
И что значит
> после OnCreate форма перерисовуется, и все твои рисунки
> стираются
?
Форма перерисовывается весьма часто и для нас незаметно (пока мы не начинаем обрабатывать "вручную" тот самый пресловутый onPaint). Но это не значит, что каждый раз мы должны повторять все "художества" на ее канве, либо на канве ее компонентов.


 
Gero   (2004-02-18 23:02) [14]

> Некоторые ошибки, все же, я отношу и на свой счет (%10)

Почему так много? Ведь эти 10% тоже можно на Borland свалить.


 
Defunct   (2004-02-18 23:27) [15]

> Курдль © (18.02.04 22:52) [13]
> Но это не значит, что каждый раз мы должны повторять все "художества" на ее канве, либо на канве ее компонентов.


TImage не умеет автоматически изменять размеры рисунка. А на экран (при каждом WM_PAINT) он выводит то, что находится в Picture.Bitmap, соответственно увеличив размеры Image, на экране будем наблюдаться белые (непрорисованные) области. Если хотите чтоб не было белого фона, прийдется-таки перерисовывыть Picture.Bitmap при изменении размеров формы, а также изменять размер рисунка вручную. Как показал
TUser © (18.02.04 18:21) [2]


 
Курдль   (2004-02-18 23:37) [16]

Если почитать WinAPI, попробовать, как-что работает, например для C (даже не для С++), тогда можно четко понять, где ответственность ОС, где - компиллятора, а где - моя лично.
Если производители компиллятора заявляют компонент, имеющий размерения и разрешают использовать интерфейс объекта "TCanvas", то я вправе расчитывать на то, что эта технология будет работать так, как она описана в тех. документации (которую я тоже иногда почитываю, в свободное от общения на конференциях и форумах время). В противном случае я имею право заподозрить т.н. баг и обратиться за помощью к тем, кто с такой проблемой сталкивался и знает выход.
Нет времени на досужий базар.
Жаль, что на мой вопль откликнулось так мало DelphiMaster-ов.


 
Курдль   (2004-02-18 23:39) [17]

Defunct!
ЛУЧ СВЕТА В ТЕМНОМ ЦАРСТВЕ! СПАСИБО!

:)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
1-6031
Dysan
2004-02-18 16:30
2004.03.03
добавляються символы #13#10


6-6171
NewD
2003-12-26 13:46
2004.03.03
Как переадресовать запрос на др. комп. в др. сети


3-5958
alex-ran
2004-02-05 15:11
2004.03.03
Запросы на вставку и Исключения


1-6085
dr Tr0jan
2004-02-19 05:58
2004.03.03
Отражение процесса копирования файла.


6-6169
Vilux
2003-12-25 05:02
2004.03.03
Работа с сокетами в Indy, помогите





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский