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

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


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

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

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

Выпуск № 1064
от 14.02.2008, 17:05

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

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


Вопрос № 122248: Здравствуйте, уважаемые эксперты! У меня есть ещё 1 вопрос: Есть RichEdit и WebBrowser. При нажатии на кнопку нужно чтобы RichEdit текст сохранился в хтмл файл и загрузился в WebBrowser"е. (в приложении) Впринципе работает,только если я...
Вопрос № 122290: Здравствуйте, эксперты! Предлагаю обсудить такой вопрос: Дан беспорядочный набор букв и база слов в текстовом файле (построчно). Необходимо считывать из файла слово, и посимвольно сравнивать его с набором букв. Если в этом слове присутствуют все букв...
Вопрос № 122314: Доброго времени суток, уважаемые эксперты ! У меня к Вам вопрос связанный с утечкой памяти при использовании функции ShellExecute. Мной написана программка которой часто приходится вызывать внешние приложения при помощи этой функции. Всё ...

Вопрос № 122.248
Здравствуйте, уважаемые эксперты! У меня есть ещё 1 вопрос:
Есть RichEdit и WebBrowser. При нажатии на кнопку нужно чтобы RichEdit текст сохранился в хтмл файл и загрузился в WebBrowser"е.
(в приложении) Впринципе работает,только если я загружаю в РичЕдит файл и жму просмотреть в Браузере,то оно не сохраняет файл наново и не открывает в Браузере.
Можно как-то зделать чтобы файл временно сохранялся в папку с программой,при этом в РичЕдите я работал не во временном файле,а который открывал(тоесть он не пересохранялся). Потом открывался в браузере.( открывается файл- обрабатывается.Когда нужно просмотреть- нажимаем клавишу- текст сохраняется во временный файл-открывается в Браузере)
И есть ли какой-то псевдоним каталога с программой.Чтобы не писать полную путь при открытии файла в браузере ?
Заранее спасибо!

Приложение:

Отправлен: 08.02.2008, 17:16
Вопрос задал: OlegG. (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Marked One
Здравствуйте, OlegG.!
Адрес каталога с программой можно получить так:
ExtractFilePath(paramstr(0));

Приложение:

Ответ отправил: Marked One (статус: 4-ый класс)
Ответ отправлен: 08.02.2008, 17:50


Вопрос № 122.290
Здравствуйте, эксперты! Предлагаю обсудить такой вопрос: Дан беспорядочный набор букв и база слов в текстовом файле (построчно). Необходимо считывать из файла слово, и посимвольно сравнивать его с набором букв. Если в этом слове присутствуют все буквы из данного набора, то выводить его в поле мемо. У мя какая-то чушь получается. Может кто-нибудь сочинит работающий пример? Я не знаю как осуществить сравнение...
Отправлен: 08.02.2008, 21:49
Вопрос задал: Марков Александр Сергеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Denisss

Здравствуйте, Марков Александр Сергеевич!

Имел смелость предположить, что в файле находится по одному слову в строке. Если это не так, то следует немного модифицировать мой пример, находящийся в приложении.

Основа примера - функция CheckWord.
Параметры функции:
Letters - собственно набор букв, который вводится в Edit
aWord - слово из файла
WholeWord - если в слове дважды встречается одна буква, то, если значение WholeWord = True, то в наборе букв тоже должна встречаться эта буква дважды (или более)
CaseSensitive - зависимость от регистра символов (т.е. если True, то если в слове встречается большая буква "О", то и в наборе букв должна встречаться большая буква "О").

Таким образом, если Вам нужно, например, чтобы поиск производился с учетом регистра, то нужно подправить строку из примера:

  if CheckWord(Edit1.Text, aStr) then

на:

  if CheckWord(Edit1.Text, aStr, True, False) then

Удачи!

Приложение:

---------
Будь осторожен, когда молишься ради чего-то, потому что можешь это получить...

Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
----
Ответ отправлен: 10.02.2008, 10:45
Оценка за ответ: 5
Комментарий оценки:
Отлично! Все гениальное просто:)) Только мне немного непонятно: n:= Pos(String(cmpStr[i]), tmpStr); Зачем в этой строке String? Разве здесь нужно преобразование типов? Спасибо, Denisss!


Вопрос № 122.314
Доброго времени суток, уважаемые эксперты !
У меня к Вам вопрос связанный с утечкой памяти при использовании функции ShellExecute.
Мной написана программка которой часто приходится вызывать внешние приложения
при помощи этой функции. Всё вроде бы работает, но ... после каждого использования
ShellExecute размер моей программы в памяти непомерно растёт. При запуске обьём
занимаемой памяти составляет около 3 мегабайт - после запуска нескольких екзешников
бывает переваливает за 10.
Пробовал экспериментировать с параметрами передаваемыми в функцию, но существенной
экономии памяти не получил. Может кто из экспертов подскажет как с этим бороться ?
В качестве примера предлагаю следующий кусок кода (правда в своей программе OpenDialog
я не использую - путь к файлу указывается строкой) , запустите несколько исполняемых файлов
и посмотрите на размеры вашей программы в диспетчере задач.
Среда разработки Delphi 2007.
Заранее благодарен всем кто откликнется !

Приложение:

Отправлен: 09.02.2008, 03:22
Вопрос задал: CEBEP (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Selya
Здравствуйте, CEBEP!
У вас нет утечки памяти. Утечка памяти - это когда при закрытии приложения используемые им ресурсы не оспобождаются. А то, что размер ваше программы в памяти растёт - это нормально.
Вообще в Delphi 2007 есть прекрасный инструмент определения утечек памяти:
Где нибудь в коде OnCreate главной формы а лучше в .dpr файле после Application.Run; пропишите такую команду

ReportMemoryLeaksOnShutdown := DebugHook <> 0;
{только Delphi2006, 2007}

В этом случае вам будет сигнализороваться об утечках памяти в программе:
var
L: TList;
begin
L := TList.Create;
{do something }
//L.Free; // типа забыли сделать Free

Ещё есть один сторонний инструмет сигнализирования утечек памяти: FastMM
http://fastmm.sourceforge.net
Если его настроить, но он может показать не только что происходит утечка памяти, но и показать где эта утечка произошла, вплоть до номера строки.
Ответ отправил: Selya (статус: 7-ой класс)
Ответ отправлен: 09.02.2008, 11:17

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

Первое, что вспомнилось, когда прочитал Ваш вопрос - это тема на одном из форумов программистов. Правда, там обсуждалась утечка памяти при использовании TOpenDialog, но среди ответов были некоторые общие идеи. Я просто процитирую их...

> [1] Virgo_Style © (22.10.07 23:00)
> а ты столбик Виртуальная память смотри. Это чтоб успокоиться. А чтобы
> наоборот, возбудиться, - сверни свое приложение и разверни опять, контролируя
> те же цифры, что и в [0] %-)
На пример с динамическим созданием этого компонента следующий ответ:

> [3] Petr V.Abramov (22.10.07 23:59)
> > OpenDialog1.Free;
> менеджер памяти Borland сделает все честно, но винде память не отдаст.

... и вот такое сравнение:

> [5] Virgo_Style © (23.10.07 08:56)
> Магазин около твоего дома получил со склада ящик пива и продает его
> потихоньку. А если б он с завода банку заказывал только тогда, когда ты
> придешь и закажешь ее - ты б от жажды умер)
>
> Так и тут. Менеджер памяти взял память и распределяет-перераспределяет
> ее "внутри" приложения, бо если за каждым байтом ходить на поклон к ОС -
> накладно выйдет.

Все вышеперечисленные высказывания остаются в силе и для использования любых других компонентов//функций и т.п., т.е. и в Вашем случае. Отсюда первый совет: попробуйте запустить Вашу программу и выполнить из неё несколько вызовов ShellExecute, наблюдая за расходом памяти. Если в какой-то момент рост объёма потребляемой памяти останавливается - значит, всё в порядке, всё объясняется особенностями работы менеджера памяти. Если рост потребления продолжается - проблема есть в Вашей программе, причём необязательно в этом конкретном участке.

И ещё одно. Следует помнить, что для обработки файлов, которые Вы передаёте через ShellExecute на открытие, используются другие приложения, в которых тоже могут происходить утечки памяти, поскольку идеального способа отлавливать такие проблемы ещё никто не нашёл, поэтому и здесь может произойти утечка, хотя, скорее всего, это будет отображаться уже в отношении запущенного Вашей программой приложения. Но вполне возможно, что и на показателях Вашей программы это как-нибудь отразится.

С уважением, DimonSoft.
Ответ отправил: DimonSoft (статус: 3-ий класс)
Ответ отправлен: 09.02.2008, 11:55


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

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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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

В избранное