Большой Воронежский Форум
» Программирование>OpenDialog портит всю картину! (Проблемка с Делфи)
SuHar` 16:38 23.01.2007
Совершенно непонятная для меня ситуация. В общем в процедуре OnClick одной кнопки у меня прописано следующее:
If OpenDialog1.Execute = false then Exit;
Data.Add(OpenDialog1.FileName);

Здесь я открываю его файл и записываю адрес этого файла в переменную класса TStrings. Далее мне этот самый адрес нужно сохранить, что я и делаю в процедруе OnClick, но уже другой кнопки:
Data.SaveToFile(Dir+'\data') (Dir - текстовая константа, в ней путь к нужной папке)
И при вызове второй процедуры (с сохранением файла) выдается ошибка о том, что системе не удается найти указанный путь. Я удивился, т.к. процедурка SaveToFile должна создавать файл, если его не существует и директория Dir - существует. После небольшого наблюдения я понял, что все дело в первой процедуре. Если убрать строку If OpenDialog1.Execute = false then Exit; , то все работает, файл создается.
Подскажите, как решить эту проблему. [Ответ]
ХАРЧО 18:01 23.01.2007
Возможно скажу бред, но:
var
Data: TStringList;
begin
Data := TStringList.Create;
if OpenDialog1.Execute then
begin
Data.Add(OpenDialog1.FileName);
end; [Ответ]
SuHar` 15:37 24.01.2007
ХАРЧО, не, не помогла.
ЛЮДИ! НУ ПОМОГИТЕ, КТО НИБУДЬ! Почему с ОпенДиалогом не работает SaveToFile? [Ответ]
ХАРЧО 16:02 24.01.2007
Если я правильно понял, то вот так:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Data: TStringList;

const
Dir = 'C:';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin

Data.Add(OpenDialog1.FileName);
end;
end;



procedure TForm1.Button2Click(Sender: TObject);
begin
Data.SaveToFile(Dir + '\data');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Data := TStringList.Create;
end;

end.
В Delphi 7 работает. [Ответ]
SuHar` 16:29 24.01.2007
ХАРЧО, да вроде тоже самое и у меня... самое интересное, что и Делфя 7-я... Ладно, пока справился тупым, но надежным способом: в TEdit ручкками сцука путь к фалу писать... Мож у меня вресия делфей глючная, но Опен Диалог с ТСтрингом дружить не хочет. [Ответ]
Yandex 17:19 24.01.2007

Сообщение от :
Мож у меня вресия делфей глючная, но Опен Диалог с ТСтрингом дружить не хочет.

99% ошибка у тебя в коде, который ты усердно прячешь [Ответ]
AIM-9M 19:36 24.01.2007
Согласен с Яндексом, покаж код! [Ответ]
Ray79 07:23 25.01.2007

Сообщение от SuHar`:
Мож у меня вресия делфей глючная

Небывает глючных версий [Ответ]
ХАРЧО 12:03 25.01.2007

Сообщение от Ray79:
Небывает глючных версий

Ну, это уж не совсем так. Был например Delphi 5, так я сам там видел один замечательный глюк: если в процедуре поменять местами два оператора, например: x := t +z и y := a * b, прога просто падала. Обязательно поищу исходник, если найду - опубликую. Или, например некорректно обрабатывались вложенные скобки x := a + (b + (c + (d - g))), как-то так... [Ответ]
SuHar` 14:22 25.01.2007
Нет, дело не в коде. Без ОПЕН ДИАЛОГА работает все. [Ответ]
gloomdemon 15:25 25.01.2007
SuHar`, блин, да покажи код. А то я тоже так могу кричать что всё не так, и ничего не работает. [Ответ]
SuHar` 15:33 25.01.2007
gloomdemon, весь что ли? Его очень много и в нескольких модулях он. В принципе это уже не так важно, я нашел выход из положения. [Ответ]
Вверх