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

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


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

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

Выпуск № 505
от 17.06.2006, 09:05

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


Вопрос № 45895: Здравствуйте, уважаемые эксперты. Есть image на форме. я работаю с image.canvas.pixels[]. Так вот нужно по нажатию кнопки очищать этот image. Каким наиболее быстрым способом это можно сделать? Возможно ли это сделать не перебирая все точ...
Вопрос № 45908: Здравствуйте уважаемые эксперты! Не подскажите как организовать поиск определённого текста по нескольки текстовым файлам? Желательно с примером. Зараннее большое спасибо!...
Вопрос № 45913: Уважаемые товарищи эксперты!У меня к вам 2 вопроса:как в x:Integer поместить числовое значение компонента TEdit? Каким образом ограничить ввод текста в TEdit только цифрами?...
Вопрос № 45919: Как определить моему приложению полный путь ярлыка, которым оно запущено(Delhpi5; желательно для любой ОС, но достаточно для XP). Я написал приложение, которое выполняется, инсталлируется и деинсталлируется одним и тем же exe-шником. Не могу реш...
Вопрос № 45940: Написал ф-цию, которая возвращает значение типа TStrings, При попытке обработать его возникает ошибка. Подскажите как все сделать правильно....
Вопрос № 45949: Здравствуйте !!! Имеется строка string f:='45*X*X*X*X+10*X*X*X+86*X*X+49*X+88' и функция function Func(x:Real): Real; begin Func:=strtofloat(f); // Trim(f) end; Как сделать так чтобы эта строка f преобразовывалась в функцию 45*X...

Вопрос № 45.895
Здравствуйте, уважаемые эксперты.
Есть image на форме. я работаю с image.canvas.pixels[].
Так вот нужно по нажатию кнопки очищать этот image. Каким наиболее быстрым способом это можно сделать?
Возможно ли это сделать не перебирая все точки изображения?
Отправлен: 11.06.2006, 13:32
Вопрос задал: Lichkaty Alexander (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Ерёмин Андрей
Здравствуйте, Lichkaty Alexander!
Можно делать разными способами:
1) PatBlt(Image1.Canvas.Handle,0,0,Image1.ClientWidth,Image1.ClientHeight,WHITENESS);
2) Image1.Canvas.Brush.Color := ClWhite;
Image1.Canvas.FillRect(Canvas.ClipRect);
3) Image1.Picture.Bitmap.Canvas.Brush.Color := ClWhite;
Image1.Picture.Bitmap.Canvas.FillRect(Canvas.ClipRect);
4) Image1.Picture.Bitmap.FreeImage; (полностью освобождает память)

---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 11.06.2006, 13:35

Отвечает: DeVampir
Здравствуйте, Lichkaty Alexander!
Попробуйте нарисовать на всей очищаемой области прямоугольник методом Rectangle
(можно и FillRect, но он не прорисовывает нижнюю и правую границы), предварительно задайте цвета Brush и Pen - такими же, как и у фона, (не забудьте, потом выставить их обратно, если нужно!) Думаю будет быстрее перебора. Описание методов читайте в Хелпе - там все понятно!
---------
Нам будет трудно - это терпимо! (с) М. Горшенев
Ответ отправил: DeVampir (статус: 1-ый класс)
Ответ отправлен: 11.06.2006, 21:17


Вопрос № 45.908
Здравствуйте уважаемые эксперты!
Не подскажите как организовать поиск определённого текста по нескольки текстовым файлам? Желательно с примером.
Зараннее большое спасибо!
Отправлен: 11.06.2006, 15:41
Вопрос задал: Mihanick (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Mihanick!
1) [Тривиально] Лучше всего, пожалуй, сделать это через TStringList.

В примере внизу предполагается, что в переменной s лежит слово, которое вы ищете, а в массиве строк filnames[] лежат имена файлов по которые вы перебираете по переменной i.

2) [Нетривиально] Можно использовать консольную команду find, запустив ее через WinExec и сохранив результат в файл или, лучше, именованный канал.
Перенаправление вывода консольных комманд осуществляется с помощью '>>'
Когда разберетесь с именованными каналами или придумаете, как халявно читать результаты работы консоли (мне тогда расскажите, пожалуйста ;-), можно будет сделать первым способом =)

