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

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


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

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

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

Выпуск № 1099
от 23.03.2008, 05:05

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

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


Вопрос № 127668: Здравствуйте! Прошу помощи новичку по следующим вопросам. Пишу программу по созданию платежки. Бланк платежки набран на форме с параметрами - полная высота - 582, клиентская высота - 555, то есть половина листа А4. На печать(лазерный прин...
Вопрос № 127692: Здравствуйте! Хотел было сравнить - какая из двух формул быстрее считается. То есть эксперимент следующий: сколько раз формула просчитается пока не изменится значение, возвращаемое GetTickCount. (Кстати я думал по названию, что возвр...
Вопрос № 127720: Уважаемые эксперты помогите в решение Задачи: получить все N значные числа в записи которых нет двух одинаковых цифр....
Вопрос № 127723: Уважаемые эксперты помогите в решение Задачи: медианой множества,состоящего из чётного числа точек плоскости, ни какие три из которых не лежат на одной прямой,называетсся прямая, соединяющая две точки множества, с обеих сторон от которой лежит ра...
Вопрос № 127823: Здравствуйте, уважаемые эксперты. У меня такой вопрос: как очистить базу данных .mdb полностью, чтобы автоинкрементные поля тоже обнулились, т.е. база данных была бы девственно чистой....
Вопрос № 127846: Уважаемые эксперты, помогите, пожалуйста, написать задачу на Delphi: Дана строка S и текстовый файл. Добавить строку S в начало файла. Заранее, спасибо=) ...

Вопрос № 127.668
Здравствуйте!
Прошу помощи новичку по следующим вопросам.
Пишу программу по созданию платежки. Бланк платежки набран на форме с параметрами - полная высота - 582, клиентская высота - 555, то есть половина листа А4.
На печать(лазерный принтер по умолчанию) бланк выводится командой Form1.Print.
Вопросы такие.
1. Качество печати получается низким - точками, как-будто напечатано на матричном принтере. Как можно повысить качество печати?
2. Чтобы разместить на форме два бланка (один над другим), я пытался увеличить высоту формы до 1137, но значение параметра автоматически сбрасывается на 780. Как можно изменить высоту формы, чтобы она соотвеnствовала формату А4?
Заранее благодарен за помощь!
С уважением,
Отправлен: 17.03.2008, 06:10
Вопрос задал: Гагарин Андрей Владимирович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 21)

Отвечает: Витомский Вадим Викторович
Здравствуйте, Гагарин Андрей Владимирович!
Попробуйте вместо печати формы использовать генератор отчетов, поставляемый вместе с Delphi. Как его использовать - описывается в любой книге по Delphi.
Как альтернативу, можно использовать вывод в M$ Word, используя сторонние средства (например, библиотека моей собственной разработки, ссылка в приложении)

Приложение:

---------
Не так страшен черт, как его чертовка!

Ответ отправил: Витомский Вадим Викторович (статус: Студент)
Ответ отправлен: 17.03.2008, 09:16
Оценка за ответ: 3
Комментарий оценки:
За ответ спасибо! Возможно предложенный метод действительно наилучший, но про генератор отчетов мне ничего не известно. Что касается вывода в Word, то я хочу сделать программу независимую от офиса. Хотелось бы все-таки получить ответы на мои вопросы. Поэтому такая оценка.


Вопрос № 127.692
Здравствуйте!
Хотел было сравнить - какая из двух формул быстрее считается.
То есть эксперимент следующий: сколько раз формула просчитается пока
не изменится значение, возвращаемое GetTickCount.
(Кстати я думал по названию, что возвращаются тики, а возвращаются миллисекунды.)
Но ни через таймеры не получилось и GetTickCount тоже не подходит.
В приложении я привел программный код, который все время возвращает разные результаты.
В этом коде для упрощения одна и та же формула inc(b).

Приложение:

Отправлен: 17.03.2008, 10:29
Вопрос задал: Бартосик Феликс Михайлович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: PavelGM
Здравствуйте, Бартосик Феликс Михайлович!

Полагаться на GetTickCount на коротких промежутках не стоит. Эта функция корректно работает только на достаточно длинном (более 50 мс) промежутке. Обычно при подсчете скорости работы поступают по-другому - запускают цикл скажем в 10000 итераций и засекают время его выполнения, а потом делят на количество итераций. А вобще с "короткими" (1 мс и меньше) отсечками времени в Windows просто беда.

