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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2015, 17:11   #61
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

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

Вы же сами писали, что до создания 4-ой формы таких проблем не было, да и не совсем корректно так с формы 4 обращаться к элементам формы 1.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 04.08.2015, 21:22   #62
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Цитата:
Вы же сами писали, что до создания 4-ой формы таких проблем не было, да и не совсем корректно так с формы 4 обращаться к элементам формы 1.
я уже переделал создание формы с Form1, но тем не менее мне нужно как-то реализовать сохранение с Form4 при том что ListView лежит на Form1, нужен конкретный пример и конкретно с ListView. Спасибо.

Код:
procedure TForm4.sBitBtn1Click(Sender: TObject);
var
  Datas:TStringList;
  i:integer;
begin
  Datas:=TStringList.Create;

    if (Form1.sListView1.Items.Count>0) and (Form1.sSaveDialog1.Execute) then
    begin

      {if Column.Index=0 then
      begin}

          for i:=0 to Form1.sListView1.Items.Count-1 do
          begin
            Datas.Add(Form1.sListView1.Items[i].Caption);
          end;

        Datas.SaveToFile(Form1.sSaveDialog1.FileName);
      {end
      else
      if Column.Index>0 then
      begin

          for i:=0 to Form1.sListView1.Items.Count-1 do
          begin
            Datas.Add(Form1.sListView1.Items[i].SubItems[Column.Index-1]);
          end;

        Datas.SaveToFile(Form1.sSaveDialog1.FileName);
      end;}

    end;

  Datas.Free;
  Form4.Close;
end;
такой вот код работает отлично, все из-за отсутствия Column.Index, мне его нужно правильно перенести или правильно прописать на Form4 т.к я обьявил глобальную переменную в Form1 -> Column:TListColumn; но как видим проэкт компилируется но не работает.

Последний раз редактировалось Stilet; 05.08.2015 в 08:29.
FleXik вне форума Ответить с цитированием
Старый 04.08.2015, 22:35   #63
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Наверно уже 3-ий раз буду повторять, а почему бы не перенести этот код обратно в первую форму?

Будет что-то вроде этого:

Код:
procedure TForm1.sListView1ColumnClick(Sender: TObject; Column: TListColumn);
begin
  Form4.ShowModal;
  // сюда вернуть код, который будет сохранять уже с параметрами, которые мы возьмем с формы 4.
end;
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 05.08.2015, 01:01   #64
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

короче сделал так

Код:
procedure TForm1.sListView1ColumnClick(Sender: TObject;
  Column: TListColumn);
begin
  ci:=0;
  ci:=Column.Index;
  Application.CreateForm(TForm4, Form4);
  Form4.ShowModal;
end;
но нельзя ли без этого обойтись? чтобы можно было узнать индекс нажатой колонки в ListView с Form4?

Код:
procedure TForm4.sBitBtn1Click(Sender: TObject);
var
  Datas:TStringList;
  i:integer;
begin
  Datas:=TStringList.Create;

    if (Form1.sListView1.Items.Count>0) and (Form1.sSaveDialog1.Execute) then
    begin

      if ci=0 then
      begin

          for i:=0 to Form1.sListView1.Items.Count-1 do
          begin
            Datas.Add(Form1.sListView1.Items[i].Caption);
          end;

        Datas.SaveToFile(Form1.sSaveDialog1.FileName);
      end
      else
      if ci>0 then
      begin

          for i:=0 to Form1.sListView1.Items.Count-1 do
          begin
            Datas.Add(Form1.sListView1.Items[i].SubItems[ci-1]);
          end;

        Datas.SaveToFile(Form1.sSaveDialog1.FileName);
      end;

    end;

  Datas.Free;
  Form4.Close;
end;
работать-то работает... но хотелось бы без лишних переменных

если что-то не так - подправьте меня, спасибо.


или лучше ci:=0; запихнуть в свойство Form1.Create?

