Нужно забивать табличные данные и отправлять в 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^;
....
Звание изобретателя велосипедов не предлагать - у меня патент устройства "колесо" есть

Дык вот...чёж придумать ещё можно? Пасиб.