Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.08.2009, 22:25
StipJey StipJey вне форума
Прохожий
 
Регистрация: 27.08.2009
Адрес: Ивановская область
Сообщения: 12
Репутация: 10
Лампочка Работа с OpnDlg, SaveDlg и не только

Привет!
Немного о себе:
Я закончил годовые курсы по программированию в Delphi7, и получил начальные знания, которых совершенно недостаточно для настоящего программирования.

Суть проблемы:
Совершенно не понимаю как работают OpenDialog и SaveDialog

Какая требуется помошь
Написание примерного кода программы (ниже) с комментариями (желательно)

Описание программы

Программа состоит из двух форм.

на первой форме находятся 3 Edit'а.
в первый и второй вводится текст, третий содержит полное имя сохраняемого файла (незнаю, наверно можно и без него), рядом с ним кнопка открытия SaveDialog'а (вот здесь поподробней нужно). далее вводим название файла для сохранения и жмем сохранить. Текст из двух эдитов сохраняется в текстовый файл (пусть будет разрешение *.SJ) так, что текст из первого эдита на первой строчке, а из второго на второй.
На второй форме тоже находятся три эдита (или два, если путь к файлу не нужен) и кнопка, которая вызывает окно OpenDialog'а. При нажатии на кнопку открывается это окно, пользователь выбирает файл и нажимает открыть. (программа может открывать файлы только *.SJ) Информация из него (там всего две строчки) попадает в соответствующие эдиты. Первая строчка в первый эдит, вторая - во второй.

Дополнение:
Нужно чтоб у программы было меню для переключения между формами.

Вот в принципе и все! Очень жду помощи. в форум можно выложить код, и желательно отправить исходники на мэйл Stip@xaker.ru
Ответить с цитированием
  #2  
Старый 27.08.2009, 22:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Курсовые, лабораторные, зачетные и т.д. работы - это в другой раздел. Это раз.
Два. Эти диалоги предназначены для получения имени файла для открытия/сохранения, а не для выполнения собственно самих операций. Вызываешь у диалога метод execute. Если он вернул True, то в свойстве FileName будет выбранное пользователем имя файла. Берешь его и начинаешь сохранять свои данные. Все.
Ответить с цитированием
  #3  
Старый 27.08.2009, 22:48
StipJey StipJey вне форума
Прохожий
 
Регистрация: 27.08.2009
Адрес: Ивановская область
Сообщения: 12
Репутация: 10
По умолчанию хм.

Это не курсовая работа, я учусь всего лишь в 10 классе (1 сентября пойду)

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

если невозможно сделать исходник, то объясните мне в коде как это все работает.

у меня был первый вариант моей работы, где имя файла задавалось в самом коде, соответственно можно было работать только с одним файлом, который заново перезаписывался.
Тем более я не уверен в правильной работе с файлами (несколько команд из Turbo паскаля (это мой первый язык))

Думаю вы меня поймете.
Ответить с цитированием
  #4  
Старый 27.08.2009, 23:01
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

opendialog1.execute
a:=opendialog1.filename ... и далше уже работай с "a"
Ответить с цитированием
  #5  
Старый 27.08.2009, 23:07
StipJey StipJey вне форума
Прохожий
 
Регистрация: 27.08.2009
Адрес: Ивановская область
Сообщения: 12
Репутация: 10
По умолчанию

так, это уже хорошо.
сэйвдиалог работает по такому же принципу (как я понял)? А в "А" будет храниться путь к файлу? тоесть можно Edit3.text:=a; ?

а как насчет заполнения эдитов информацией из файла с редким разширением *.SJ?
Ответить с цитированием
  #6  
Старый 27.08.2009, 23:10
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

Ты распарси файл и заполняй.. не просто же так ты хотел его открыт ьи что бы он стал "читабельным" ?))
Ответить с цитированием
  #7  
Старый 27.08.2009, 23:30
StipJey StipJey вне форума
Прохожий
 
Регистрация: 27.08.2009
Адрес: Ивановская область
Сообщения: 12
Репутация: 10
По умолчанию

эмм, а можно на понятном простому 10класснику языке?
Что такое "распарси"?


PS эта программа является лишь так называемым примером, и не является программой для использования кем либо. Основной смысл - это понять как все это работает и использовать полученные знания для использования в дальнейшем!
Ответить с цитированием
  #8  
Старый 28.08.2009, 00:43
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
Сообщение от StipJey
эмм, а можно на понятном простому 10класснику языке?
Что такое "распарси"?


PS эта программа является лишь так называемым примером, и не является программой для использования кем либо. Основной смысл - это понять как все это работает и использовать полученные знания для использования в дальнейшем!

Распарси - значит разбери файл с некоей упорядоченой структурой на минимально удобные для работы элементы.
Например файл Html или XML содержит элементы окантованые <>
Для файлов Pas таковыми являются ключевые директивы или конструкции и т.д.
Что за файл у вас такой *.SJ я лично понятия не имею, да и расширение файла далеко не всегда говорит о его содержимом.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 28.08.2009, 01:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

пример использования (об использованных классах читай в справке):

Код:
procedure TForm1.btSaveClick(Sender : TObject);
begin
  If SaveDialog1.Execute Then
    With TStringList.Create Do
      Begin
        Add(Edit1.Text);
        Add(Edit2.Text);
        SaveToFile(SaveDialog1.FileName);
        Free;
      End;
end;

procedure TForm1.btOpenClick(Sender : TObject);
begin
  If OpenDialog1.Execute Then
    With TStringList.Create Do
      Begin
        LoadFromFile(OpenDialog1.FileName);
        If Count > 0 Then Edit1.Text := Items[0] Else Edit1.Text := '';
        If Count > 1 Then Edit2.Text := Items[1] Else Edit2.text := '';
        Free;
      End;
end;
Ответить с цитированием
  #10  
Старый 28.08.2009, 09:14
StipJey StipJey вне форума
Прохожий
 
Регистрация: 27.08.2009
Адрес: Ивановская область
Сообщения: 12
Репутация: 10
По умолчанию

Спасибо!
Почти весь код понял, но вопросы есть.

Что такое
Free;
TStringList;
Count
?

а вот Items[0] это первая строчка файла? а Items[1] - вторая?

а можно сделать чтобы программа сохраняла из первого эдита например на 10 строчку, а из второго на 15? Читать также? тоесть для 10 строчки Items[9], а для 15 Items[14]? Кстати на итемс ругается!

Можно ли сделать программу, которая прочитывает текстовый файл, а на экран (в эдит) выводит только строчку, которая размещается между определенной комбиначией символов, например // Строчка // Вывод без слэшей

Последний раз редактировалось StipJey, 28.08.2009 в 10:23.
Ответить с цитированием
  #11  
Старый 28.08.2009, 22:08
StipJey StipJey вне форума
Прохожий
 
Регистрация: 27.08.2009
Адрес: Ивановская область
Сообщения: 12
Репутация: 10
Радость аууууууууу

Все? Кончилось желание помочь? жаль...

я надеялся что это
Цитата:
Вспомогательный раздел для программистов у которых возникают вопросы при решении простых задач,

а где можно найти
Цитата:
тех у кого есть желание помочь новичкам.
Ответить с цитированием
  #12  
Старый 28.08.2009, 23:35
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Здесь, но сюда ходят энтузизисты у которых тоже есть свои заморочки, и именно вашего сообщения никто не ждет. В выходные будет больше народу.
А что касается вопросов, то выдавайте информацию по максимуму, а не по чайной ложке. Что я должен подумать на ваш вопрос/восклицание:
Цитата:
Кстати на итемс ругается!
Где ругается, как ругается, в какой момент, а уж без исходного кода где происходит ошибка вообще непонятки. Кроме того, когда вы регистрировались на форум, вы там галочку поставили что обещали прежде чем задать вопрос здесь, воспользоваться справкой и поиском. А судя по вашим вопросам, вы даже и не подумали это сделать.
Итак, свою порцию недовольства я вам выложил, теперь по вашим вопросам:
Цитата:
Что такое
Free;
TStringList;
Count?
Free - метод который освобождает выделенную для создания объекта память, под другие нужды. Если при выходе из программы вы получаете сообщение об ошибке, то в 99% случаях - это именно по причине неосвобожденной памяти.
TStringList - один из стандартных классов, любезно предоставленых разработчиками Дэльфи. Очень удобен при работе с наборами строк. Имеет встроеные мощные средства управления и манипуляци этими строками.
Count - в общем случае свойство объекта возвращающе количество элементов. Для TStringList возвращает количество элементов находящихся в свойстве Strings
Цитата:
а вот Items[0] это первая строчка файла? а Items[1] - вторая?
И да и нет. В приведенном примере в Items[0] помещается копия первой строки считаной из файла методом LoadFromFile, а потому в Items хранится не сам файл, а копии строк его составляющие.
Вообще, приведенный пример содержит один хитрый финт, который для новичка может быть непонятен. Хитрость в том, что обычно создают экземпляр класса в явном виде, а потом с ним работают. А в этом примере, экземпляр создается в неявном виде и доступ к его свойствам/методам, можно получить, только в пределах блока with.

В общем где-то так.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #13  
Старый 29.08.2009, 00:21
StipJey StipJey вне форума
Прохожий
 
Регистрация: 27.08.2009
Адрес: Ивановская область
Сообщения: 12
Репутация: 10
Смущение

Спасибо! Критику воспринял

код вот такой (выложил весь, чтоб было понятней, ошибочное место выделил красным, Знаком || выделено положение курсора)
Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

  If SaveDialog1.Execute Then
    With TStringList.Create Do
      Begin
        Add(Edit1.Text);
        Add(Edit2.Text);
        SaveToFile(SaveDialog1.FileName);
        Free;
      End;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  If OpenDialog1.Execute Then
    With TStringList.Create Do
      Begin
        LoadFromFile(OpenDialog1.FileName);
        If Count > 0 Then Edit1.Text := Items||[0] Else Edit1.Text := '';
        If Count > 1 Then Edit2.Text := Items[1] Else Edit2.text := '';
        Free;
      End;
end;

end.

Цитата:
[Ошибка] Unit1.pas(52): Undeclared identifier: 'Items'
[Фатальная ошибка] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

вот такто

Далее... поиском я пользуюсь, и прочитал немало статей прежде чем обратился к вам.

а можно тебя попросить написать эту программку, она же для вас - раз плюнуть, а мне полезно будет
Ответить с цитированием
  #14  
Старый 29.08.2009, 00:58
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от StipJey
Спасибо! Критику воспринял

Молодец, что воспринял.

По поводу ошибки, ну не боги горшки обжигают. Мог и напутать с именем свойства - код писал сразу здесь. Попробуй вместо Items использовать Strings. Должно сработать.

По поводу желания помогать. А чего ты хотел в час ночи (ну или когда ты там сообщение написал)?
Ответить с цитированием
  #15  
Старый 29.08.2009, 01:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от StipJey
Можно ли сделать программу, которая прочитывает текстовый файл, а на экран (в эдит) выводит только строчку, которая размещается между определенной комбиначией символов, например // Строчка // Вывод без слэшей

Можно, тебе потребцуются функции Pos и Copy.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:13.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025