Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Помогите с вызовом


Автор: Pavelbej 31.7.2005, 11:06
Помогите! Файлы .txt и .html открываются простым перетаскиванием их в мою программу. Дальше смотрите код.



Код

procedure TForm1.wmDropFiles(var Message: TMessage);
var  Ext: string;
     Count: integer;
begin
Count := DragQueryFile(Message.WParam, 0, @S[1], 255);
Length(S) := Count;
DragFinish(Message.WParam);
if Count >0 then
  begin
  Ext := LowerCase(ExtractFileExt(S));
  if (Ext = '.htm') or (Ext = '.html') then
    begin
    TWinControl(html).Visible := true;
    html.navigate(S);
    html.Tag:=1;
    end
  else if (Ext = '.txt') then
-----------------------------------------
                Как мне проверить если прежний файл был изменен?
                 Это не работает
                     if memo1.tag=1 then
                            begin
                                case MessageDlg('Do you want to save?', mtConfirmation, mbYesNoCancel, 0) of
                                    IDYes: Save1click(sender);  - - - - - - -     Undeclared identifier
                                    IDCancel: exit;
                                    end;
------------------------------------------
    begin
    TWinControl(html).Visible := False;
    memo1.lines.LoadFromFile(S);
-------------------------------------------
                           а тут получить form1.Caption файла
-------------------------------------------
    memo1.tag:=0;
    end;
  end;
Message.Result := 0;
end;

Автор: Albinos_x 31.7.2005, 11:35
Цитата
Как мне проверить если прежний файл был изменен?
                Это не работает


два варианта - хранить даты изменения файлов и сравнивать их
и более надёжный - делать контрольные суммы для каждого файла и проверять их

Цитата
а тут получить form1.Caption файла


здесь не совсем понятно - что тебе нужно

может это:

function ExtractFileName(const FileName: string): string; Извлекает из строки с полным именем файла FileName часть, содержащую его имя и расширение.

а дальше понятно:
Код

Form1.Caption := 'MyProg - ' + ExtractFileName(S);

Автор: Pavelbej 31.7.2005, 13:04
С именем файла все вышло, благодарю, а вот насчет проверки изменения файла не мог бы по подробнее?

Автор: Albinos_x 31.7.2005, 13:23
вариант 1: делаешь файл или БД при открытии файла проверяешь наличие этого файла в БД, если есть то идёшь ко второму полю где хранишь даты изменений файлов (как получить смотри в FAQ). Далее сравниваешь, если различаются значит изменяли, совпадают = не изменяли. если нет = файл не открывался до этого.

Но файл можно изменить не меняя даты изменения хранящейся в файле, отсюда следует способ 2:

Аналогично первому делаешь файл или БД где будешь хранить пути с именами файлов и контрольные суммы.
Далее при открытии файла по его содержимому делаешь контрольную сумму(алгоритм можно свой придумать). Сверяешь с имеющимся в БД, есть - совпадает = не изменялся, есть - не совпадает = изменялся, нет = не открывался

Автор: Pavelbej 31.7.2005, 15:48
Я месяц как сижу в Delphi и для меня это еще слишком сложно. Нельзя ли както по простому вызвать диалог сохранения?

Автор: Albinos_x 31.7.2005, 16:33
Цитата
Я месяц как сижу в Delphi и для меня это еще слишком сложно.


Это не так сложно как кажется...Тем более в местном FAQ почти всё есть...

Цитата
Нельзя ли как-то по простому вызвать диалог сохранения?


Не понял? поясни свою идею... или может я не понял что тебе нужно?

Автор: Pavelbej 31.7.2005, 17:24
Я хочу просто вызвать - Save1click(sender), но ему не нравится этот Sender, а вить создавая или открывая новый файл все работает нормально, в чем же тут дело?

Автор: Albinos_x 31.7.2005, 18:06
Цитата
Я хочу просто вызвать - Save1click(sender), но ему не нравится этот Sender, а вить создавая или открывая новый файл все работает нормально, в чем же тут дело?


я так понимаю, это уже другой вопрос...

Ну мы не телепаты. Надо смотреть код. smile

Автор: Song 1.8.2005, 09:48
А чего дату/время изменения не сравнить?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)