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

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


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

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

Выпуск № 603
от 26.09.2006, 10:35

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


Вопрос № 56060: Уважаемые эксперты, помогите... Есть в SQL таблице два поля (тип datetime) имеют напрмер вот такой вид: 10.09.2006 10:05:56 ну и второе поле к примеру 20.09.2006 10:10:56 Как узнать разницу времени между этими датами??????? ...
Вопрос № 56061: Доброго времени суток, господа эксперты! Заранее прошу извинить меня за глупый вопрос))) Предположим, в OnTimer примерно такая конструкция: s:=’Text Text Text’; inc(i); if i<=Length(s) then Memo1.Text:=Memo1.Text+...
Вопрос № 56123: Уважаемые,эксперты. Помогите решить проблему.Есть дерево папок:папка "А0",в ней 20 подпапок "Б0"-"Б19",в каждой по 30 подпапок "В0"-"В29", а в каждой по 28 подпапок "Д0"-"Д27" ...
Вопрос № 56129: Как уменьшить размер exe-файла такого приложения, т.е. чтоб переписать на WinApi не используя Comobj, ActiveX, Variants. Почему-то достаточно даже объявить переменную типа Variant в программе и начинает подключатся модуль Variants (без указания в...
Вопрос № 56150: Ситуация такова: Во время работы программы создаются пользователем компоненты Tshape. как приписать им события на onclick,onmousedown etc. у меня же по завершении работы события:showmessage возникает ошибка: First chance exceptio...
Вопрос № 56180: сБЮФЮЕЛШЕ ЩЙЯОЕПРШ. оНЛНЦХРЕ ПЕЬХРЭ ОПНАКЕЛС. еЯРЭ ДЕПЕБН ОЮОНЙ: ю0 -> а0...а29 -> б0...б18 -> ц0...ц26, Ю СФЕ Б ОНДОЮОЙЮУ ц КЕФЮР ТЮИКШ РХОЮ *.cmt. йЮЙ ЯПЕДЯРБЮЛХ Delphi ХКХ WinAPI ХГ Delphi ЯЙНОХПНБЮРЭ БЯЕ ЩРХ ТЮИКШ Б НДМС ОЮОЙС МЮ ДП...
Вопрос № 56182: Добрый день, уважаемые! У меня вопрос по компонентам JEDI. Собственно установка проходит замечательно, Delphi ( у меня 2005-я ) запускается, все работает. Но потом начинается самое интересное - с каждым разом на запуск Delphi уходит все больше и ...

Вопрос № 56.060
Уважаемые эксперты, помогите...

Есть в SQL таблице два поля (тип datetime) имеют напрмер вот такой вид: 10.09.2006 10:05:56
ну и второе поле к примеру 20.09.2006 10:10:56
Как узнать разницу времени между этими датами???????

Пробовал на пустом проекте создавать две Label и вычитать их между собой получаеться результат: 09.01.1900 0:05:00
т.е. время то правильно вычитаеться вроде, а откуда береться 09.01.1900 ???

Приложение:

Отправлен: 20.09.2006, 10:38
Вопрос задал: Пепеляев Александр Павлович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Пепеляев Александр Павлович!

Дело в том, что исчисление дат начинается с 31.12.1899.
Разницу между датами, временем можно узнать с помощью функций модуля DateUtils - DaysBetween, MonthsBetween, др.
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 5-ый класс)
Ответ отправлен: 20.09.2006, 10:53

Отвечает: sir henry
Здравствуйте, Пепеляев Александр Павлович!
Разницу между датами-временем можно вычислить обычным вычитанием:
Var
dt1: TDateTime;
dt2: TDateTime;
dt3: TDateTime;
Begin
dt3:=dt1-dt2;
{Далее можно либо преобразовать в строку для просмотра}
Label1.Caption:=DateTimeToStr(dt3);
{Либо декодировать дату-время на отдельные составляющие для дальнейшей обработки}
DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word);
{Здесь каждая составляющая - год, месяц, день, час, минута, секунда - представлена поотдельности}
End;
Тип TDateTime - это число с запятой посередине. Левая часть числа (до запятой) это дата, а правая часть (после запятой) - это время. Таким образом если взять число 0,0 то это будет 30.12.1899 12:00, полдень. Эта дата и время соответствует нулю.
Если разницу между датами нужно получить в днях, то используйте специальную функцию из модуля DateUtils - ВфныИуецуут(), если в месяцах, то MonthsBetween(), если в часах, то HoursBetween() и т.д. Для каждой составляющей даты-времени есть специальная функция вычисления разницы между двумя датами.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 20.09.2006, 11:14


