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

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

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

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

Выпуск № 1060
от 10.02.2008, 15:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 437, Экспертов: 58
В номере:Вопросов: 5, Ответов: 13

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 121670: Уважаемые эксперты! Подскажите пожайлуста как описать функцию E в степени - bt Заранее спасибо...
Вопрос № 121684: Здравствуйте, уважаемые эксперты! У меня есть такой вопрос: Я делаю редактор с подсветкой синтаксиса, хотел бы узнать,как зделать,чтобы программа читала список слов для подсветки с файла(каждое слово в новой строчке) и потом подсвечивала их ...
Вопрос № 121701: Здравствуйте, решаю я вот такую задачу(приложение) Написал в процедуре нажатия на кнопку вот что: procedure TForm1.Button2Click(Sender: TObject); var i:integer; a:array[0..9] of integer; begin randomize; for i:=0 to 9 do<b...
Вопрос № 121731: Здравствуйте господа эксперты. Работаю над программой, которая использует DirecDraw. Если запускать её из под винды, то проблем не возникет, но мне необходимо её отлаживать, и тут возникает проблема, с которой я не могу справиться, а иммено из под де...
Вопрос № 121749: Здравствуйте! Хочу поинтересоваться насчет TImage. Как получить три составляющих (RGB) цвета определенного пиксела из TImage.Canvas.Pixels[i,j] И еще. Есть ли разница в использовании подобных способов при изображениях с разными разширениями, ...

Вопрос № 121.670
Уважаемые эксперты! Подскажите пожайлуста как описать функцию
E в степени - bt
Заранее спасибо
Отправлен: 04.02.2008, 22:32
Вопрос задал: Alex573 (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Николай Владимирович / Н.В.
Здравствуйте, Alex573!
Для возведения числа в степень используйте функцию power из модуля math.
Далее, например, циклом проходите нужные значения t (b=const, как я понимаю) и возводите e в степень b*t : result := power(e,b*t).
Если будут вопросы, пишите.

Удачи!

Приложение:

Ответ отправил: Николай Владимирович / Н.В. (статус: Специалист)
Ответ отправлен: 04.02.2008, 22:41

Отвечает: Маренич Владимир
Здравствуйте, Alex573!

Если имеется ввиду e-основание натурального логарифма, то в Паскале есть такая функция EXP(X: real): real, которая выполняет возведение числа "e" в степень X. В Делфи ее никто не отменял (смотрите хелп, если надо). В Вашем случае если bt - это переменная, то получим выражение y:=exp(bt). Если bt - это b*t, как в ответе Н.В., то y:=exp(b*t).

Удачи :)
Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 05.02.2008, 01:11

Отвечает: Евчик Сергей Александрович
Здравствуйте, Alex573! Возвести число в степень можно так: exp(ln(e)*bt)
Ответ отправил: Евчик Сергей Александрович (статус: 2-ой класс)
Ответ отправлен: 05.02.2008, 16:28


Вопрос № 121.684
Здравствуйте, уважаемые эксперты! У меня есть такой вопрос:

Я делаю редактор с подсветкой синтаксиса, хотел бы узнать,как зделать,чтобы программа читала список слов для подсветки с файла(каждое слово в новой строчке) и потом подсвечивала их другим цветом. Используя RichEdit. Буду благодарен за любую помощь. В Делфи не очень разбираюсь :(
Отправлен: 04.02.2008, 23:46
Вопрос задал: Gaolong (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 13)

Отвечает: Selya
Здравствуйте, Gaolong!
В RichEdit, конечно, можно сделать подсветку синтаксиса, но это ...проблематично... И на определённом этапе мне встретился какой-то непреодолимый глюк, заставивший меня отказаться от RichEdit. Мне как-то посоветовали использовать SynEdit. Там это реализовано гораздо элегантнее.
Компонент бесплатный. http://synedit.sourceforge.net
Если заинтересуешься, могу выслать работающий примерчик.
Ответ отправил: Selya (статус: 6-ой класс)
Ответ отправлен: 05.02.2008, 09:03

Отвечает: Евсюков Виталий Евгеньевич
Здравствуйте, Gaolong!
Создавайте XML-файл (на больших объемах данных это будет удобнее), описывайте типы слов в нем (ключевые, комментарии, числа) и их стили. В другом файле описывайте собственно слова, входящие в эти разделы. Парсим файлы, сохраняем настройки в памяти (в массивах, множествах, списках строк и т.д.), и при нажатии клавиши анализируем, встречается ли написанное слово (обычно анализ производить, если нажатая клавиша - открывающая скобка либо пробел) в списке необходимых для оформления и, собственно, юзаем SelAttribytes )
Работа огромная, не разберешься, коли новичок
---------
I Aear can ve na Mar
Ответ отправил: Евсюков Виталий Евгеньевич (статус: 3-ий класс)
Ответ отправлен: 05.02.2008, 22:57


Вопрос № 121.701
Здравствуйте, решаю я вот такую задачу(приложение)
Написал в процедуре нажатия на кнопку вот что:
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
a:array[0..9] of integer;
begin
randomize;
for i:=0 to 9 do
a[i]:=random(20)-10;
listbox1.items.add(inttostr(a[i]));
end;
И в listbox1 в первой строке выводятся 7 случайных чисел, а надо чтобы было 10 чисел по одному в каждой строке.
Почему так получается?

Приложение:

Отправлен: 05.02.2008, 07:19
Вопрос задал: Исаак Моисеевич (статус: 2-ой класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 20)

Отвечает: BlackRaider
Здравствуйте, Исаак Моисеевич!
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
a:array[0..9] of integer;
begin
randomize;
for i:=0 to 9 do
BEGIN
a[i]:=random(20)-10;
listbox1.items.add(inttostr(a[i]));
END;
end;

Вот так будет лучше. если в цикле больше одного оператора то они заключаются в программные скобки (BEGIN END)
Ответ отправил: BlackRaider (статус: 3-ий класс)
Ответ отправлен: 05.02.2008, 08:35
Оценка за ответ: 5

Отвечает: Selya
Здравствуйте, Исаак Моисеевич!
Это не 7 случайных чисел, это семизначное число (Integer) a[i], где i=10. Т.е. превышены границы массива.
Вы, уважаемый, забыли begin..end для цикла поставить. И вообще то такие вещи надо в дебаггере отлавливать.
Ответ отправил: Selya (статус: 6-ой класс)
Ответ отправлен: 05.02.2008, 08:54
Оценка за ответ: 5
Комментарий оценки:
понятно

Отвечает: Виктор Пырлик
Здравствуйте, Исаак Моисеевич!

вот проект.. там вроде всё.

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Если ничего не помогло - надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: Специалист)
Ответ отправлен: 05.02.2008, 09:00
Оценка за ответ: 5
Комментарий оценки:
вот это интересней...

Отвечает: Genia007
Здравствуйте, Исаак Моисеевич!
Надо изменить код на такой, и всё работает как Вы хотите.
procedure TForm1.Button8Click(Sender: TObject);
var i:integer;a:array[0..9] of integer;
begin
randomize;
for i:=0 to 9 do
begin\ Начало цикла for
a[i]:=random(20)-10;
listbox1.items.add(inttostr(a[i]));
end;\ конец цикла for
end;
Ответ отправил: Genia007 (статус: 5-ый класс)
Ответ отправлен: 05.02.2008, 10:40
Оценка за ответ: 5

Отвечает: Евчик Сергей Александрович
Здравствуйте, Исаак Моисеевич! Думаю так будет правильнее:procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
a:array[0..9] of integer;
begin
randomize;
for i:=0 to 9 do
begin
a[i]:=random(20)-10;
listbox1.items.add(inttostr(a[i]));
end;
end;
end.
Все дело в том что for действует лишь на одну строку. А если строк у Вас больше приходится использовать операторные скобки (begin end;)
Ответ отправил: Евчик Сергей Александрович (статус: 2-ой класс)
Ответ отправлен: 05.02.2008, 16:20
Оценка за ответ: 5


Вопрос № 121.731
Здравствуйте господа эксперты. Работаю над программой, которая использует DirecDraw. Если запускать её из под винды, то проблем не возникет, но мне необходимо её отлаживать, и тут возникает проблема, с которой я не могу справиться, а иммено из под делфи она никак не хочет работать, возникет следующая ошибка при запуске DirecDraw:
debugger detected - please close it down and restart!
Windows NT users: Please note that having the
WinIce/Softice service installed means that you are
running a debugger!
Может кто что-нибудь посоветует, буду благодарен всем написавшим.
Отправлен: 05.02.2008, 10:48
Вопрос задал: Genia007 (статус: 5-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: DimonSoft
Здравствуйте, Genia007!

По каким книгам Вы изучаете DirectX? Дело в том, что, например, Краснов, постоянно говорит о том, что приложения для работы с DirectX'овыми библиотеками следует запускать не из Delphi, а из Проводника. DirectX - это набор библиотек, обеспечивающих программе почти прямое взаимодействие с аппаратными ресурсами компьютера (через HAL), а для некоторых видову взаимодействия желателен эксклюзивный доступ к этим самым ресурсам, что неосуществимо при наличии отладчиков.

Про Delphi, кстати, в сообщениях ничего не сказано, есть упоминание SoftIce. Но если SoftIce у Вас не утсановлен - значит, проблема связана именно с Delphi'йским отладчиком и следует сделать из этого соответствующие выводы.

И ещё, маленький совет. Microsoft'овцы говорят, что использование DirectDraw не рекомендуется, в 9-й версии DirectX'а, по моим воспоминаниям, он, если и присутствует, то без малейших изменений по сравнению с DirectDraw, входившим в состав более ранних версий DirectX'а. Вместо DirectDraw рекомендуется использование Direct3D, например, в режиме двухмерных построений. Поверьте, это именно тот случай, когда к мнению разработчиков Microsoft'а можно прислушиваться не вдаваясь в подробности.

С уважением, DimonSoft.
Ответ отправил: DimonSoft (статус: 3-ий класс)
Ответ отправлен: 05.02.2008, 11:50
Оценка за ответ: 5
Комментарий оценки:
Спасибо, У меня 7 версия дэлфи. Про книги вопрос хороший, у нас в городе с этим проблема (хорошая литература только под заказ и в тридорога), так что приходится изучать по примерам и статьям из Нета в основном DelphiWord.


Вопрос № 121.749
Здравствуйте!
Хочу поинтересоваться насчет TImage. Как получить три составляющих (RGB) цвета определенного пиксела из TImage.Canvas.Pixels[i,j]
И еще. Есть ли разница в использовании подобных способов при изображениях с разными разширениями, загруженными в Image. Если что-то в их обработке должно измениться, то хочу услышать и то, что именно должно измениться
Отправлен: 05.02.2008, 13:21
Вопрос задал: Troyan (статус: Студент)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Selya
Здравствуйте, Troyan!
1. Всё очень просто:
uses Graphics;

ColorToRGB(Color: TColor): Longint;

Если нужно разбить цвет на составляющие:
GetRValue(RGB: Cardinal): Byte;
GetGValue(RGB: Cardinal): Byte;
GetBValue(RGB: Cardinal): Byte;

Пример:

var
RGB: LongInt;
R, G, B: Byte;
begin
RGB := ColorToRGB(Image1.Canvas.Pixels[0,0]);
R := GetRValue(RGB);
G := GetGValue(RGB);
B := GetBValue(RGB);
end;

2. Разницы нет. Все "разширения" преобразуются в TBitmap
Ответ отправил: Selya (статус: 6-ой класс)
Ответ отправлен: 05.02.2008, 13:56
Оценка за ответ: 5
Комментарий оценки:
Спасибо за быстрый и точный ответ!

Отвечает: Delph
Здравствуйте, Troyan!

Не понял логику в предыдущем ответе (эксперт Selya), поэтому предложу свой вариант. Собрать цвет из составляющих можно таким образом:

RGB := Red + Green * 256 + Blue * 65536;

Значит, разложить его можно аналогичным образом:

RGB := TImage.Canvas.Pixels[i,j];
Red := RGB mod 256; RGB := RGB div 256;
Green := RGB mod 256; RGB := RGB div 256;
Blue := RGB mod 256;

Несколько грубовато, но по крайней мере работает.

---------
Сомневайся во всём! Реальность часто бывает не такой, как мы о ней думаем.
Ответ отправил: Delph (статус: Студент)
Ответ отправлен: 05.02.2008, 14:50
Оценка за ответ: 5
Комментарий оценки:
Спасибо, все понятно!


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

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

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

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

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

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


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


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.70 от 17.01.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное