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

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


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

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

Выпуск № 872
от 19.07.2007, 09:35

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


Вопрос № 95012: доброго всем времени суток. у меня возник вопросик: пишу программу что то вроде сканера сети, только для сотовых телефонов,т.е. программа должна дозваниватьсяна заданный номер, и записывать ответ в лог(занято, дозвон, недоступен). модем -...
Вопрос № 95030: День добрый! CreatingReport.pas =================================================== unit CreatingReport; interface .... type TPaysDebitorInPeriodRec = record Date: TDateTime; end; TPaysDebito...
Вопрос № 95095: Добрый день. Имеется стороннее приложение (процесс), которое регулярно записывает в файлы какие-то данные. Файлы не известны. Задача - определить, в какой файл и какие данные были записаны. Подскажите, пожалуйста, в какую сторону коп...
Вопрос № 95109: Здравствуйте, уважаемые эксперты. Решил вот намедни склепать прогу, меняющую в имени файлы подчёркивания на пробелы. Сделал две кнопки типа TButton и объект типа TMemo. Ещё поставил диалог открытия файла. Механизм работы проги такой: по нажат...

Вопрос № 95.012
доброго всем времени суток.
у меня возник вопросик:
пишу программу что то вроде сканера сети, только для сотовых телефонов,т.е. программа должна дозваниватьсяна заданный номер, и записывать ответ в лог(занято, дозвон, недоступен).
модем - сотовыйтелефона mtorola c380, подключение через юсб драйвера есть, создаетсявиртуальный ком порт.
на команды модем нормально откликается, но когда шлю:
ATD+7**********#10#13(команда дозвона) на дисплее телефона загарается надпись о начале дозвона на заданный номер, но дозвон не проходит, модем отвечает: no carrier(потеря линии), вопрос как это обойти?

Приложение:

Отправлен: 13.07.2007, 10:21
Вопрос задал: B01k
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

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

Во-первых, строка должна заканчиваться не #10#13, а #13#10.
Во-вторых, необязательно добавлять #10, в большинстве случаев достаточно #13
В-третьих, если вы набираете номер ATD+7**********, т.е. без точки запятой на конце - идет факсовый вызов, т.е. CSD. Вам же нужен голосовой.
В вашем случае: выполняйте команду ATD+7**********;#13
Ответ отправил: Примак Руслан Николаевич (статус: 3-ий класс)
Ответ отправлен: 13.07.2007, 15:34


Вопрос № 95.030
День добрый!

CreatingReport.pas
===================================================
unit CreatingReport;
interface
....
type

TPaysDebitorInPeriodRec = record
Date: TDateTime;
end;

TPaysDebitorInPeriod = array[0..100] of TPaysDebitorInPeriodRec;

TPaysDebitor = class
private
...
FPaysDebitorInPeriod: TPaysDebitorInPeriod;
public
...
property PaysDebitorInPeriod: TPaysDebitorInPeriod read FPaysDebitorInPeriod write FPaysDebitorInPeriod;
...
end;
type
TAcceptanceInvoice = class
...
public
procedure Generate;
...
end;

implementation

...

procedure TAcceptanceInvoice.Generate;
var
DataVyplatyNFK: TDateTime;
...
begin
...
PaysDebitor.FPaysDebitorInPeriod[0].Date := DataVyplatyNFK;

ВОТ ОНА ПРОБЛЕМА

...
end;

почему меня Дельфи заставляет обращаться через FPaysDebitorInPeriod, а не PaysDebitorInPeriod (без F)
Отправлен: 13.07.2007, 12:26
Вопрос задал: IrviS (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 11)

Отвечает: Shveps
Здравствуйте, IrviS!
Все дело в том, что у вас классы объявлены в одном модуле. Попробуйте это
TPaysDebitorInPeriodRec = record
Date: TDateTime;
end;

TPaysDebitorInPeriod = array[0..100] of TPaysDebitorInPeriodRec;

TPaysDebitor = class
private
...
FPaysDebitorInPeriod: TPaysDebitorInPeriod;
public
...
property PaysDebitorInPeriod: TPaysDebitorInPeriod read FPaysDebitorInPeriod write FPaysDebitorInPeriod;
...
end;
перенести в другой модуль. А в текущем объявить uses этого другого модуля.

Пример в приложении.

Приложение:

---------
Пиво ф топку !!! Водку Тоже !!!

Ответ отправил: Shveps (статус: 3-ий класс)
Ответ отправлен: 13.07.2007, 12:55

Отвечает: Виктор Пырлик
Здравствуйте, IrviS!

ответ в приложении. К вас ошибки:
в объявлении структуры (записи)
в обявлении свойства
в вызове свойства

Приложение:

---------
Если ничего не помогло - надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: 8-ой класс)
Ответ отправлен: 13.07.2007, 13:21

Отвечает: Sandy
Здравствуйте, IrviS!
Мне думается вот наиболее близкое к Вашей задаче.
Ошибка была в объявлении свойства-массива и в том, что вместо записи надо использовать "примитивный" класс. Некоторые строки просто в качестве примера.

Приложение:

Ответ отправил: Sandy (статус: 8-ой класс)
Ответ отправлен: 13.07.2007, 15:44


Вопрос № 95.095
Добрый день.
Имеется стороннее приложение (процесс), которое регулярно записывает в файлы какие-то данные. Файлы не известны.
Задача - определить, в какой файл и какие данные были записаны.

