Табличные данные, удаление, добавление

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Табличные данные, удаление, добавление

Сообщение mildok » 26.11.2013 13:45:52

Всем привет.

Нужно забивать табличные данные и отправлять в Excel'евский файл. Система Windows.

Собственно ничего хитрого - сделал с помощью TStringGrid.

Проверка данных производится при вводе - тож ничего сложного - сделал.

Проблема с проверкой данных в произвольной ячейке: предположим в строке i, столбце j решили изменить данные - меняют их, производится их проверка (StringGridEditingDone) и последующая закраска этой ячейки(StringGridDrawCell) - в красный(если данные неверны) - или в нормальный (если данные верны).

Но при изменении размера формы закрашивание пропадает(печалько :( ).

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

Вообщем - энту "цветую карту" неправильных данных над где-то хранить. И вроде бы динамический массив должен подойти - но там с удалением произвольного элемента (из середины массива где-нибудь) не очень хорошо - надо скопировать всё до этого произвольного элемента и всё что после, в новый динамический массив, и очистить память "старого" динамического массива. (возможно есть лучше способ, но я - дурак, и их не знаю).

Можно использовать списки - но чтоб удалить i-тый элемент это с одного конца над шуровать по всем элементам, пока найдёшь его...

Раньше про SQL почитывал - где-т не помню как раз встречал фразу, что удаление произвольного элемента в большой таблице - нехилая мат. задача, и что это как раз одна из тех самых проблем, из-за которых вообще появились БД (SQL, firebird и т.д.).

У меня, впринципе, таблицы будут небольшие (обещали меньше 90 строк на 16 столбцов). Ради них конечно можно mysql прикрутить - но база данных будет "путешественница" - на флешке будет гулять у сотрудников, поэтому лучше Excel, конешн...

Сделал всё с помощью ещё одного TStringGrid0 в котором и хранится "цветовая карта", в нём удаляются строки, когда удаляются в основном TStringGrid и добавляются тож синхронно...и вообще TStringGrid0 невидима...

А и глупый вопрос напоследок, как эффективнее, так:
Код: Выделить всё
procedure TForm1.StringGridEditingDone(Sender: TObject); 
begin
    whoSend := (Sender as TStringGrid);
....

или так:
Код: Выделить всё
procedure TForm1.StringGridEditingDone(Sender: TObject); 
var
  s: ^TStringGrid;
begin
    s := @Sender; 
    whoSend := s^;
....


Звание изобретателя велосипедов не предлагать - у меня патент устройства "колесо" есть :D

Дык вот...чёж придумать ещё можно? Пасиб.
mildok
новенький
 
Сообщения: 22
Зарегистрирован: 08.05.2010 14:09:36

Re: Табличные данные, удаление, добавление

Сообщение VirtUX » 26.11.2013 18:04:08

whoSend := (Sender as TStringGrid); или whoSend := TStringGrid(Sender);
но это при условии, что Sender действительно является TStringGrid. Для надежности рекомендовал бы проверку:
Код: Выделить всё
if Sender is TStringGrid then whoSend := TStringGrid(Sender);
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Табличные данные, удаление, добавление

Сообщение mildok » 27.11.2013 06:53:44

VirtUX писал(а):whoSend := (Sender as TStringGrid); или whoSend := TStringGrid(Sender);
но это при условии, что Sender действительно является TStringGrid. Для надежности рекомендовал бы проверку:
Код: Выделить всё
if Sender is TStringGrid then whoSend := TStringGrid(Sender);


Спасибо! :)
mildok
новенький
 
Сообщения: 22
Зарегистрирован: 08.05.2010 14:09:36


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 245

Рейтинг@Mail.ru