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

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


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

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

Выпуск № 850
от 26.06.2007, 17:05

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


Вопрос № 92237: Здравствуйте. Подскажите как из Delphi использовать кодек lame_enc.dll без использования доп. компонентов...
Вопрос № 92264: Здравствуйте уважаемые эксперты. В DelphiWorld прочитал, как вставить картинку в RichEdit. Подскажите, пожалуйста, как можносделать панель параметров изображения как в Word`е (контрасность, яркость, обрезка,тип линии и др.) ..
Вопрос № 92305: Здравствуйте уважаемые! Постараюсь объяснить суть проблемы на следующем отрывке из текстового файла: 4 6 77 0 1 8 5 9 99 1 0 9 6 7 181 1 3 35 ну и так далее. Необходимо так организовать цикл прохождения по файлу,что бы встретив в четв...
Вопрос № 92322: Уважаемые эксперты, как упаковать ADOTable, которая есть dbf ...
Вопрос № 92335: Здравствуйте. Как осуществить поиск по таблице Access, так что бы поиск информации осуществлялся по всей таблице, а не по конкретному столбцу? Я знаю такой вариант поиска, но он меня не устраивает, так как поиск информации осуществляется по к...
Вопрос № 92368: Здравствуйте. Скажите можно сделатьтак чтобы сохраненные данные в БД можно было где-то сохранить и если что восстановить. Ситуация: Во время внесения списка были нечаяно удалены не те строчки.Как можно сделать так чтобы в следующий раз после сохранен...

Вопрос № 92.237
Здравствуйте.

Подскажите как из Delphi использовать кодек lame_enc.dll
без использования доп. компонентов
Отправлен: 20.06.2007, 18:36
Вопрос задал: Iamantbkru (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Градов Юрий Михайлович
Здравствуйте, Iamantbkru!
Привожу выдержку из учебника "32 урока по Delphi". DLL- это такое же приложение, как и *.exe. При использовании DLL Вам необходимо знать перечень процедур и функций, входящих в DLL, а также параметры их запуска.

Приложение:

---------
Глаза боятся - руки делают!

Ответ отправил: Градов Юрий Михайлович (статус: Практикант)
Ответ отправлен: 21.06.2007, 01:32


Вопрос № 92.264

Здравствуйте уважаемые эксперты. В DelphiWorld прочитал, как вставить картинку в RichEdit. Подскажите, пожалуйста, как можносделать панель параметров изображения как в Word`е (контрасность, яркость, обрезка,тип линии и др.)
Отправлен: 20.06.2007, 21:37
Вопрос задала: Бушманова Ирина Юрьевна (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Louken
Здравствуйте, Бушманова Ирина Юрьевна!

Что касается, обработки изображения, то и тут уйма проблем. Вы же собираетесь иметь возможность вставки изображений нескольких форматов (bmp, jpg и т.д.), тогда, чтобы иметь возможность обрабатывать эти рисунки, Вам придется перекодировать его в формат BMP (TBitmap). про это смотрите статьи в DelphiWorld:
Преобразовать JPEG в BMP
Как преобразовать WMF в BMP
Как создать BMP из ICO
Как работать с GIF файлами 2
Ищите с помощью поиска (клавиша - F3)

Если говорить про обрезку рисунка, я имею ввиду, с помощью каких средств, конечный пользователь Вашей программы, будет это производить, сделать как в word'e, Вам, скорее всего, неудастся это реализовать, но можно это сделать с помощью четырех кнопочек: обрезать сверху, снизу и т.д или же, с помощью TSpinEdit со вкладки Samples.

Чтобы иметь возможность изменения контрастности изображения, то Вам надо посмотреть статью:
Графика и игры -> Bitmap -> Изменение контрастности изображения,
про изменение яркости, я Вам ничего сказать не могу.

Чтобы установить тип линии у рисунка, Вам придется исходное изображение увеличивать на 1 пиксель со всех сторон (для линии шириной в 1 пиксель), и потом просто нарисовать эту линиию:
Canvas.Pen.Width:=5; //Ширина рамки
Canvas.Pen.Color:=clBlue; //Цвет рамки
Canvas.Pen.Style:=psDot; //Тип линии - пунктир, только учтите что для линии шириной больше 1-го пиксела, свойство Canvas.Pen.Style игнорируется
Canvas.Brush.Style:=bsClear; //Рисуем прямоугольник без заполнения
Canvas.Rectangle(Canvas.ClipRect); //Здесь вставьте нужные размеры Вашей рамки
Canvas.Brush.Style:=bsSolid;

Поворот изображения:
Графика и игры -> Bitmap -> Вращение изображения на заданный угол.

Дак вот, чтобы все эти возможности объединить, вам надо в памяти, всегда иметь исходное изображение, создавать его копию и потом уже изменять ее.

var b1, b2: TBitmap;
...
b2:=TBitmap.Create;
b2.Assign(b1);
//изменяйте b2, b1 - это исходное изображение

Когда Вы, как-то отредактируете Вашу картинку, то старую картинку из RichEdit'a Вам нужно удалить и вставить новую.

И еще напоследок скажу, канва - очень медленная штука, так что не ругайте ее и код, который я Вам дал.

Удачи, в том не легком проекте, за который вы взялись.
Ответ отправил: Louken (статус: 8-ой класс)
Ответ отправлен: 21.06.2007, 11:56


Вопрос № 92.305
Здравствуйте уважаемые! Постараюсь объяснить суть проблемы на следующем отрывке из текстового файла:
4 6 77 0 1 8
5 9 99 1 0 9
6 7 181 1 3 35
ну и так далее. Необходимо так организовать цикл прохождения по файлу,что бы встретив в четвёртом или в пятом числе 0, строка бы удалялась (в данном случае это первая и вторая строки). Числа могут быть и дробными и отрицательными. Количество пробелов между цифрами не является фиксированным числом.Помогите с кодом.
Отправлен: 21.06.2007, 06:33
Вопрос задал: GAZOT (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Coupler
Здравствуйте, GAZOT!
Код в приложении. Чтобы удалить строку, используется вспомогательный файл, куда пишутся все строки без нулей на 4 или 5 месте.

Приложение:

Ответ отправил: Coupler (статус: Практикант)
Ответ отправлен: 21.06.2007, 07:38
Оценка за ответ: 5

Отвечает: Louken
Здравствуйте, GAZOT!

Код в приложении.
Думаю все будет понятно.

Приложение:

Ответ отправил: Louken (статус: 8-ой класс)
Ответ отправлен: 21.06.2007, 10:35
Оценка за ответ: 5


Вопрос № 92.322
Уважаемые эксперты, как упаковать ADOTable, которая есть dbf
Отправлен: 21.06.2007, 09:31
Вопрос задала: K_tash (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Кэр Лаэда
Здравствуйте, K_tash!

Используя ADO, вы Dbf не упакуете. для этого можно использовать BDE

По рекомендации от Microsoft упаковать таблицу через ADO можно посредством запроса SELECT в новую таблицу

приблизительно так

select * into новая_таблица from старая_таблица

в приложении ссылка по теме

Приложение:

---------
Я знаю что ничего не знаю, но я знаю больше, чем тот кто думает что знает все

Ответ отправил: Кэр Лаэда (статус: Студент)
Ответ отправлен: 21.06.2007, 12:38
Оценка за ответ: 5
Комментарий оценки:
Спасибо, хотелось без лишних движений, но вижу никак


Вопрос № 92.335
Здравствуйте.
Как осуществить поиск по таблице Access, так что бы поиск информации осуществлялся по всей таблице, а не по конкретному столбцу?
Я знаю такой вариант поиска, но он меня не устраивает, так как поиск информации осуществляется по конкретному столбцу и требуется точное совпадение наименования, а мне надо, что бы поиск осуществлялся даже если введены только первые буквы.:

//Если строка поиска пустая, то нечего искать
if Trim(Edit1.Text) = '' then
Exit;
//Если нет товара, сообщаем, что не нашли.
if not adoDB.Locate('Название поля', Edit1.Text, []) then
MessageBox(Application.Handle, PChar(Информация в списке отсутствует!'), PChar('Ошибка!'), MB_ICONINFORMATION);
Отправлен: 21.06.2007, 11:35
Вопрос задал: Молостов Дмитрий Викторович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Omickron
Здравствуйте, Молостов Дмитрий Викторович!

Я не работал с таблицей Access.
Но вижу такой выход:

Наверняка есть доступ к столбцам таблицы по индексам. Либо вы знаете все заголовки стобцов таблицы.
В общем, в цикле по столбцам ищите вхождение строки поиска (srstr) в строку поля (instr). Есть такая функция Pos (substr:string; s:strging):integer;
Она возвращает позицию первого символа подстроки substr в строке s, либо 0, если подстрока в строке не найдена.

if Pos(srstr,instr)=0 then
MessageBox(Application.Handle, PChar(Информация в списке отсутствует!'), PChar('Ошибка!'), MB_ICONINFORMATION);

Это - для одной строки. Это же самое нужно сделать в цикле, где будет меняться строка поля (instr)

Удачи!
Ответ отправил: Omickron (статус: 2-ой класс)
Ответ отправлен: 21.06.2007, 11:43

Отвечает: Sandy
Здравствуйте, Молостов Дмитрий Викторович!
Вам, вероятно, следует использовать что-то вроде:
Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]); (взято из хелпа делфи по Locate)
Последняя опция - частичное совпадение, может еще понадобится игнор заглавных/строчных - loCaseInsensitive.
Имхо, мне представляется поиск Locate не самый быстрый путь. Подумайте о рпименени фильтрующих запросов в датасетах, в которых используются SQL выражения вроде LIKE или CONTAINING.
Удачи.
Ответ отправил: Sandy (статус: 4-ый класс)
Ответ отправлен: 21.06.2007, 12:06


Вопрос № 92.368
Здравствуйте. Скажите можно сделатьтак чтобы сохраненные данные в БД можно было где-то сохранить и если что восстановить. Ситуация: Во время внесения списка были нечаяно удалены не те строчки.Как можно сделать так чтобы в следующий раз после сохранения информации ее можно было восстановить из какого-то источника.
Отправлен: 21.06.2007, 15:10
Вопрос задал: Веретенников Игорь Викторович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Примак Руслан Николаевич
Здравствуйте, Веретенников Игорь Викторович!

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

Допустим, при выборке: select * from Goods where Deleted = 0

А при удалении, делаете: update Goods set Deleted = 1 where id = :old_id,
где id - уникальное поле идентифицирующее запись.
Ответ отправил: Примак Руслан Николаевич (статус: 3-ий класс)
Ответ отправлен: 21.06.2007, 15:38

Отвечает: Градов Юрий Михайлович
Здравствуйте, Веретенников Игорь Викторович!
Копируете проводником (файловым менеджером) файлы баз данных и индексные файлы в другую папку (в архив). Файлы могут быть с расширением: *.dat, *.idx, *.db, *.dbf, *.cdx, *.mdb, *.cds. Если Вы не сильны с расширениями файлов, просто скопируйте всю папку с программой в отдельный архив. Если Вы пишите приложение на Delphi, можно предусмотреть кнопку сохранения архивов в ZIP и восстановление архива из ZIP, применив компонент VCLZip.
---------
Глаза боятся - руки делают!
Ответ отправил: Градов Юрий Михайлович (статус: Практикант)
Ответ отправлен: 21.06.2007, 16:09

Отвечает: Кэр Лаэда
Здравствуйте, Веретенников Игорь Викторович!

Можно организовать что то вроди корзины
и тут возникает разделение:
1. если хранить нужно только во время работы приложения, то можно хранить в структурах данных например создать массив Record ов и при удалении записыватьих в него, соответственно при закрытии программы эти данные безвозвратно удаляются. Естественно нужно будет предусмотреть возможность манипуляции этим списком (восстановление, удаление, редактирование)
2. если хранить нужно даже после закрытия
то тогда соглашусь с экспертом Примак Руслан Николаевич, нужно добавить колонку Корзина, и если пользователь удалил строку поставить в эту колонку значение true и соответственно при основной работе не отображать данные в котором поле равно true
ну и конечно не забудьте предусмотреть отдельную работу с данными этими данными (Работа с корзиной)
Удаление (Очистка корзины) восстановление, и т.д.
При очистке корзины просто делать удаление записей где в поле корзина стоит true
а для восстановления просто ставить в поле Корзина false.
---------
Я знаю что ничего не знаю, но я знаю больше, чем тот кто думает что знает все
Ответ отправил: Кэр Лаэда (статус: Студент)
Ответ отправлен: 21.06.2007, 17:37


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

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

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

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

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


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


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

В избранное