Последний раз редактировалось Stilet; 05.08.2015 в 08:30.
FleXik вне форума Ответить с цитированием
Старый 05.08.2015, 03:19   #65
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Можно обойтись и без этого, если сделать форму 4, которая не будет зависеть от формы 1.

Unit1.pas - основная форма
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    btnShowForm2: TButton;
    procedure btnShowForm2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnShowForm2Click(Sender: TObject);
var currSaveInfo: TForm2Info;
    tempStr: String;
begin

  if not Form2.GetSaveInfo(@currSaveInfo) then
  begin
    ShowMessage('Форму 2 отменили или закрыли');
    exit;
  end;

  //  ВМЕСТО ЭТОГО ДОЛЖНО БЫТЬ СОХРАНЕНИЕ В ФАЙЛ С ЭТИМИ ПАРАМЕТРАМИ!!!
  //  ##################################################################
  //  собираем и выводим данные с формы 2
  tempStr:=' А ВОТ И ПАРАМЕТРЫ'+#13#10#13#10;

  tempStr:=tempStr+'Тип сохранения: ';

  case currSaveInfo.saveType of
    SaveType_TXT: tempStr:=tempStr+'TXT';
    SaveType_CSV: tempStr:=tempStr+'CSV';
  end;

  tempStr:=tempStr+#13#10+'Разделитель: '+currSaveInfo.separator;
  ShowMessage(tempStr);
  //  ##################################################################

end;

end.
Unit2.pas - вторая форма
Код:
unit Unit2;

interface

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

type

  TSaveType = (SaveType_TXT, SaveType_CSV);

  TForm2Info = Record
    saveType: TSaveType;
    separator: Char;
  end;

  PForm2Info = ^TForm2Info;

  TForm2 = class(TForm)
    btnOK: TButton;
    btnCANCEL: TButton;
    edtSeparator: TEdit;
    lblSeparator: TLabel;
    rbTxt: TRadioButton;
    rbCsv: TRadioButton;
    procedure btnOKClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure btnCANCELClick(Sender: TObject);
  private
    acceptStatus: boolean;
    currSaveInfo: TForm2Info;
    { Private declarations }
  public
    function GetSaveInfo(saveInfo: PForm2Info):Boolean;
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.btnOKClick(Sender: TObject);
begin
  if Length(edtSeparator.Text)<=0 then
  begin
   ShowMessage('Incorrect separator');
   exit;
  end;

  acceptStatus:=true;

  if rbTxt.Checked then currSaveInfo.saveType:=SaveType_TXT
  else currSaveInfo.saveType:=SaveType_CSV;

  currSaveInfo.separator:=edtSeparator.Text[1];

  close;
end;

function TForm2.GetSaveInfo(saveInfo: PForm2Info):Boolean;
begin
  ShowModal;
  if acceptStatus then saveInfo^:=currSaveInfo;
  result:=acceptStatus;
end;

procedure TForm2.FormShow(Sender: TObject);
begin
  acceptStatus:=false;
end;

procedure TForm2.btnCANCELClick(Sender: TObject);
begin
  close;
end;

end.
К сообщению прикрепил и сам проект на Delphi 7.

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

BlackMan.jpg
Вложения
Тип файла: rar proj.rar (176.6 Кб, 5 просмотров)
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 05.08.2015, 08:47   #66
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Автор, а чем тебе не понравилось переопределение ShowModal на вход которого поступает твоя строка ?
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка содержимого txt в ListView foxes Общие вопросы Delphi 6 27.04.2011 00:07
(VB) Проблема с сохранением phantom4eg Помощь студентам 0 16.09.2009 21:45
Проблема с сохранением данных KLOP Общие вопросы Delphi 10 09.04.2009 11:17
Загрузка содержимого txt в ListView Rendll Компоненты Delphi 2 26.03.2009 11:04
Проблема с сохранением БД! Disday БД в Delphi 4 21.04.2008 00:54