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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2015, 08:30   #1
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию Быстро редактировать StringGrid

Рассклад следующий - я получаю из другого приложения WMCopyData и они еще дублируется сокетами (Synapce TCPBlockSoket) (про запас).
Данные получаю каждые 100мс при этом данных на обработку таблица 200х6 т.е. получаю 200 строк длиной ~80 символов, которую еще разбиваю по разделителю на столбики.

Таблица очень динамичная - данные быстро меняются и их хорошо уже научился подсвечивать, но кроме простого изменения - таблица может полностью переписываться новыми данными, вот в этом и проблема.
Сообщения в программу приходят но обрабатывать я их не успеваю поэтому решил спросить:

Как лучше полностью перезаписывать таблицу, быстрее:
1)Получили сообщение (add, edt, del) - сразу выполнили действие (сейчас так и реализовано)
2)Получили сообщение, накопили весь пакет, обработали - вывели (как хочу сделать).

Вопрос номер 2 - Что лучше, отправлять и обрабатывать сразу StrigList.Text или построчно?

Принимающая сторона:
Код:
procedure Tfmain.WMCopyData(var Msg: TWMCopyData) ;
var
  s : string;
  strl:TStringDynArray;
  i,j,frow,Result:integer;
begin
try
  s := PChar(Msg.CopyDataStruct.lpData) ;
  Result := 0;
  strl:=SplitString(s,' ');
  case Tmsgt(GetEnumValue(TypeInfo(Tmsgt), 'msg_' + strl[0])) of
  msg_add:
  if Grid.cols[0].IndexOf(strl[2])=-1 then
  begin
    if (Grid.Cells[Grid.ColCount-1, Grid.RowCount-1]<>'') then  Grid.RowCount:=Grid.RowCount+1;
    for I := 2 to High(strl) do
      Grid.Cells[i-2, Grid.RowCount-1] := strl[i];
    Grid.Cells[Grid.ColCount-1, Grid.RowCount-1] :=strl[1];
    if (Grid.RowCount>2) then SortStringGrid(Grid,Grid.ColCount-1);
    Result := 1;
  end;
  msg_edt:
  if Grid.cols[0].IndexOf(strl[2])<>-1 then
  begin
    frow:=Grid.Cols[0].IndexOf(strl[2]);
    if frow <> -1 then
    begin
      for I := 2 to High(strl) do
        Grid.Cells[i-2, frow] := strl[i];
      Grid.Cells[Grid.ColCount-1, frow] :=strl[1];
    end;
    Result := 2;
  end;
  msg_del:
  begin
      Grid.Perform(WM_SETREDRAW, 0, 0);
      frow:=Grid.Cols[0].IndexOf(strl[1]);
      if (frow <> -1) then
      begin
        Result := 3;
        if (Grid.RowCount>2) then DeleteARow(Grid,frow) else Grid.Rows[Grid.RowCount-1].Clear;
        {for I := 0 to Grid.ColCount-1 do
          Grid.Cells[i, Grid.RowCount-1] :='';}
      end;
      Grid.Perform(WM_SETREDRAW, 1, 0);
      Grid.Invalidate;
    end;
  end;
 end;
except
  Result := -1;
end;
  msg.Result:=Result;
end;

Последний раз редактировалось IvaniuS; 18.04.2015 в 08:33.
IvaniuS вне форума Ответить с цитированием
Старый 18.04.2015, 08:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как лучше полностью перезаписывать таблицу
Вообще никак. Храни все в двумерном массиве. А в гриде отображай (проецируй) только ту часть массива, которая нужна сейчас для отображения. И тут лучше всего применить не StringGrid а Drawgrid. Работай с гридом только на уровне отображения. Не надо на него вешать функцию анализа данных.
Цитата:
Что лучше, отправлять и обрабатывать сразу StrigList.Text или построчно?
Что отправлять?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.04.2015, 14:17   #3
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Что отправлять?
Я данные отправляю из приложения по строчно по пакетику,
Возможно лучше сразу больше данных отправлять и вообще сделать свою структуру, а не использовать строку?
Но Строка уже сформирована уже на стороне клиента и получится двойное преобразование да еще и запись...

Последний раз редактировалось IvaniuS; 18.04.2015 в 14:29.
IvaniuS вне форума Ответить с цитированием
Старый 18.04.2015, 14:28   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Смотря какие данные. Смотря как приемник их обрабатывает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.04.2015, 15:02   #5
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

Ну как приемник обрабатывает - я выше привел тот код который у меня есть, по сути чаще всего просто разбиваю строку на столбики и записываю.
IvaniuS вне форума Ответить с цитированием
Старый 18.04.2015, 15:09   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как приемник обрабатывает - я выше привел тот код который у меня есть
Супер... Теперь я окончательно перестал понимать что ты хочешь...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.04.2015, 15:10   #7
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

Сага о X, Y и Z...
lomastr_ вне форума Ответить с цитированием
Старый 18.04.2015, 15:16   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Сага о X, Y и Z...
Ну и к чему этот "весьма информативный" пост? Не надоело еще писать бессмысленные фразы?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.04.2015, 15:31   #9
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

а до того ваши какой вселенский смысл внесли? ноль целых фик десятых

а если не в курсе про что я так нагуглить не проблема
lomastr_ вне форума Ответить с цитированием
Старый 18.04.2015, 15:31   #10
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

хороший пост для развития "абстрактной" логики...
это вы сами себе ТЗ ставите? Для чего вообще программа? Есть нормальная постановка задачи?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактировать данные RedScreenOfLife ASP.NET 0 16.10.2012 22:07
Редактировать программу. TiP-A-ToP Помощь студентам 1 03.11.2011 20:23
Как редактировать видео? jetyb C# (си шарп) 1 12.07.2011 17:11
От редактировать таблицу Svist Microsoft Office Excel 9 30.12.2010 09:36
Как динамично быстро загрузить в компонент Stringgrid 34 символа? SkAndrew Общие вопросы Delphi 11 13.04.2008 12:42