Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Таймер в таблицу 
:(
    Опции темы
MrDmitry
Дата 13.8.2010, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Задал вопрос тут http://forum.vingrad.ru/forum/act-ST/f-84/...9/unread-1.html
Цитата


Как Динамически создавать таймер на ячейку StrinGrida? 

Например есть такая таблица(StrinGrid)

Id Таймер Телефон Дата

По какой то кнопке добавляем новую запись в StrinGrid, в столбце Таймер нужно чтоб запускался таймер,  При добавлении новой записи в StrinGrid в Следующей строке запускался таймер начиная с нуля, при этом таймер предыдущий строки не обнулялся ну и т.д 


Господин Amphiluke Помог кодом, за что ему еще раз огромное спасибо. 

Код

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids, DateUtils;
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  with StringGrid1 do
  begin
    FixedCols := 0;
    FixedRows := 1;
    RowCount := 2;
    ColCount := 4;
    Rows[0].Text := 'Id'#13#10'Timer'#13#10'Tel'#13#10'Date'#13#10;
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  LastRow: Integer;
  UnixTime: Int64;
  TimeLo, TimeHi: Integer;
begin
  LastRow := StringGrid1.RowCount;
  StringGrid1.RowCount := LastRow + 1;
  UnixTime := DateTimeToUnix(Now());
  TimeLo := Integer(UnixTime and $FFFFFFFF);
  TimeHi := Integer(UnixTime shr 32);
  { "Раскидаем" текущее время по двум ячейкам, поскольку в одну можно
    поместить только 4 байта без динамического выделения памяти под объект.
    Integer и TObject - 4-хбайтные типы, можно приводить их друг к другу }
  StringGrid1.Objects[0, LastRow] := TObject(TimeLo);
  StringGrid1.Objects[1, LastRow] := TObject(TimeHi);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
  UnixTime: Int64;
  h, m, s: Integer;
  i: Integer;
begin
  with StringGrid1 do
    for i := 1 to RowCount - 1 do
    begin
      if (Objects[0, i] = nil) and (Objects[1, i] = nil) then Continue;
      { собираем из двух частей время создания строки StringGrid'a }
      UnixTime := Integer(Objects[0, i]) or (Integer(Objects[1, i]) shl 32);
      { время прошедшее, с момента создания }
      UnixTime := DateTimeToUnix(Now()) - UnixTime;
      h := Trunc(UnixTime / 3600); // сколько прошло часов с момента добавления строки
      m := Trunc(UnixTime / 60) - h * 60; // сколько прошло минут
      s := UnixTime - h * 3600 - m * 60; // сколько секунд
      Cells[1, i] := IntToStr(h) + ':' + IntToStr(m) + ':' + IntToStr(s);
    end;
end;
end.


Но теперь возникла одна проблема. В начале предполагалось что у заказчика будут файлы, которые должны будут взаимодействовать со StrinGrid теперь же выяснялось что у заказчика база MSQL 2000 с которой нужно взаимодействовать, и естественно приведенный выше год не действует на StrinGrid ((( Как быть?? Все время по таймеру изменять запись и рефрешить базу? (( Может есть какой то более удобный способ, например есть официально приобретенный компанент TMS DBAdvGrid у него возможностей гораздо больше нежели у обычного DbGrida но как не странно работа с таймерами там не предусмотрена ))

Это сообщение отредактировал(а) MrDmitry - 13.8.2010, 10:17
PM MAIL   Вверх
Deniz
Дата 13.8.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

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



Цитата(MrDmitry @  13.8.2010,  12:16 Найти цитируемый пост)
и естественно приведенный выше год не действует на StrinGrid
что значит не действует?
Все почти тоже самое, только нужно добавить в Button1Click добавление записи в БД, а в FormCreate (для этого примера) загрузку записей из БД в stringGrid.
Можно придумать что-то другое, но пока не пойму для чего это надо.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
MrDmitry
Дата 15.8.2010, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Deniz @ 13.8.2010,  13:48)
Цитата(MrDmitry @  13.8.2010,  12:16 Найти цитируемый пост)
и естественно приведенный выше год не действует на StrinGrid
что значит не действует?
Все почти тоже самое, только нужно добавить в Button1Click добавление записи в БД, а в FormCreate (для этого примера) загрузку записей из БД в stringGrid.
Можно придумать что-то другое, но пока не пойму для чего это надо.

Я опечатался, 
Цитата

и естественно приведенный выше год не действует на StrinGrid

Я хотел написать что приведенный выще год не действует на DBGrid. А при работе с DbGrid было бы гораздо удобнее взаимодействовать с базой, чем если это делать через обычный StrinGrid. При этом используется не стандартный DbGrid а DbAdvGrid. У этого компонента среди стандартных свойств для связи таблицы с бд есть и свойство Cells
PM MAIL   Вверх
MrDmitry
Дата 16.8.2010, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ни как? (
PM MAIL   Вверх
pseud
Дата 16.8.2010, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



Цитата(MrDmitry @  16.8.2010,  07:02 Найти цитируемый пост)
Ни как? (

Делай раз:
1. Новое приложение.
В дизайне:
2. Набросай на форму Timer1 и Query1 <- DataSource1 <- DBGrid1
3. Query1.DatabaseName = DBDEMOS
4. Query1.SQL = select * from events
5. Query1.Active = True
6. Query1 - двойной клик - в окне полей выбираеш правой кнопкой мыши "Add All Fields"
7. Event_Time.OnGetText 
Код

  Text := TimeToStr(Time - Sender.AsDateTime);

8. Timer1.OnTimer
Код

  DBGrid1.Refresh;

Вот все и тикает ежесекундно. Ну в некоторых ячейках в обратную сторону. Но смысл то ясен?

Добавлено @ 09:42
user posted image

Это сообщение отредактировал(а) pseud - 16.8.2010, 11:04


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
MrDmitry
Дата 16.8.2010, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все, спасибо, теперь дошло )))

Это сообщение отредактировал(а) MrDmitry - 16.8.2010, 13:07
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


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

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

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


 




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


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

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