Подскажите, пожалуйста, в какую сторону копать? Хуки? Если можно, ссылки на статьи. Очень благодарен за помощь.
Отправлен: 13.07.2007, 22:54
Вопрос задал: Omickron (статус: 4-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Дмитрий С.
Здравствуйте, Omickron!
Гм.. Интересно.. Можно попробовать сотворить следующим образом: оставить систему в бездействии на пару минут,затем запустить прогу, которая записывает данные, а потом просто поискать файлы ТОТАЛ КОМАНДЕРОМ файлы,изменённые за эти самые пару минут. Вот только что в них изменилось, - таким образом узнать нельзя...
---------
Наши программисты самые программистые программисты!..
Ответ отправил: Дмитрий С. (статус: 2-ой класс)
Ответ отправлен: 14.07.2007, 11:32
Оценка за ответ: 1
Комментарий оценки:
Уважаемый Дмитрий.
Ну, во-первых, мне нужно сделать это программным путём. Иначе я бы не помещал эту тему в раздел языков программирования (Delphi). Согласны?
Ну, а во-вторых, искать файлы по всей файловой системе (а если там 500Гб?) достаточно долго. Для этого не нужен Total Commander, это можно сделать стандартными средствами Windows, организовав поиск файлов, изменившихся за текущий день и отсортировав результаты. Для этого даже не нужно оставлять систему в бездействии на пару минут. И ещё, в данном случае не будет известно, каким именно процессом изменились файлы. Например, explorer.exe очень часто обращается к файловой системе (это Вы можете проверить при помощи утилиты FileMon или Process Monitor).

Поэтому, извините, но оценка минимальная. Ваш ответ пользы мне не принёс.

Отвечает: monah
Здравствуйте, Omickron!
Вот вариант взятый из Delphi World. См. приложение.
От себя могу предложить сквозной поиск функциями FindFirst и FindNext.
procedure Find(Path:string);
var
f:TSearchrec;
i, t:integer;
D:TdateTime;
begin
i:=findfirst(Path+'*.*', faAnyFile, f);
while i=0 do
if (f.atribute and faDirectory)<>0
then Find(Path+f.name+'')
else
begin
t:=FileGetdate(f.Findhandle);
D:=FiledateTodateTime(t);
// Возможно, зависит от файловой системы или ОС, нужное значение содержится
// в f.Time;
end;
end;
end;
так же попадался пакет компонентов abf**** который имеет событие изменения в каталоге.

Приложение:

---------
festina lente

Ответ отправил: monah (статус: Студент)
Ответ отправлен: 14.07.2007, 23:16
Оценка за ответ: 1
Комментарий оценки:
К сожалению, должен сказать, что, во-первых, метод прямого перебора всех файлов в дереве подпапок займёт слишком много времени, а во-вторых, не решит поставленной задачи. Я писал, что "Файлы не известны". Естественно, не известно, в какой папке они хранятся. А перебирать содержимое нескольких локальных дисков - не является решением.
Это же касается и API'шных функций отслеживания изменений в папке. Замечания те же: неизвестно, в какой папке будет находится этот файл, работа со всеми локальными дисками займёт слишком много времени и считать данные, которые записываются в файл, невозможно.
Вы указали мне два стандартных алгоритма, описания которых можно найти практически на любом сервере, алгоритмы, которые не решают поставленной задачи.
Поэтому оценка Вашему ответу - 1 балл.

Отследить, к какому файлу обращается конкретный п роцесс, можно, установив глобальный хук в системе, отлавливая функции Native API создания, чтения, записи и закрытия файлов.
Но как отследить, что именно было считано/записано? Этот вопрос остаётся открытым.


Вопрос № 95.109
Здравствуйте, уважаемые эксперты. Решил вот намедни склепать прогу, меняющую в имени файлы подчёркивания на пробелы.
Сделал две кнопки типа TButton и объект типа TMemo. Ещё поставил диалог открытия файла.
Механизм работы проги такой: по нажатии на первую кнопку появляется диалог открытия, в нём пользователь указывает файл для переименования. Полное имя файла заносится в Memo. По нажатию на вторую кнопку, собственно, и происходит переименование.
Моя проблема заключается в том, что при попытке переименовать файл командой Rename вылетает ошибка "I/O error 123". Прочитал в умной книжке, что перед переименованием, необходимо закрыть файл. То есть, перед этим я сделал AssignFile. И вот, при попытке закрытия вылетает ошибка "I/O error 103". Как я прочитал в справке Delphi, "File not open".
Ещё узнал, что есть такая команда RenameFile, в которой надо просто указать полное старое имя, а потом новое. Попробовал. Ноль эмоций. Полез в справку Delphi, вычитал, что эта функция возвращает значение True, если переименовать файл возможно, False, если нет. Так вот, сделал элементарную проверку работы функции:
if RenameFile(OldPath,NewPath)=true then
ShowMessage('Да')
else
ShowMessage('Нет');
Прога выдаёт сообщение "Нет".
Помогите мне с этой проблемой. Заранее благодарен.
Отправлен: 14.07.2007, 07:17
Вопрос задал: Пастарнаков Роман (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 7)

Отвечает: CjJoker
Здравствуйте, Пастарнаков Роман!

попробуйте вот такую конструкцию:

with TOpenDialog.Create(Self) do
try
if Execute() then begin
if not RenameFile(FileName, StringReplace(FileName, '_', #32, [rfReplaceAll, rfIgnoreCase])) then
ShowMessage('Невозможно переименовать файл.');
end;
finally
Free();
end;
Ответ отправил: CjJoker (статус: 2-ой класс)
Ответ отправлен: 14.07.2007, 09:13
Оценка за ответ: 5

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

В приложении дан рабочий код.

Приложение:

---------
Если ничего не помогло - надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: 8-ой класс)
Ответ отправлен: 14.07.2007, 12:36
Оценка за ответ: 5


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.53 beta от 09.07.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное