Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2014, 15:13   #1
kudzey
Пользователь
 
Регистрация: 14.08.2014
Сообщений: 20
По умолчанию работа с 2 формами в free pascal

доброго времени суток, и благодарю за помощь зараннее.
а теперь к преблеме. мне нужно как то связать две формы, для того чтоб из первой формы копировать во вторую форму строки для редактирования, и затем возвращать их обратно.
строки должны копироватся в edit где я и смогу проводить необходимые монипуляции с ними, и от туда же возвращатся обратно уже отредактированными.
kudzey вне форума Ответить с цитированием
Старый 20.08.2014, 16:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пропиши в uses имя модуля второй формы. Получишь доступ к ее полям компонентам и свойствам.
Код:
uses unit2...
...
Form2.Edit.Text:=...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2014, 17:06   #3
kudzey
Пользователь
 
Регистрация: 14.08.2014
Сообщений: 20
По умолчанию

перенос работает, как вернёть обратно строку?
вот код второй формы
Код:
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm2 }

  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.lfm}

{ TForm2 }

procedure TForm2.FormCreate(Sender: TObject);
begin
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
    begin
  if MessageDlg('Удалить запись?', mtInformation,
  [mbOk,mbCancel],0) = mrOK
  then
  begin
    Form1.ListBox1.Items.delete(ListBox1.ItemIndex);
    Form1.ListBox1.Items.SaveToFile('FileName');
  end;
end;

end;

procedure TForm2.Button2Click(Sender: TObject);
begin
    begin
   if MessageDlg('Вставить запись?', mtInformation,
   [mbOk,mbCancel],0) = mrOK
  then
  begin
  Form1.ListBox1.Items.Insert(ListBox1.ItemIndex, Edit1.text);
  Form1.ListBox1.Items.SaveToFile('FileName');
  end;
end;

end;

procedure TForm2.Button3Click(Sender: TObject);
begin
    begin
    if MessageDlg('Заменить запись?',
    mtInformation,[mbOk,mbCancel],0) = mrOK
  then
  begin
    Form1.ListBox1.Items[ListBox1.ItemIndex]:= edit1.Text;
    Form1.ListBox1.Items.SaveToFile('FileName');
  end;
end;

end;

end.
пишет ошибки что не видет listbox1 и form1
а если я добавляю
Код:
uses
 Unit1, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
то пишет
unit2.pas(8,7) Fatal: Circular unit reference between Unit2 and Unit1
kudzey вне форума Ответить с цитированием
Старый 20.08.2014, 17:15   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
перенос работает, как вернёть обратно строку?
ее не надо возвращать, ее надо "попросить" обратно.

Код:
x:=self.Listbox1.ItemIndex;
form2.Edit1.text:=self.Listbox1.Items[x];
form2.showModal;// "ждать" пока не отредактируем (не закроем form2)
self.Listbox1.Items[x]:=form2.Edit1.Text;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.08.2014 в 17:17.
evg_m вне форума Ответить с цитированием
Старый 20.08.2014, 17:37   #5
kudzey
Пользователь
 
Регистрация: 14.08.2014
Сообщений: 20
По умолчанию

при использование вашего кода всё работает, но немного не так
я использовал ваш код вот таки образом в первой форме
Код:
procedure TForm1.Edit1Change(Sender: TObject);
var
x:byte;
begin
  Form2.Edit1.Text := ListBox1.Items.Strings[ListBox1.ItemIndex];
x:=self.Listbox1.ItemIndex;
form2.Edit1.text:=self.Listbox1.Items[x];
form2.showModal;
self.Listbox1.Items[x]:=form2.Edit1.Text;

end;
после этого когда я выбрал строку мне сразу же открылась вторая форма с текстом для редактирования, хотя я сдела процедуру открытия по нажатью кнопки, после чего я попробовал отредактировать что то, оно не редактировалось но после того как я закрыл форму оно заменилось на отредактированное.
kudzey вне форума Ответить с цитированием
Старый 20.08.2014, 22:09   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
после того как я закрыл форму оно заменилось на отредактированное.
Это потому что form2.showModal;
Пока форма не закрыта код после этой строки выполняться не будет. Это правило модульных форм.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2014, 02:46   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,881
По умолчанию

Цитата:
Сообщение от kudzey Посмотреть сообщение
а если я добавляю
Код:
uses
 Unit1, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
то пишет
unit2.pas(8,7) Fatal: Circular unit reference between Unit2 and Unit1
Правильно пишет.
Но раздел USES может существовать не только в секции interface, где он создаётся автоматом IDE, но и в секции implementation. Но тут уже ручками придётся поработать.
Код:
var
  Form2: TForm2;

implementation
uses
  unit1;
{$R *.lfm}
northener на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с матрицами [Lazarus/Free pascal] studenteg Помощь студентам 1 23.10.2012 11:09
Работа с матрицей(Free Pascal) vaLERkAVV Помощь студентам 1 10.01.2012 20:45
Работа с матрицей(Free Pascal) vaLERkAVV Помощь студентам 1 20.12.2011 19:00
Turbo Pascal и Free Pascal , в чем разница? antoxann Паскаль, Turbo Pascal, PascalABC.NET 31 09.11.2011 07:52
а free pascal не читает задачи которые написаны на turbo pascal? demonara Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2009 16:28