Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 763
от 28.03.2007, 08:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 452, Экспертов: 80
В номере:Вопросов: 3, Ответов: 10


Вопрос № 79346: Доброго времени суток! Каким образом можно осуществить плавное перемещение текста по изображению (что то типа титров)? Пробовал через Bitmap.Canvas.TextOut и Canvas.Draw, но текст при изменении координат накладывается сам на себя :(....
Вопрос № 79348: Здравствуйте. У меня вопрос по базам данных Парадокс: при вставке в базу данных записи методом нажатии стрелки вниз на клаве я в событии AfterInsert в одно из полей пишу сразу же какое то значение, вот этот столбец я и не показываю в таб...
Вопрос № 79373: Здравствуйте господа эксперты. Вот строчка кода для сообщения: Application.MessageBox(\\\'текст1\\\',\\\'текст2\\\',MB_OK or (MB_…иконка…)); иконка к сообщению выбирается из ComboBox, как правильно записать переменную? ...

Вопрос № 79.346
Доброго времени суток! Каким образом можно осуществить плавное перемещение текста по изображению (что то типа титров)? Пробовал через Bitmap.Canvas.TextOut и Canvas.Draw, но текст при изменении координат накладывается сам на себя :(.
Отправлен: 22.03.2007, 12:53
Вопрос задал: Maloi (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Pavel Maltsev
Здравствуйте, Maloi!

Очищайте окно, перед тем как рисовать на нем текст. (Canvas.Rectangle)
При этом необходимо установить Canvas.Brush.Color, и Canvas.Brush.Style := bsSolid; - цвет и стиль соответственно для закраски.

Если будет мерцание, то лучше всего все операции по очистке, выводу на экран проводить в памяти (нужно создать экземпляр TBitmap), а потом просто копировать, то что вы нарисовали в памяти на канву формы.
Ответ отправил: Pavel Maltsev (статус: 2-ой класс)
Ответ отправлен: 22.03.2007, 12:58
Оценка за ответ: 4
Комментарий оценки:
мерцание я убираю через InvalidateRect, в Bitmap у меня храниться фоновая картинка

Отвечает: Dragon
Здравствуйте, Maloi! Здравствуйте, Maloi! Покину маленькую идейку, а дальше разрабатывайте.
Label помещенный на форму при щелчке на кнопку перемещается сверху вниз.

procedure TForm1.Button1Click(Sender: TObject);
var
x,y:Integer;
begin
for x:=20 to 200 do begin
Label1.Top:=x;
Application.ProcessMessages;
end;
end;

Удачи!
Ответ отправил: Dragon (статус: 1-ый класс)
Ответ отправлен: 22.03.2007, 15:08

Отвечает: Ерёмин Андрей
Здравствуйте, Maloi!
Чтобы нарисованный ранее текст автоматически стирался при следующем рисовании, нужно рисовать с помощью XOR. Перед рисованием нужно установить этот режим: Canvas.Pen.Style:=psXor;, а затем при каждом выводе текста рисовать тот же самый текст в том же самом месте, что что в последний раз. Тогда он будет стираться. Т.е. у вас сейчас есть нечто вроде:
Canvas.TextOut(...);
И это в цикле или по таймеру прорисовывается. Так вот, нужно перед этим добавить точно такую же команду, но не для новых координат, а предыдущих старых. Например, если изменяется координата по Y (уменьшается), то перед выводом текста в Y+1 нужно его повторно вывести в Y.
Уменьшить мерцание поможет следующая установка:
Form.DoubleBuffered:=True;
Желаю удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Помощь, советы, обмен опытом.
ICQ: 286867644
----
Ответ отправлен: 22.03.2007, 18:37
Оценка за ответ: 4
Комментарий оценки:
Может быть bitmap.Canvas.Pen.mode:=pmxor и всё равно у текста остаётся фон, а нужно что то типа Label1.Transparent:=true;

Отвечает: василий1
Здравствуйте, Maloi!
Если ваша задача позволяет использовать компоненты воспользуйтесь ImageEn
в сети лежит звломанная версия. Полностью рабочую демо весию Вы можете скачать на официальном сайте www{.}hicomponents{.}com
Ответ отправил: василий1 (статус: 1-ый класс)
Ответ отправлен: 23.03.2007, 13:43


Вопрос № 79.348
Здравствуйте.
У меня вопрос по базам данных Парадокс: при вставке в базу данных записи методом нажатии стрелки вниз на клаве
я в событии AfterInsert в одно из полей пишу сразу же какое то значение, вот этот столбец я и не показываю
в таблице, и у меня выходит следующее - при нажатии на стрелку вниз у меня база пополняется пустыми строками.
Мне хотелось бы перед вставкой новой записи проверить в одном из полей введены данные или нет,
для того чтобы исключить вставку пустых записей
Отправлен: 22.03.2007, 13:21
Вопрос задал: Zaur (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Pavel Maltsev
Здравствуйте, Zaur!

Обрабатывайте событие OnBeforePost - срабатывает перед вставкой записи в БД. Если нужное поле пустое - просто то делайте Abort или Cancel;
Ответ отправил: Pavel Maltsev (статус: 2-ой класс)
Ответ отправлен: 22.03.2007, 13:28

Отвечает: Melamed
Здравствуйте, Zaur!
Лучше вставлять значения столбца в событии OnBeforePost, Код шаблона этого сообшения, который вам следует использовать, приведен в приложении приложении

Приложение:

Ответ отправил: Melamed (статус: 10-ый класс)
Ответ отправлен: 22.03.2007, 14:01


Вопрос № 79.373
Здравствуйте господа эксперты. Вот строчка кода для сообщения:
Application.MessageBox(\\\'текст1\\\',\\\'текст2\\\',MB_OK or (MB_…иконка…));
иконка к сообщению выбирается из ComboBox, как правильно записать переменную?
Отправлен: 22.03.2007, 16:22
Вопрос задал: Sgainf (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Pavel Maltsev
Здравствуйте, Sgainf!

Не совсем понятно что вы имеете ввиду... А для чего столько символов обратной черты?
MB_ICON_.... - есть ничто иное как целое число.. Константа.. Вы можите писать
MessageBox(...., 16) - будет выдан "красный фонарь" (MB_ICON_ERROR)
MessageBox(...., 48) - будет MB_ICON_WARNING

Полный перечень кодов вы можите найти в Windows.pas:

MB_ICONHAND = $00000010;
MB_ICONQUESTION = $00000020;
MB_ICONEXCLAMATION = $00000030;
MB_ICONASTERISK = $00000040;
MB_USERICON = $00000080;
MB_ICONWARNING = MB_ICONEXCLAMATION;
MB_ICONERROR = MB_ICONHAND;
MB_ICONINFORMATION = MB_ICONASTERISK;
MB_ICONSTOP = MB_ICONHAND;
Ответ отправил: Pavel Maltsev (статус: 2-ой класс)
Ответ отправлен: 22.03.2007, 16:34
Оценка за ответ: 3
Комментарий оценки:
не совсем то, что мне нужно, я спрашивал, как правильно записать переменную.
P.s. слеши вставились сами при пересылки вопроса, изначально их не было.

Отвечает: Melamed
Здравствуйте, Sgainf!
Метод Application.MessageBox аналог API функции MessageBox, можжет выводить только стандарные иконки Windows'а, (см. MSDN) описания данной функции. Других иконок ты туда не смлжещь вставить. Если тебе нужно анал ;огичное окно со своей иконкой, то самый простой способ, разработать его самому.
Ответ отправил: Melamed (статус: 10-ый класс)
Ответ отправлен: 22.03.2007, 16:46
Оценка за ответ: 2
Комментарий оценки:
Мне и нужны были стандартные иконки: красный круг с крестом, восклицательный знак в треугольнике и т.д. Вопрос состоял в том, что как правильно записать переменную для ComboBox в котором находится: MB_ICONWARNING, MB_ICONERROR, MB_ICONINFORMATION, MB_ICONQUESTION, MB_USERICON.

Отвечает: Ерёмин Андрей
Здравствуйте, Sgainf!
Есть маленькая, но крайне полезная и лёгкая в использовании программа - Master MessageBox. Он генерирует код функции MessageBox. С помощью неё не придётся запоминать всех констант - достаточно просто выбрать требуемые параметры - и код готов. Скачать можно здесь »
Желаю удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Помощь, советы, обмен опытом.
ICQ: 286867644
----
Ответ отправлен: 22.03.2007, 18:47
Оценка за ответ: 3
Комментарий оценки:
Подобных программ типа mmb много, сама программа мне не нужна, мне нужен исходник программы, и его я написал, загвоздка состояла лишь в записи переменной…
Но все равно спасибо за уделенное мне внимание.

Отвечает: Gh0stik
Здравствуйте, Sgainf!

Поскольку так никто и не показал как использовать переключение иконок при помощи ComboBox, вот привожу пример. В обработчике ComboBox1Change() пишем такой код:
procedure TForm1.ComboBox1Change(Sender: TObject);
var i:byte;
begin
case ComboBox1.ItemIndex of
0: i:=MB_ICONWARNING;
1: i:=MB_ICONERROR;
2: i:=MB_ICONINFORMATION;
3: i:=MB_ICONQUESTION;
4: i:=MB_USERICON;
end;
Application.MessageBox('текст1','текст2',MB_OK or i);
end;


Соответственно содержимое ComboBox должно быть таким:
MB_ICONWARNING
MB_ICONERROR
MB_ICONINFORMATION
MB_ICONQUESTION
MB_USERICON


Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 22.03.2007, 21:45
Оценка за ответ: 5
Комментарий оценки:
Огородное спасибо именно то, что нужно!


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: support@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.46 от 18.03.2007
Яндекс Rambler's Top100

В избранное