On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



Пост N: 56
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 31.07.08 05:52. Заголовок: ? DRAW TEXT IN WINDOW


решил попользоваться командой
DRAW TEXT IN WINDOW <WindowName> AT <nRow>,<nCol> VALUE <cString> [ FONT <cFontname> SIZE <nFontsize > ] [ BOLD ] [ ITALIC ] [ UNDERLINE ] [ STRIKEOUT ] [ TRANSPARENT ]

формирует текст правильно.
проблемы появляются когда сдвигом другого окна закрываешь-открываешь этот текст.
Не с первого раза а гдето на пятый-десятый раз.
Аналогично если задвигаешь окно с тестом за границу экрана и возвращаешь наместо.
неправильно прорисовываются рамки, заголовки, сам текст отрывается от своего окна и висит в углу рабочего стола.
Аналогично если менять мышкой размеры окна с обрезанием-восстановлением текста.
Проверял на двух разных компах.
При сворачивании и восстановлении всего окна такого эффекта добиться не удалось.
Думаю проблема возникает при восстановлении изображения части окна, ранее скрытого другим окном или обрезанного краями окна или экрана.
Смутно припоминил что когда-то давно пользовался подобными графическими примитивами в VB(?).
И там приходилось отдельно описывать процедуру восстановления окна т.к. иначе графические примитивы не восстанавливались.
Здесь же попытка прописать повтор текста в ON RESTORE проблему не решила.
Да и другие подобные графический примитив DRAW LINE IN WINDOW и
DRAW ROUNDRECTANGLE IN WINDOW таких проблем не вызывает.

Думаю что экспертам по ядру миниГУИ полезно было бы поискать причины такого поведения системы.



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 5 [только новые]





Пост N: 60
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 04.08.08 07:08. Заголовок: демонстрация косяков



демонстрация косяков
файл Japan.sfx.exe Размер: 463.21 Кб,
лежит здесь http://dump.ru/file_catalog/980948
пароль "Japan2"

После загрузки программы нарисовано пустое поле.
Правую границу можно двигать как угодно сколько угодно раз.
После <Restore> поле заполнено текстом командами DRAW TEXT IN WINDOW.
Надвигая правую границу на текст и возвращая назад несколько раз - получаем косяк.
Еще более жестокую ситуацию получаем спуская окно вниз за границу рабочего стола и возвращая назад в полную видимоостью

Маэстро, нужно что-то делать.




Спасибо: 0 
ПрофильЦитата Ответить
модератор




Пост N: 822
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 04.08.08 14:59. Заголовок: SADSTAR2 пишет: нуж..


SADSTAR2 пишет:

 цитата:
нужно что-то делать


Рекомендую использовать эту команду для полноэкранных приложений либо для окон, у которых нельзя изменять размер (NOSIZE).
Также можно попробовать поместить эту команду в процедуру при обработке события PAINT:

Erase Window Form_1
Draw Text In Window Form_1 ...



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 62
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 05.08.08 10:33. Заголовок: gfilatov пишет: Так..


gfilatov пишет:

 цитата:
Также можно попробовать поместить эту команду в процедуру при обработке события PAINT:

Erase Window Form_1
Draw Text In Window Form_1 ...



Попробовал - еще хуже получилось - вообще не выходит из режима начальной прорисовки окна. "Все пишет да стирает, пишет да стирает"
И, думаю, вот почему.
в файле exdiff.txt есть такая фраза

>DRAW TEXT IN WINDOW <form> - label which updated ON PAINT event

Толком не пойму что это значит, но похоже, что эти команды система миниГУИ автоматом прописывает в OnPaint. В том числе и DRAW LINE.
Но косячит при восстановлении окна только DRAW TEXT.
И чем больше текста - тем раньше и круче.
Т.е. идея хорошая, но реализация сильно ограничила способы использования.

Посмотрел все примеры, где есть эта команда.
Действительно.
Полноэкранные программы, особенно те(!), которые не позволяют переключаться на другие программы, этим косяком не страдают.

Например- ваша FillBlue.
И хотя там не много текста - все два коротких блока - но ошибка в написании функции TextPaint(), которая вызывается при OnPaint, ускоряет процесс наступления косяка.
Ошибка в отсутствии стирания ERASE [ IN ] WINDOW , что при каждом событии OnPaint добавляет в "память окна" по два блока текста которые визуально накладываются друг на друга и незаметны.

С другой стороны добавка
Erase Window Form_1
перед командами DRAW TEXT
только ухудшила дело - программа не выходит из режима начальной прорисовки экрана.
Так что ошибка была правильной!

Всетаки надо бы посмотреть реализацию этой штуки подробно.





Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 40
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 06.08.08 16:15. Заголовок: Извиняюсь за флейм....


Извиняюсь за флейм... но

 цитата:
"Ошибка была правильной!"


- это ЗВУЧИТ :))

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 471
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 06.08.08 17:57. Заголовок: SADSTAR2 пишет: Тол..


SADSTAR2 пишет:

 цитата:
Толком не пойму что это значит, но похоже, что эти команды система миниГУИ автоматом прописывает в OnPaint. В том числе и DRAW LINE.



Так и есть, смотрите h_draw.prg и h_events.prg обработка WM_PAINT.

Есть еще в миниГУИ над чем поработать

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 201
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет