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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2011, 02:12   #1
Kompressor
 
Регистрация: 10.10.2011
Сообщений: 8
По умолчанию Delphy. После вызова модального окна циклится DateTimePicker. Не могу понять почему

Описание программы : На главной форме 3 компонента :
StringGrid, DateTimePicker, MainMenue. При запуске открывается текстовый файл и его содержимым заполняется StringGrid. При замене месяца в DateTimePicker проверяем, редактировался ли StringGrid, и если "да", то выводим модально диалог сохранения, потом меняем месяц и загружаем в StringGrid другой текстовый файл, соответствующий месяцу в DateTimePicker. Проблема : Как только закрывается модальная форма- DateTimePicker начинает последовательно перебирать месяцы без остановки. помогите пожалуйста найти причину.

код главной формы :
Код:
unit Unit1;

var
  Form1: TForm1;
  MY: string; //MonthYear хранит имя файла, берет его из DTP1
  ismen: boolean;//Определяет изменился ли SG1 или нет
implementation

uses USaveDialog;

{$R *.dfm}

//Загружаем файл в SG

procedure TForm1.sg1;
var
  F : TextFile;
  Sg : TStringGrid;
  i, j, Num : Integer;
  S : String;
Begin

     Sg := StringGrid1;
  AssignFile(F, MY);
  Reset(F);
  //Чтение сведений о размерах таблицы.
  //Общее количество строк.
  Readln(F, Num);
  if Num = 0 then begin
    ShowMessage('Неверный формат файла. Действие отменено.');
    CloseFile(F);
    Exit;
  end;//If


  if Num < Sg.RowCount then
    for i := Num - 1 to Sg.RowCount - 1 do
      Sg.Rows[i].Clear;
  Sg.RowCount := Num;
  //Общее количество столбцов.
  Readln(F, Num);
  if Num = 0 then begin
    ShowMessage('Неверный формат файла. Действие отменено.');
    CloseFile(F);
    Exit;
  end;
  //Очистка лишних столбцов.
  if Num < Sg.ColCount then
    for i := Num - 1 to Sg.ColCount - 1 do
      Sg.Cols[i].Clear;
  Sg.ColCount := Num;
  //Количество фиксированных строк и толбцов.
  Readln(F, Num);
  Sg.FixedRows := Num;
  Readln(F, Num);
  Sg.FixedCols := Num;
  //Построчное чтение данных ячеек таблицы.
   for i := 0 to Sg.RowCount - 1 do
   for j := 0 to Sg.ColCount - 1 do begin
    Readln(F, S);
    Sg.Cells[j, i] := S;
  end;
  CloseFile(F);
End;//begin


//Сохраняем открытый месяц (нашу MY)

procedure TForm1.SaveSg1(Sender: TObject);
var
  F : TextFile;
  Sg : TStringGrid;
  i, j, Cnt, CntMax : Integer;
begin
  Sg := StringGrid1;
  AssignFile(F, MY);
  Rewrite(F);
  //Запись сведений о рамерах таблицы.
  Writeln(F, Sg.RowCount);
  Writeln(F, Sg.ColCount);
  Writeln(F, Sg.FixedRows);
  Writeln(F, Sg.FixedCols);
  //Общее количество ячеек в таблице.
  CntMax := Sg.RowCount * Sg.ColCount;
  //Счётчик записанных в файл ячеек.
  Cnt := 0;
  //Построчная запись данных из ячеек таблицы.
   for i := 0 to Sg.RowCount - 1 do
   for j := 0 to Sg.ColCount - 1do begin
    Write(F, Sg.Cells[j, i]);
    Inc(Cnt);
    if Cnt < CntMax then Writeln(F);
  end;
  CloseFile(F);
end;//begin

procedure TForm1.Button1Click(Sender: TObject);
begin
SaveSg1(Sender);
end;

// Меняем месяц и SG 

procedure TForm1.DTP1Change(Sender: TObject);
begin
if ismen=True then FSAveDialog.ShowModal;


MY:='Month\'+FormatDateTime('mmmm_yyyy',(DTP1.date))+'.txt';
if FileExists(MY) then sg1(Sender)
else
MY:='Month\'+FormatDateTime('mmmm_yyyy',date)+'.txt';
sg1(Sender);
end;
 
 //Создаем форму и проверяем секретный файл

procedure TForm1.FormCreate(Sender: TObject);
begin
 // if FileExists('c:\buffer.ini') then begin
   MY:='Month\'+FormatDateTime('mmmm_yyyy',date)+'.txt';
   sg1(Sender);
  { end
  Else begin
  ShowMessage('Другой компьютер ? Сменили систему ? Редактировать теперь нельзя !!!');
  StringGrid1.Options:=StringGrid1.Options-[goEditing];
  MY:='Month\'+FormatDateTime('mmmm_yyyy',date)+'.txt';
  sg1(Sender);
  End; }
  end;

  //Реакция на изменение в SG1

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: String);
begin
ismen:=True;
end;

 //Кнопка "сохранить" в main Menu

procedure TForm1.N2Click(Sender: TObject);
begin
 SaveSg1(Sender);
 ismen:=False;
end;
end.

Код формы с диалогом :
Код:
unit USaveDialog;

interface

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

type
  TFSAveDialog = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FSAveDialog: TFSAveDialog;

implementation

uses Unit1;

{$R *.dfm}

procedure TFSAveDialog.Button1Click(Sender: TObject);
begin
Form1.SaveSg1(Sender);
Unit1.ismen:=False;
Form1.DTP1Change(Sender);
close;
end;

procedure TFSAveDialog.Button2Click(Sender: TObject);
begin
Unit1.ismen:=False;
Close;
end;

end.

Если есть необходимость- добавлю архив с исходником.
Kompressor вне форума Ответить с цитированием
Старый 10.10.2011, 06:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
код главной формы
Что весь код что ли??
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.10.2011, 08:37   #3
Kompressor
 
Регистрация: 10.10.2011
Сообщений: 8
По умолчанию

Ну да, весь... На форме ведь всего 3 компонента пока..
Kompressor вне форума Ответить с цитированием
Старый 10.10.2011, 08:38   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
При замене месяца в DateTimePicker проверяем, редактировался ли StringGrid, и если "да", то выводим модально диалог сохранения, потом меняем месяц
получаем DTP1change (замена месяца)и понеслась.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять в почему ошибка Donim Паскаль, Turbo Pascal, PascalABC.NET 5 08.06.2011 23:07
Не могу понять почему не работает микрофон Stilet Компьютерное железо 8 08.10.2010 16:54
Почему не работает...хм....понять не могу! Артур Иваныч Microsoft Office Excel 9 01.12.2009 17:58
Не могу понять почему блокируется папка Paul Hindenburg Общие вопросы Delphi 4 07.05.2009 10:47