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

Вниз

Объект IMAGE   Найти похожие ветки 

 
DENNIS ©   (2004-01-24 01:03) [0]

Веселей ночки!!!

Есть вопрос, по вроде простому объекту Image, но всетаки:
Есть в форме (не первой) объект Image. Программа работает изменяя (неважно чем) размеры этого объекта (Width, Height). Так вот, пока его не показать (не вызвать эту форму) все работает замечательно, но как только его показать, его размеры не увеличиваются, а только уменьшаются. (В прочем они увеличиваются после уменьшения, до размеров "показа", но не больше).

Есть такая мысля, что это связанно с тем, что Image после того как его чем-либо закрыть, не теряет своего изображения (в отличии от PaintBox), и следовательно оно хранится в памяти. Возможно при первом его показе гдето отводится для него место изходя из размеров, приводе к вышеизложенной проблемме.

Если сее так, то как с этим поступить??? Я 10 раз переделал код, пока искал где ошибка!!! (А ее в коде то и нету!)


 
Некто   (2004-01-24 12:09) [1]

А где код? Не все 10 версий, но хотя бы одну можно?..


 
DENNIS ©   (2004-01-24 13:06) [2]

Маленький кусочек (если весь то ... очень много)

 Form2.Width:=(mx+lx)*10+1;
 Form2.Height:=(my+ly)*10+1;
 Form2.Image1.Width:=(mx+lx)*10+1;
 Form2.Image1.Height:=(my+ly)*10+1;

Соответственно mx..ly - параметры.

Еще выяснил, что размер "фиксируется", когда на нем (Images) что-то нарисовать. Я решил проблему так:
1. Присвоить объекту Images размеры из Screen (больше все равно не видно)
2. Нарисовал в нем маленькую точку.
3. Убрал размеры до первоначальных.

Возможно не рационально, но работает.


 
Mihey ©   (2004-01-24 19:05) [3]

>Form2.Width:=(mx+lx)*10+1;
Form2.Height:=(my+ly)*10+1;
Form2.Image1.Width:=(mx+lx)*10+1;
Form2.Image1.Height:=(my+ly)*10+1;


Ты бы ещё uses написал тут. Я так по опыту могу догадаться, что в Picture ничего не загружено и ты типа рисуешь на канве. Да, канва не меняет в таком случае размеры. Не используй эту канву, используй канву созданного в памяти TBitmap, который потом выводи, например, на форму или на TPaintBox.


 
DENNIS ©   (2004-01-24 22:00) [4]

Thanks за попытку, но инфы 0!!! Да канва, да нельзя. Но я изхитрился. Ведь работает (пусть и памяти будет есть больше - "государство не обеднеет". А кусок этого кода написал чтобы видно было что меняется. Нибуду же я писать весь код на 1000 строк. А что меняет параметры не важно, да хоть кнопка.


 
Mihey ©   (2004-01-24 23:39) [5]

2 DENNIS:

Другого я не ожидал. Ну давай разбираться.

Тот код, что ты привёл - неинформативен. Не нужен весь код, не нужны все твои 1000 строк, а нужно то, что по делу. Например, весьма интересно, делается ли что-то ещё с изображением кроме изменения размеров? Как рисуется, когда рисуется. Но уже это не важно.

Далее, твои способ - замечательный, если он работает, то используй его. Только точки рисовать не надо. Ну а памяти он кушать будет, но в наши дни - это не страшно.

Но увы, ты изхитрился, не решил проблему, а обошёл. А проблема заключается в неправильном коде TImage. Увы, пока не загружено изображение, то канва - постоянных размеров.

Далее, про тот способ, что я предложил. Дело в том, что это не я его придумал, а так делается, так правильнее. Понимаешь? Принцип, проверенный веками. Рисовать на изображение в памяти, а затем его выводить. Очень быстро и удобно. Когда ты рисуешь на канве TImage, то каждый нарисованный тобой элемент тут же отображается. Например, нарисуешь десять тысяч кругов - и каждый будет рисоваться и отображаться тут же. А на отображение уходит время. Другое дело, если ты сначала нарисуешь эти десять тысяч круг в памяти, а потом один раз нарисуешь всё изображение. Можешь посчитать, насколько это будет быстрее.

Выбор за тобой, я всё сказал.

P.S.: Ну а если всё же ты такой упёртый, то удаляй существующую канву и создавай новую. Она создастся нужных размеров.


 
Mihey ©   (2004-01-24 23:59) [6]

2 DENNIS:

Кстати, больше что ли компонентов нет, на чьей канве можно рисовать? Или TImage так радует своей автоматической возможностью перерисовки при перекрытии???


 
DENNIS ©   (2004-01-25 12:18) [7]

Возможно ты прав, делается так, правильнее, но все в этом мире отнасительно. Программа подразум. использование IMAGE. В данном случае так надо (почему писать небуду). Мой вопрос заключался в "можно или нет". Результат - нет, ну и ... Обошел!!! Это даже приятней чем решил. Что касается памяти - "государство не обиднеет, забирайте". Если машина не может предоставить память для одной картинки, ..... Далее, я не упертый. Меня бы тут небыло тогда, ну надо IMAGE. Что касается кода, то он предоставлен для вопроса "да или нет". Не надо искать альтернатив. Сего куска достаточно для этого, и не важно что рисует, главное что не менялось.

Но "в споре рождается истина", Мерси!!!

P.S.

Только не надо 2 ставить - раздражает. И потом не культурно.


 
Mihey ©   (2004-01-25 18:53) [8]

2 DENNIS:

Мне очень не хотелось бы, чтобы твоя секретная программа, которая неважно как меняет размеры и неважно почему использует TImage, но без него пропадёт, висела бы и мозолила глаза где-нибудь в Интернете, пускай и в самом укромном и непосещаемом месте - раздражает очень сильно.

И ещё мне очень не хотелось бы, чтобы через недельку ты опять задал здесь вопрос на тему того, что твоя секретная программа тормозит или неправильно работает. Тоже очень сильно раздражает.


 
DENNIS ©   (2004-01-26 22:41) [9]

Может кому будет полезно. Есть еще одно решение (оптимальнее). Если сделать
IMAGE.PICTURE.GRAPHIC:=nil;
то CANVAS очистится, и можно увиличивать размер, вернее увеличивать можно и до этого, а потом убрать CANVAS.
(Обсуждалось рядом)

Mihey>>
Я не виноват, что ты такой раздражительный. Могу тебя обрадовать, программа работает правильно и не тормозит. Правда она еще не завершена, но графическая часть закончена.

Я не против критики, но говорить, что программа дурацкая, мозолит глаза и работает с глюками, лишь только по тому что она сделала по другому.....

Сюда приходят для того, чтобы найти ответы или их дать, а не для того, чтобы говорить "Какой я умный, а вы все глупые".


 
Mihey ©   (2004-01-26 22:48) [10]

>Сюда приходят для того, чтобы найти ответы или их дать, а не для того, чтобы говорить "Какой я умный, а вы все глупые".

Вот именно ты этим и занимаешься, отвергая ответы по той причине, что это уже настоящая работа по всем правилам, а не попытка выжить на набросанных кнопках и image, расширении до размеров экрана. Завтра у тебя встанет ещё один похожий вопрос - и опять требования программы к железу возрастут на порядок.


 
DENNIS ©   (2004-01-27 21:20) [11]

Все с тобой ясно. Ладно, мне это немного надоело.

Лучше скажи как сделать следующее:

Есть редактор PAINT. В нем интересует следующее:
рисуя линию надо нажать мышу(left), переместить ее, и отпустить. Как получить 4 координаты.


 
Mihey ©   (2004-01-27 22:13) [12]

Эти четыре координаты ты увидишь внизу справа в status panel. Я так полагаю, что ты не это спрашивал, но я так и не понял, что. Возможно 1) ты хочешь симулировать рисование линии в Paint 2) Ты делаешь рисование линии в своей программе и тебе нужно получить координаты. Я угадал?


 
drnet   (2004-01-27 22:23) [13]

;) смешно

Mihey 5 балов.

как способ: по 2 координаты на ONMouseDown и ONMouseUP ?


 
DENNIS ©   (2004-01-27 23:27) [14]

Не совсем линию. Я только привел пример. Разумеется что я имел ввиду не координаты в Паинте. УГАДАЛ!
Никогда не использывал эти события. Все отлично работает.
Thanks!!!



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

Форум: "Media";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.047 c
4-1078821589
PVR
2004-03-09 11:39
2004.05.02
Остановить и стартануть сервис


1-1081844516
snake1977
2004-04-13 12:21
2004.05.02
Наблюдение за окнами


1-1081770981
TButton
2004-04-12 15:56
2004.05.02
SetLength


3-1080914276
Borealis
2004-04-02 17:57
2004.05.02
Отследить реструктуризацию


3-1081251387
Sergey-ZZZ
2004-04-06 15:36
2004.05.02
Конвертация DBF в MSSQL





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