Вопрос № 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). Если будут вопросы, пишите.
Если имеется ввиду 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)
Здравствуйте, уважаемые эксперты! У меня есть такой вопрос:
Я делаю редактор с подсветкой синтаксиса, хотел бы узнать,как зделать,чтобы программа читала список слов для подсветки с файла(каждое слово в новой строчке) и потом подсвечивала их другим цветом. Используя 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
Здравствуйте, решаю я вот такую задачу(приложение)
Написал в процедуре нажатия на кнопку вот что:
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 чисел по одному в каждой строке.
Почему так получается?
Отвечает: 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 Комментарий оценки: Спасибо, все понятно!