Вопрос № 56.061
Доброго времени суток, господа эксперты!

Заранее прошу извинить меня за глупый вопрос)))
Предположим, в OnTimer примерно такая конструкция:

s:=’Text Text Text’;
inc(i);
if i<=Length(s) then
Memo1.Text:=Memo1.Text+s[i];

Собственно, вопрос в том, как заставить двигаться курсор за текстом?
Отправлен: 20.09.2006, 10:39
Вопрос задал: UnRe@l (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: n0name
Здравствуйте, UnRe@l!
if i<=Length(s) then
begin
Memo1.Text:=Memo1.Text+s[i];
inc(Memo1.CaretPos.X)
end;
Ответ отправил: n0name (статус: 6-ой класс)
Ответ отправлен: 20.09.2006, 10:46


Вопрос № 56.123
Уважаемые,эксперты.
Помогите решить проблему.Есть дерево папок:папка "А0",в ней 20 подпапок "Б0"-"Б19",в каждой по 30 подпапок "В0"-"В29", а в каждой по 28 подпапок "Д0"-"Д27" с файлами типа *.uni.Можно ли средствами Delphi (или WinAPI из Delphi) скопировать все файлы типа *.uni из подпапок "Д0"-"Д27" в одну папку на др.диске?Причем,имена папок написаны какие латиницей,а какие кириллицей,что исключает применение DOS-функций типа XCOPY или COPY.Спасибо.
Отправлен: 20.09.2006, 20:57
Вопрос задал: Alexela (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Lev
Здравствуйте, Alexela!

for i := 0 to 20 do
for j := 0 to 30 do
for k := 0 to 28 do begin
SrcDir := Format('A0Б%dВ%dД%d', [i,j,k]);
Далее в цикле определяем имена файлов, пользуясь функциями API, FindFirstFile,
FindNextFile, FindClose, и для каждого найденного файла используем функцию
API CopyFile
end;
Ответ отправил: Lev (статус: 1-ый класс)
Ответ отправлен: 20.09.2006, 22:56

Отвечает: Савенко Вадим Иванович
Здравствуйте, Alexela!
Используйте SHFileOperation. Примеры использования можете посмотреть здесь:

http://www.megalib.com/books/478/544.htm

Еще можете воспользоваться компонентами JEDI, в частности JvSHFileOperation.
Ответ отправил: Савенко Вадим Иванович (статус: Студент)
Ответ отправлен: 21.09.2006, 06:45


Вопрос № 56.129
Как уменьшить размер exe-файла такого приложения, т.е. чтоб переписать на WinApi не используя Comobj, ActiveX, Variants.
Почему-то достаточно даже объявить переменную типа Variant в программе и начинает подключатся модуль Variants (без указания в uses), а с ним SysUtils и т.д (Среда Delphi7, да и в Delphi6 аналогично).

Приложение:

Отправлен: 20.09.2006, 22:10
Вопрос задал: Данилевич Игорь Владимирович (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: sir henry
Здравствуйте, Данилевич Игорь Владимирович!
Смотря какую программу Вы будете писать. В некоторых без ComObj и не обойтись. :)
Для того чтобы написать махонькую программку, надо полностью исключить использование VCL. А чтобы не терять необходимые объекты и прочие полезности, можно использовать модуль KOL (http://bonanzas.rinet.ru), в котором большинство нужных объектов переписаны без наворотов (диалоговые окна, списки и т.д.)
Кроме того, Вы можете создавать свои паскалевские модули, которые вытягивают необходимые Вам функции из DLL операционной системы. Это не так удобно как KOL, но тоже приводит к значительному сокращению размера программы. Но этот путь потребует от Вас внимательного и вдумчивого изучения MSDN.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 21.09.2006, 08:00
Оценка за ответ: 5
Комментарий оценки:
Напишите в минифорум: какие еще знаете библиотеки для уменьшения размеров готового приложения.

Например, http://www.lenininc.com/


Вопрос № 56.150
Ситуация такова:
Во время работы программы создаются пользователем компоненты Tshape.
как приписать им события на onclick,onmousedown etc.

у меня же по завершении работы события:showmessage возникает ошибка:
First chance exception at $7C81EB33. Exception class EAccessViolation with message 'Access violation at address 00000000. Read of address 00000000'. Process Paths.exe (1924)

В чем ошибка?Подскажите пожалуйста.

Приложение:

Отправлен: 21.09.2006, 01:25
Вопрос задал: _Lexxus_ (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: sir henry
Здравствуйте, _Lexxus_!
Для начала Вы должны создать саму процедуру, в которой происходит обработка события. Например:
Procedure ShapeOnClick(Sender: TObject);
Begin
{Шырым-бырым}
End;
Далее, после создания самого объекта, свойству OnClick нужно присвоить эту процедуру:
MyShape:=TShape.Create(Form1);
...
MyShape.OnClick:=ShapeOnClick;
Вот, в принципе, и все. Теперь, когда Вы по фигурке кликните мышкой, будет запускаться процедура ShapeOnClick.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 21.09.2006, 08:29
Оценка за ответ: 2


Вопрос № 56.180

сБЮФЮЕЛШЕ ЩЙЯОЕПРШ. оНЛНЦХРЕ ПЕЬХРЭ ОПНАКЕЛС. еЯРЭ ДЕПЕБН ОЮОНЙ: ю0 -> а0...а29 -> б0...б18 -> ц0...ц26, Ю СФЕ Б ОНДОЮОЙЮУ ц КЕФЮР ТЮИКШ РХОЮ *.cmt. йЮЙ ЯПЕДЯРБЮЛХ Delphi ХКХ WinAPI ХГ Delphi ЯЙНОХПНБЮРЭ БЯЕ ЩРХ ТЮИКШ Б НДМС ОЮОЙС МЮ ДПСЦНЛ ДХЯЙЕ?? хЛЕМЮ ОЮОНЙ МЮОХЯЮМШ ЙЮЙХЕ ЙХПХККХЖЕИ,Ю ЙЮЙХЕ КЮРХМХЖЕИ. яОЮЯХАН.
Отправлен: 21.09.2006, 09:40
Вопрос задал: Alexela (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: mvp
Здравствуйте, Alexela!
Приблизительно так как в приложении. Легко переделать под универсальность (если количество узлов будет меняться.
P. S. Надеюсь, что если и сделал ошибки, то идею Вы поняли

Приложение:

---------
Моя совесть чиста - не бывшая в употреблении

Ответ отправил: mvp (статус: Студент)
Ответ отправлен: 21.09.2006, 13:50


Вопрос № 56.182
Добрый день, уважаемые!
У меня вопрос по компонентам JEDI. Собственно установка проходит замечательно, Delphi ( у меня 2005-я ) запускается, все работает. Но потом начинается самое интересное - с каждым разом на запуск Delphi уходит все больше и больше времени. Для интереса один раз засек время - ждал 29 минут (!).Причем загрузка все время останавливается на строке "Loading package JvDBD9D.bpl".Далее, запускаю инсталлятор JVCLSetup.exe ,выбираю опцию "Compile already installed packages/Update IDE",и все начинается сначала. Первый запуск проходит быстро, потом с каждым разом все дольше и дольше. BPL-файлы джедаевские находятся в папке
"C:Documents and SettingsАдминистраторМои документыBorland Studio ProjectsBPL". Может быть кто-нибудь сталкивался с такой проблемой? Как ее решить?
Отправлен: 21.09.2006, 09:47
Вопрос задал: Савенко Вадим Иванович (статус: Студент)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Н.В.
Здравствуйте, Савенко Вадим Иванович!
Delphi 2005 - очень ненадёжная и неотлаженная версия. Под неё почти никто не пишет компоненты и не настраивает уже написанные.
Сейчас уже вышла Delphi 2006, которая является самой надёжной из всех уже существующих Delphi.
Попробуйте поставить Delphi 2006 + JEDI или Delphi 7 + JEDI. На Delphi 7 всё будет гарантированно работать. Я не думаю, что Вы используете какие-то возможности 2005-ой версии, которых нет в седьмой.
Статью о Delphi 2006 можно прочитать здесь: http://forum.vingrad.ru/index.php?s=f854bba20d3bdb3383b9d8d21489da7a&showtopic=75381&view=all

Удачи!
---------
http://TheDelphi.Ru
Ответ отправил: Н.В. (статус: 5-ый класс)
Ответ отправлен: 21.09.2006, 10:03
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, Савенко Вадим Иванович!
Я с таким не сталкивался, но лучше вместо D2005 поставить D2006. Я с D2005 немного повозился, а потом плюнул и снес - сильно много глюков. Вдобавок к D2005 Борланд выпустил уже 2 сервис пака на 100 МБ. По-моему это говорит не в пользу этого мастодонта. :) А вот D2006 вроде нормально работает. По крайней мере ничего из ряда вон выходящего я пока там не заметил.
И еще. Лучше всего исходники и компоненты устанавливать в каталоги без русских букв и без пробелов в имени. Иногда бывают глюки из-за этого.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 21.09.2006, 11:04
Оценка за ответ: 5


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

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

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

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

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

В избранное