Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поле Memo и открытие файла 
:(
    Опции темы
LAGOX
Дата 15.3.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 14.2.2009

Репутация: нет
Всего: нет



Всем доброго времени суток.
Пишу я значит текстовый редактор. В меню Файл у меня есть стандартные подменю(новый,открыть,сохранить, сохранить как, закрыть, выход).
Я реализовал кнопку закрыть путем такого кода:
Код

  vvod.Free;

где vvod-это имя memo поля.
Далее я реализовал кнопку новый вот таким путем:
Код

  vvod:=tmemo.create(self);
  vvod.Parent:=form1;//родитель
  vvod.Show;//показываем поле
  vvod.Align:=alClient;//выравниваем


Это было предисловие, а теперь собственно вопрос. При закрытии мемо поля, и после нажатия кнопки "Открыть" вылетает ошибка и указывает вот сюда(на эту строчку кода):
Код

vvod.Lines.LoadFromFile(OpenDialog1.FileName);

PM MAIL ICQ Skype Jabber   Вверх
MoonDevil
Дата 15.3.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.2.2009

Репутация: нет
Всего: нет



Полный код в студию,есть подозрение что после уничтожения мемо ты пытаешься что-то  в нее загрузить((
PM MAIL   Вверх
LAGOX
Дата 15.3.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 14.2.2009

Репутация: нет
Всего: нет



Код

procedure TForm1.N3Click(Sender: TObject);//Ïðîöåäóðà "Ôàéë->Îòêðûòü"
begin
if OpenDialog1.Execute then
//ïðîâåðèòü ñîçäàíî ëè memo ïîëå
  vvod.Lines.LoadFromFile(OpenDialog1.FileName);
  Form1.Caption:=OpenDialog1.FileName;
end;

procedure TForm1.N4Click(Sender: TObject);//ïðîöåäóðà "Ôàéë->Ñîõðàíèòü"
begin
if SaveDialog1.Execute then
  case SaveDialog1.FilterIndex of//Ðàçáèðàåìñÿ ñ ðàñøèðåíèÿìè
  1: vvod.Lines.SaveToFile(SaveDialog1.FileName+'.php');
  2: vvod.Lines.SaveToFile(SaveDialog1.FileName+'.htm');
  3: vvod.Lines.SaveToFile(SaveDialog1.FileName+'.css');
  4: vvod.Lines.SaveToFile(SaveDialog1.FileName+'.txt');
  end;

end;

procedure TForm1.N5Click(Sender: TObject);//Ïðîöåäóðà "Ôàéë->Ñîõðàíèòü êàê..."
var
  fname:string;
begin
  if SaveDialog1.Execute then
  begin
    fname:=SaveDialog1.FileName;
    case SaveDialog1.FilterIndex of //Ðàçáèðàåìñÿ ñ ðàñøèðåíèÿìè
    1: vvod.Lines.SaveToFile(fname+'.php');
    2: vvod.Lines.SaveToFile(fname+'.htm');
    3: vvod.Lines.SaveToFile(fname+'.css');
    4: vvod.Lines.SaveToFile(fname+'.txt');
    end;
  end;
end;

procedure TForm1.N7Click(Sender: TObject);//ïðîöåäóðà "Ôàéë->Çàêðûòü"
begin
  vvod.Free;
end;

procedure TForm1.N1Click(Sender: TObject);//Ïðîöåäóðà "Ôàéë->Íîâûé"
begin
  vvod:=tmemo.create(self);
  vvod.Parent:=form1;//ðîäèòåëü
  vvod.Show;//ïîêàçûâàåì ïîëå
  vvod.Align:=alClient;//âûðàâíèâàåì
end;

procedure TForm1.N10Click(Sender: TObject);//Ïðîöåäóðà "Ôàéë->Âûõîä"
begin
  Halt;
end;

PM MAIL ICQ Skype Jabber   Вверх
Kbl4AH
Дата 15.3.2009, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



Правильно...
Цитата(LAGOX @  15.3.2009,  15:54 Найти цитируемый пост)
procedure TForm1.N3Click(Sender: TObject);//Ïðîöåäóðà "Ôàéë->Îòêðûòü"beginif OpenDialog1.Execute then//ïðîâåðèòü ñîçäàíî ëè memo ïîëå  vvod.Lines.LoadFromFile(OpenDialog1.FileName);  Form1.Caption:=OpenDialog1.FileName;end;

ты загружаешь файл в vvod, а он не создан
PM MAIL ICQ   Вверх
MoonDevil
Дата 15.3.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.2.2009

Репутация: нет
Всего: нет



Добавь вот это
 
Код
  
public
    { Public declarations }
    vvod:Tmemo;
created:boolean;
  end;


procedure TForm1.FormCreate(Sender: TObject);
begin
 created:=false;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
 if created=true then begin
if OpenDialog1.Execute then  begin
//i?iaa?eou nicaaii ee memo iiea
  vvod.Lines.LoadFromFile(OpenDialog1.FileName);
  Form1.Caption:=OpenDialog1.FileName;  end;
                       end;
end;

procedure TForm1.N1Click(Sender: TObject);//Ïðîöåäóðà "Ôàéë->Íîâûé"
begin
  vvod:=tmemo.create(self);
  vvod.Parent:=form1;//ðîäèòåëü
  vvod.Show;//ïîêàçûâàåì ïîëå
  vvod.Align:=alClient;//âûðàâíèâàåì
 created:=true;
end;


Остальное отредактируй сам,можешь сделать так чтобы окно вылезало с сообщением о создании нового файла и.т.д
PM MAIL   Вверх
Christoph
Дата 15.3.2009, 17:20 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 1
Всего: 11



а проще нельзя?
Код

if vvod <> nil then


имхо лучше в Object Inspector, сделать некоторые элементы TMenuItem'ы  недоступными, а по ходу работы, менять их состояния



--------------------
user posted image
PM MAIL ICQ   Вверх
MoonDevil
Дата 15.3.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.2.2009

Репутация: нет
Всего: нет



Цитата(Christoph @ 15.3.2009,  17:20)
а проще нельзя?
Код

if vvod <> nil then


имхо лучше в Object Inspector, сделать некоторые элементы TMenuItem'ы  недоступными, а по ходу работы, менять их состояния

Согласен
PM MAIL   Вверх
Kbl4AH
Дата 15.3.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



Цитата(MoonDevil @  15.3.2009,  16:56 Найти цитируемый пост)
Добавь вот это

не делай так...
при нажатии кнопки открыть должен создаваться (если не создан) Мемо... (чего не делается в приведенном примере)
Код

procedure TForm1.VvodCreate(Sender: TObject) 
begin
  vvod:=tmemo.create(Sender);
  vvod.Parent:=form1;//ðîäèòåëü
  vvod.Show;//ïîêàçûâàåì ïîëå
  vvod.Align:=alClient;//âûðàâíèâàåì
end;

procedure TForm1.N3Click(Sender: TObject);//Ïðîöåäóðà "Ôàéë->Îòêðûòü"
begin
  if OpenDialog1.Execute then
  begin
    if not Assigned(Vvod) then
      VvodCreate(Self);    
//ïðîâåðèòü ñîçäàíî ëè memo ïîëå
  vvod.Lines.LoadFromFile(OpenDialog1.FileName);
  Form1.Caption:=OpenDialog1.FileName;
  end;
end;

procedure TForm1.N7Click(Sender: TObject);//ïðîöåäóðà "Ôàéë->Çàêðûòü"
begin
  FreeAndNil(vvod);
end;

procedure TForm1.N1Click(Sender: TObject);//Ïðîöåäóðà "Ôàéë->Íîâûé"
begin
  if not Assigned(Vvod) then
    VvodCreate(Self);
end;


Добавлено через 2 минуты и 55 секунд
Цитата(Christoph @  15.3.2009,  17:20 Найти цитируемый пост)
а проще нельзя?код Pascal/Delphi1:if vvod <> nil then

Ващет после 
использования
Object.Free; или не использования
Object в обоих случаях не равен nil

Это сообщение отредактировал(а) Kbl4AH - 15.3.2009, 17:34
PM MAIL ICQ   Вверх
Kbl4AH
Дата 15.3.2009, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



Цитата(Christoph @  15.3.2009,  17:20 Найти цитируемый пост)
имхо лучше в Object Inspector, сделать некоторые элементы TMenuItem'ы  недоступными, а по ходу работы, менять их состояния

 smile 
подменю "Открыть" всегда должно быть доступно!!!
PM MAIL ICQ   Вверх
THandle
Дата 15.3.2009, 18:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Зачем пересоздавать Memo туда-сюда? Я честно говоря особого смысла не вижу. Сделать просто Clear и Hide. Я понимаю, были бы целые вкладки, для каждого файла... Но пересоздавать с такими "муками" один Memo - ИМХО, не стоит.
PM   Вверх
LAGOX
Дата 15.3.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 14.2.2009

Репутация: нет
Всего: нет



так и сделал. с помощью visible
PM MAIL ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0824 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.