Приложение:

Ответ отправил: Сухомлин Кирилл Владимирович (статус: 9-ый класс)
Ответ отправлен: 12.06.2006, 05:38
Оценка за ответ: 5
Комментарий оценки:
Первый ответ, так что 5! Спасиб!


Вопрос № 45.913
Уважаемые товарищи эксперты!У меня к вам 2 вопроса:как в x:Integer поместить числовое значение компонента TEdit?
Каким образом ограничить ввод текста в TEdit только цифрами?
Отправлен: 11.06.2006, 17:33
Вопрос задал: Ustas (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jadd
Здравствуйте, Ustas!
в integer запихнуть строку - нечего делать: StrToInt - функция конвертации. Например,

s: string;
i: integer;

i:=StrToInt(s);

В Вашем случае: i:=StrToInt(Edit1.Text);

Только надо быть уверенным, что в строке точно все цифры. По поводу разрешения-неразрешения. Определяем событие onKeyPress Для TEdit; Дальше оно должно быть примерно таким:

if not (Key in ['0'..'9', #8]) then
begin
Key := #0;
MessageBeep(MB_OK);
end;
Вот такие вот дела.
Успехов.

---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал)
Адрес: Санкт-Петербург
WWW: http://www.sport-diary.ru
ICQ: 28260749
----
Ответ отправлен: 11.06.2006, 17:48
Оценка за ответ: 5
Комментарий оценки:
Спасибо.

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Ustas!
Вообще-то, есть такой хороший компонент, как TMaskedEdit - для него не надо наворачивать собственных обработчиков OnKey...
Ответ отправил: Сухомлин Кирилл Владимирович (статус: 9-ый класс)
Ответ отправлен: 12.06.2006, 05:26
Оценка за ответ: 5
Комментарий оценки:
Приму к сведению, вам тоже спасибо

Отвечает: Serg_6667
Здравствуйте, Ustas!

по первому вопросу все говорит пример в приложении. на нажатие кнопки происходит присваивание
по второму вопросу тоже, но лучше использовать maskedit. Просто обрабатывается событие OnEnter

Приложение:

Ответ отправил: Serg_6667 (статус: 2-ой класс)
Ответ отправлен: 14.06.2006, 18:38
Оценка за ответ: 5


Вопрос № 45.919
Как определить моему приложению полный путь ярлыка, которым оно запущено(Delhpi5; желательно для любой ОС, но достаточно для XP).
Я написал приложение, которое выполняется, инсталлируется и деинсталлируется одним и тем же exe-шником. Не могу решить проблему отличия запуска приложения из ПУСКПРОГРАММЫ..., например, ярлыками "Выполнение..." и "Удаление...", которые бы открывали разные панели диалогов при запуске приложения. Скорее всего это должно быть ShellApi. Перечитал кучу литературы бумажной и электронной, но ничего не нашел - скорее всего не хватило ума и знаний, поэтому обращаюсь к Вам. Заранее благодарен.
Отправлен: 11.06.2006, 18:43
Вопрос задал: Брылкин Константин Юрьевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Tamashev Denis M
Здравствуйте, Брылкин Константин Юрьевич!
Поиши в инете !
Например известная игра Counter-Strike !
Запускаеца от .exe Half-Life !
в разширении просто вписывается -game cstrike !
Вот и ты зделай чтоб запускать -start
для удаления -unistall !
А для практики ничего подсказать немогу !
Ответ отправил: Tamashev Denis M (статус: 2-ой класс)
Ответ отправлен: 11.06.2006, 19:56

Отвечает: DeVampir
Здравствуйте, Брылкин Константин Юрьевич!
В создаваемых ярлыках пропишите различные параметры (например, -r (для запуска), -u (для удаления)) А при запуске читайте их с помощью функции ParamStr (function ParamStr(Index: Integer): string;) ей надо указать номер параметра (у вас будет 1) и она выдаст вам его содержимое в строке (ее сравниваете с возможными и определяете что запускать). Нулевой параметр будет именем запущенного файла.
А посчитать параметры можно фугкцией ParamCount (function ParamCount: Integer;)

---------
Нам будет трудно - это терпимо! (с) М. Горшенев
Ответ отправил: DeVampir (статус: 1-ый класс)
Ответ отправлен: 11.06.2006, 21:47


Вопрос № 45.940
Написал ф-цию, которая возвращает значение типа TStrings,
При попытке обработать его возникает ошибка.
Подскажите как все сделать правильно.

Приложение:

Отправлен: 11.06.2006, 22:20
Вопрос задал: Mo-skin (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Mo-skin!
// для примера:
function MyStrings: Tstrings;
var
i:integer;
begin
//Вот тут изменения :)
MyStrings:=TStringList.Create;
//Конец изменений :)
For i:=1 to 10 do
begin
MyStrings.Add(FloatToStr(i));
end;
end;

MyStrings не создан, а Вы к нему обращаетесь - вот тут и ошибочка.
---------
Ответы на все вопросы - на сайте www.ya.ru :)
Ответ отправил: Устинов Сергей Евгеньевич (статус: Студент)
Ответ отправлен: 11.06.2006, 22:33
Оценка за ответ: 5
Комментарий оценки:
Ага, все понял!

Отвечает: Татьяна
Здравствуйте, Mo-skin!
Ну так вы просто не создаете экземпляр класса, см. приложение, так должно работать

Приложение:

---------
Возможно все. И ничего возможно тоже.

Ответ отправила: Татьяна (статус: Студент)
Ответ отправлен: 11.06.2006, 22:34
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ1

Отвечает: DeVampir
Здравствуйте, Mo-skin!
Ошибка возникает потому что вы к функции (а не к переменной) обращаетесь как к массиву. Попробуйте создать переменную tmp типа TStrings, потом присвоить ей результат функции и добавить строку из tmp в ListBox1
Хотя, не пойму зачем все это делать? Может лучше создать дочерний класс от TStrings и в нем написать функцию заполнения, а потом просто вызывать ее из объектов.
---------
Нам будет трудно - это терпимо! (с) М. Горшенев
Ответ отправил: DeVampir (статус: 1-ый класс)
Ответ отправлен: 11.06.2006, 22:42


Вопрос № 45.949
Здравствуйте !!! Имеется строка string f:='45*X*X*X*X+10*X*X*X+86*X*X+49*X+88' и функция
function Func(x:Real): Real;
begin
Func:=strtofloat(f); // Trim(f)
end;
Как сделать так чтобы эта строка f преобразовывалась в функцию 45*X*X*X*X+10*X*X*X+86*X*X+49*X+88
чтобы затем можно было передать параметр Х и корректно её расчитывать. Функция StrToFloat не помогает,
У меня выскакивает ошибка '45*X*X*X*X+10*X*X*X+86*X*X+49*X+88' is not valid floating point value
Отправлен: 11.06.2006, 23:35
Вопрос задал: Rewer8 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Jadd
Здравствуйте, Rewer8!
ну и правильно Вам пишет. При конвертации strtofloat воспринимает эту строку как строку, т.к. есть символы *,+ и Х. Чтобы правильно работало, надо пропарсить строку, т.е. разбить на операнды и операции. Затем, проанализировать порядок операций в соответсвие с правилами математики. Ну и тд. В сети много исходников таких вот "трансляторов" выражений. Успехов.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал)
Адрес: Санкт-Петербург
WWW: http://www.sport-diary.ru
ICQ: 28260749
----
Ответ отправлен: 11.06.2006, 23:47

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

Вам нужно использовать обратную польскую запись, т.е. разобрать формулу на составные части в соответствии с правилами и порядком дяйствия арефметических операций.

Более подробно можно прочитать:
http://denzhakov.fatal.ru/articles/art3.htm

Так же ОЧЕНЬ вам рекомендую книгу:

Автор: Архангельский А.Я.

Название: Приемы программирования в Delphi

Кол-во страниц: 784.


В ней Вы найдете более подробное описание работы с польской записью. Так же там приведен листинг программы написаной на Delphi.


---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаються события на земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Студент)
Ответ отправлен: 12.06.2006, 10:39


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

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

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

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

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


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


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

В избранное