Если же вы все-таки хотите посчитать выполнение в тиках процессора, то можете воспользоваться вот такой функцией

function GetCPUTicks : Int64;
var TimerLo, TimerHi : Cardinal;
begin
asm
dw 310Fh // rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
Result := Int64(TimerHi) shl 32 + TimerLo;
end;

Ответ отправил: PavelGM (статус: Студент)
Ответ отправлен: 17.03.2008, 10:51
Оценка за ответ: 5
Комментарий оценки:
большое спасибо за GetCPUTicks, хотя так и не понял, в каких единицах измерения этот результат. Более подробно я добавил сообщение на м ини-форум


Вопрос № 127.720
Уважаемые эксперты помогите в решение Задачи:
получить все N значные числа в записи которых нет двух одинаковых цифр.
Отправлен: 17.03.2008, 13:27
Вопрос задал: Demonic (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Николай Владимирович / Н.В.
Здравствуйте, Demonic!
В приложенном файле Вы можете скачать целиком проект.

В приложении - основная часть решения.
На форме размещена кнопка, Edit и Memo.

Удачи!

Приложение:

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

Ответ отправил: Николай Владимирович / Н.В. (статус: Профессионал)
Россия, Москва
WWW: nvsoft.org
ICQ: 420720
----
Ответ отправлен: 17.03.2008, 19:31


Вопрос № 127.723
Уважаемые эксперты помогите в решение Задачи:
медианой множества,состоящего из чётного числа точек плоскости, ни какие три из которых не лежат на одной прямой,называетсся прямая, соединяющая две точки множества, с обеих сторон от которой лежит равное число точек.
Даны действительные числа:
х1,у1,х2,у2,...Хn,Yn(n-нечётное число)
Найти число медиан мн-ва точек с координатами (х1,у1)(х2у2),...(ХnУn) в предположение что никакие три точки этого множества не лежат на одной прямой.
Отправлен: 17.03.2008, 13:30
Вопрос задал: Demonic (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sosedov A.I.
Здравствуйте, Demonic!

В условии опечатка?

Цитата:
х1,у1,х2,у2,...Хn,Yn(n-нечётное число)

Все же n должно быть чётное число.
Вот пример программы, решающей Вашу задачу.

Приложение:

Ответ отправил: Sosedov A.I. (статус: 4-ый класс)
Ответ отправлен: 20.03.2008, 13:32


Вопрос № 127.823
Здравствуйте, уважаемые эксперты. У меня такой вопрос: как очистить базу данных .mdb полностью, чтобы автоинкрементные поля тоже обнулились, т.е. база данных была бы девственно чистой.
Отправлен: 17.03.2008, 21:58
Вопрос задал: Avramenko S.N. (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sosedov A.I.
Здравствуйте, Avramenko S.N.!

Под очисткой базы мы будем понимать ее сжатие, т.е. процедуру, выполняемую через меню "Сервис-Служебные программы-Сжать и восстановить базу данных" программы Access. При этом
1. реорганизуется расположение табличных данных на страницах - после сжатия таблица располагается на соседних страницах. Это повышает производительность, так как таблицы теперь дефрагментированы;
2. объекты и записи, помеченные как удаленные, реально удаляются, что позволяет высвободить дополнительное пространство;
3. текущие значения счетчиков, связанных с полями типа Счетчик, переопределяются, поэтому следующее значение для такого поля будет на единицу превышать максимальное имеющееся значение;
4. обновляются сведения о таблицах, используемые для оптимизации запросов;
5. поскольку сведения о базе данных изменились, все запросы будут заново скомпилированы в момент первого обращения.

Сжатие базы данных Access можно произвести из Delphi c помощью библиотеки Microsoft Jet and Replication Objects. Чтобы использовать библиотеку JRO в приложениях Delphi, нужно открыть новый проект, выбрать из главного меню среды разработки пункт Project / Import Type Library, в диалоговой панели Import Type выбрать Microsoft Jet and Replication Objects 2.1 Library (Version 2.1) и нажать кнопку Install. Это приведет к созданию модуля JRO_TLB , который надо включен в Вашу программу.

А теперь собственно код программы (см. приложение).

База данных c: emp2.mdb сжимается в новую базу c: emp3.mdb.

Примечание. При создании ответа использовалась статья "Borland Delphi и расширения ADO" из http://www.silicontaiga.ru/home.asp?artId=6343

Приложение:

Ответ отправил: Sosedov A.I. (статус: 4-ый класс)
Ответ отправлен: 19.03.2008, 10:37
Оценка за ответ: 4
Комментарий оценки:
Желательно бы без дополнительных библиотек.


Вопрос № 127.846
Уважаемые эксперты, помогите, пожалуйста, написать задачу на Delphi: Дана строка S и текстовый файл. Добавить строку S в начало файла. Заранее, спасибо=)
Отправлен: 18.03.2008, 00:23
Вопрос задала: Гармонова Ирина Анатольевна (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Николай Владимирович / Н.В.
Здравствуйте, Гармонова Ирина Анатольевна!
В приложенном файле сохранен проек целиком.
В приложении основной код программы.
На форме размещены два поля ввода Edit и кнопка. В первое (Edit1) вводится имя файла целиком, т.е. можно ввести полный путь к файлу вида C:dirfilename.txt или file.txt, если файл находится в папке с программой. В поле Edit2 вводится строка, которую нужно добавить.
Добавление строки осуществляется процедурой AddToFile, которой в параметрах передается имя файла (filename) и строка (s), которую нужно добавить в начало файла.
В этой процедуре программа считывает весь файл в переменную f типа TStringList, далее с помощью метода f.Insert перед первой строкой добавляется строчка введенная пользователем.
Затем f (уже содержащая нужную строку в самом начале) снова сохраняется в исходный файл.

Удачи!

Приложение:

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

Ответ отправил: Николай Владимирович / Н.В. (статус: Профессионал)
Россия, Москва
WWW: nvsoft.org
ICQ: 420720
----
Ответ отправлен: 18.03.2008, 10:13

Отвечает: Denisss

Здравствуйте, Гармонова Ирина Анатольевна!

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

Пример использования функции:

procedure TForm1.Button1Click(Sender: TObject);
begin
  AddStrToFile(Edit1.Text, 'file.txt');
end;

Удачи!

Приложение:

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

Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
ICQ: 281599577
----
Ответ отправлен: 18.03.2008, 10:23

Отвечает: Genia007
Здравствуйте, Гармонова Ирина Анатольевна!
Предлагаю такой вот способ решения Вашей задачи:
procedure TForm1.Button14Click(Sender: TObject);
var F: TextFile; s: String; sl: TStringList; i: word;
begin
i:= 0;
sl:= TStringList.Create;{Создали список}
AssignFile(F, 'proba.txt');
Reset(F); {Открыли файл для чтения}
ReadLn(F, s);
sl.Add(s);
While not EOF(F) do {Пока нет конца файла считываем}
begin
ReadLn(F, s);
sl.Add(s);
end;
CloseFile(F); {Закрыли файл}
Rewrite(F); {Открыли файл для перезаписи}
s:= Edit2.Text;
WriteLn(F, s);
While i <> sl.Count do
begin
WriteLn(F, sl.Strings[i]);
Inc(i);
end;
CloseFile(F); {Закрыли файл}
sl.Free; {Уничтожили список}
end;
Ответ отправил: Genia007 (статус: 8-ой класс)
Ответ отправлен: 18.03.2008, 10:29

Отвечает: Лысенков Антон Анатольевич
!!!
Здравствуйте, Гармонова Ирина Анатольевна!

В приложении решение через Tstrings. Можно еще через AssignFile и т.д. если этот способ не устраивает прошу в мини-форум.

Ответ не совсем верный.
Строка добавляется в начало первой строки, а не в начало файла.
Если написать
Strings.Text:=Mystring + #13#10 +Strings.Text;
то будет работать правильно.

К тому же есть метод Tstrings.Insert, позволяющий добавить строку в начало списка.

-----
∙ Отредактировал: Николай Владимирович / Н.В. (Профессионал)
∙ Дата редактирования: 18.03.2008, 13:29

Приложение:

Ответ отправил: Лысенков Антон Анатольевич (статус: 10-ый класс)
Ответ отправлен: 18.03.2008, 10:30


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

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

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

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

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

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


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


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

В избранное