Вопрос № 103638: Здраствуйте эксперты.
Суть вопроса:
var
size: DWord;
path: string;
..........................
path:='D: ratatafile.dat';
ShowMessage(IntToStr(size));
так вот, как присвоить переменной size размер файла по ...Вопрос № 103658: Здравствуйте!
Как подсчитать кол-во секунд, минут и часов между двумя датами.
Например между датами '25.09.07 07:24:43' и '06.10.07 14:33:08'. Важно, что дни и месяцы должны заменятся эквивалентным количеством часов.
Заранее спасибо за ре...Вопрос № 103664: здравствуйте, подскажите пожалуйста литературу по написанию многопоточных приложений на Delphi....Вопрос № 103668: Здравствуйте уважаемые эксперты. В программе парсер msxml ругается на строчку в файле <?xml version="1.0" encoding="windows-1251"?>. И выдается ошибку: 'Переключение с текущей кодировки на указанную не поддерживается'. При э...Вопрос № 103676: Необходимо подать звуковой сигнал через системный динамик.
Использую Windows.Beep, но пока она работает происходит остановка всей остальной программы, а нужно чтобы выполнялось и то и другое. Что посоветуете? Если можно небольшой примерчик....Вопрос № 103692: Уважаемые эксперты !
Начинающий.
Посоветуйте какие использовать средства для представления
данных из двух и более таблиц (1:М) в виде дерева.
Хотелось бы сделать что-то наподобие "Проводника" Windows,
чтобы щелкнув по у...
Вам достаточно будет описать такую функцию: function GetFileSize(const fileName: String; out fileSize: Integer): Boolean; forward;
Код функции: function GetFileSize(const fileName: String; out fileSize: Integer): Boolean;
var
SRec: TSearchRec;
begin
Result:=FindFirst(fileName, faAnyFile, SRec) = 0;
if Result then
try
fileSize := SRec.Size;
finally
FindClose(SRec);
end;
end;
В функции мы ищем файл по указаному пути и получаем его размер в байтах.
Тогда применить ее можно будет так: var
size: integer;
path: string;
..........................
path:='D: ratatafile.dat';
if GetFileSize(path,size) then
ShowMessage(IntToStr(size));
Good Luck!!!
P.S. Полный код смотрите в приложении.
Приложение:
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессор) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 27.09.2007, 23:26 Оценка за ответ: 5 Комментарий оценки: Спасибо за полный и точный ответ, именно то что нужно.
Отвечает: PGM
Здравствуйте, Иван Ивановввв!
К предыдущему ответу есть небольшое уточнение. Если файл больше 2Гб, то будут проблемы. Предпочтительней использовать Int64, как размер файла
Ответ отправил: PGM (статус: 10-ый класс)
Ответ отправлен: 28.09.2007, 21:13 Оценка за ответ: 5 Комментарий оценки: Спасибо, мелочь а приятно.
Вопрос № 103.658
Здравствуйте!
Как подсчитать кол-во секунд, минут и часов между двумя датами.
Например между датами '25.09.07 07:24:43' и '06.10.07 14:33:08'. Важно, что дни и месяцы должны заменятся эквивалентным количеством часов.
Заранее спасибо за решение проблемы!
Отправлен: 28.09.2007, 06:03
Вопрос задал: Red Spirit (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: din
Здравствуйте, Red Spirit!
Насколько я вас понял необходимо получить разницу между датами в часах.
Для этого подключаем в секции Uses юнит DateUtils, а уже там у нас есть все необходимые функции: HoursBetween(const ANow: TDateTime; const AThen: TDateTime): Int64; где ANow - дата и время окончания временного периода,
AThen - дата и время начала временного периода, возвращаемый тип Int64.
В данном модуле также есть функции для расчета лет, месяцев, дней, минут, секунд между двумя датами, думаю Вы их найдете без труда.
Удачи!
--------- Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: din (статус: Специалист)
Ответ отправлен: 28.09.2007, 06:25 Оценка за ответ: 4
Отвечает: kopfschwarz
Здравствуйте, Red Spirit!
Если у вас заданы строки с датами, то их сначала надо перевести в формат DateTime. Смотрите пример..
var A,B:TDateTime;
H,M,S:integer;
begin
A:=StrToDateTime('25.09.07 07:24:43');
B:=StrToDateTime('06.10.07 14:33:08');
H:=HoursBetween(A,B);
M:=MinutesBetween(A,B) mod 24;
S:=SecondsBetween(A,B) mod 60;
Label1.Caption:=IntToStr(H)+':'+IntToStr(M)+':'+IntToStr(S);
end.
--------- Please, don't say you're sorry & Express yourself, don't repress yourself!
Ответ отправил: kopfschwarz (статус: Студент)
Ответ отправлен: 28.09.2007, 07:01 Оценка за ответ: 5 Комментарий оценки: Как раз то, что нужно! Спасибо! Только в подсчете минут, нужно поставить не 24, а 60 ;)
Отвечает: Владик
Здравствуйте, Red Spirit!
(6-25)+(10-9)*30+(2007-2007)*365 - получишь количество дней, умножаешь на 24 получаешь часы. Примерно такая же операция и со временем
Ответ отправил: Владик (статус: 1-ый класс)
Ответ отправлен: 28.09.2007, 07:53 Оценка за ответ: 3 Комментарий оценки: Спасибо за ответ, но этот способ не точен.. мне нужно было узнать, как это сделать через готовые функции.
Вопрос № 103.664
здравствуйте, подскажите пожалуйста литературу по написанию многопоточных приложений на Delphi.
Отправлен: 28.09.2007, 08:14
Вопрос задал: Evgeni_s (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Drbear
Здравствуйте, Evgeni_s!
Попробуйте сходить на http://lab18.ipu.rssi.ru/
может там найдёте
Ответ отправил: Drbear (статус: 2-ой класс)
Ответ отправлен: 28.09.2007, 10:12 Оценка за ответ: 2 Комментарий оценки: Не, че то не подходит
Вопрос № 103.668
Здравствуйте уважаемые эксперты. В программе парсер msxml ругается на строчку в файле <?xml version="1.0" encoding="windows-1251"?>. И выдается ошибку: 'Переключение с текущей кодировки на указанную не поддерживается'. При этом на одном компьютере с Windows XP все работает нормально, а на другом с Windows 2000 выдает ошибку. Как это можно исправить?
Отправлен: 28.09.2007, 09:11
Вопрос задал: Radik (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Ответ отправил: Narsereg (статус: 1-ый класс)
Ответ отправлен: 28.09.2007, 11:52
Вопрос № 103.676
Необходимо подать звуковой сигнал через системный динамик.
Использую Windows.Beep, но пока она работает происходит остановка всей остальной программы, а нужно чтобы выполнялось и то и другое. Что посоветуете? Если можно небольшой примерчик.
Отправлен: 28.09.2007, 10:33
Вопрос задал: Mina (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Чтобы приложение не подвисало при выполнении дляительных операций можно использовать Application.PeocessMessage.
Ответ отправил: Drbear (статус: 2-ой класс)
Ответ отправлен: 28.09.2007, 10:40 Оценка за ответ: 2 Комментарий оценки: Мне надо задавать частоту и продолжительность.
А с Windows.Beep Application.PeocessMessage не помогает.
Отвечает: Narsereg
Здравствуйте, Mina!
Если вам не понравился предыдущий ответ, то единственный способ (наверно) создать еще один Thread и синхронизировать их.
Ответ отправил: Narsereg (статус: 1-ый класс)
Ответ отправлен: 28.09.2007, 11:54 Оценка за ответ: 4 Комментарий оценки: Спасибо!
Отвечает: Igor_
Здравствуйте, Mina!
Нужно beep запускать в отдельном потоке.
Сделать класс-наследник TThread.
В Delphi есть мастер, который сделает каркас класса
File->New->Other->Thread Object
Примера рабочего кода дать не могу - нет примера..
Но в вашем случае достаточно будет в функции Execute вашего класса-потока написать вызов Beep
И свойство FreeOnTerminate = true, чтобы после завершения поток сам удалялся.
Обманул - начал Вам писать и быстро создал пример
Модуль с классом для потока с Beep
-------------------------------
unit u_beepTh;
procedure ThBeep.Execute;
var
i: integer;
begin
for i := 0 to 10 do begin
Beep(500, 500);
end;
end;
end.
-------------------------------
Запуск потока
-------------------------------
procedure TForm1.Button2Click(Sender: TObject);
var
tBeep: ThBeep;
begin
tBeep := ThBeep.Create({createSuspended}true);
tBeep.FreeOnTerminate := true;
tBeep.Resume();
end;
-------------------------------
Ответ отправил: Igor_ (статус: 4-ый класс)
Ответ отправлен: 28.09.2007, 12:40 Оценка за ответ: 5 Комментарий оценки: Спасибо большое, как раз то что нужно!
Вопрос № 103.692
Уважаемые эксперты !
Начинающий.
Посоветуйте какие использовать средства для представления
данных из двух и более таблиц (1:М) в виде дерева.
Хотелось бы сделать что-то наподобие "Проводника" Windows,
чтобы щелкнув по узлу дерева, открывать соответствующую форму.
Заранее благодарен.
Попробуйте используовать запрос на объединение таблиц
в таблицах должны быть столбцы с номером уровня узла (0,1,2,3,...) и, если надо какую-то хитрую сортировку, номером ветви в узле (0,1,2,3,ююю).
Поиск строки в таблице или запросе можно организовать стандартными средствами по щелчку на строке дерева.
При динамическом создании дерева старайтесь не использовать String и Integer, пользуйтесь переменными TTreeView, TTreeNode.
Приложение:
Ответ отправил: Drbear (статус: 2-ой класс)
Ответ отправлен: 28.09.2007, 16:21 Оценка за ответ: 5
Отвечает: Виктор Пырлик
Здравствуйте, Тарасенок Сергей!
Ваш вопрос в реализации не сложен. Но не так просто в описании… «Родных» компонентов в Delphi для этого нет. Можно конечно найти сторонние разработки, как платные так и бесплатные – если это вас заинтересует, любой поисковик даст положительный результат.
Но сделать своими руками и полезней, и практичней, тема довольно обширная, что бы приводить тут код – вот неплохая статья на этот счет с простым и понятными примером и подробным описанием. DBTreeView своими руками
А связь с зависимой таблицей, можно осуществить, просто используя либо жесткие связи через MasterSource – тогда, по событию OnChange компонента TTreeView и передать на метод таблицы (родительской) Locate индекс, сохраненный в параметре процедуры TreeView1.Items.AddObject – как указатель (Pointer) (см. пример). Или, это же можно сделать и для дочерней таблицы.
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 28.09.2007, 20:54 Оценка за ответ: 5 Комментарий оценки: Большое спасибо. Теперь понятно, в какую сторону двигаться.