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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2011, 14:18   #1
Хохол
Пользователь
 
Аватар для Хохол
 
Регистрация: 20.11.2009
Сообщений: 37
По умолчанию Разделение строк в StringGrid на группы

Гляньте картинку. Надо сделать то же самое с помощью нормального StringGrid.
Каким образом можно разделить строки StringGrid на логические группы, как на картинке?
Изображения
Тип файла: jpg Форма.jpg (134.2 Кб, 174 просмотров)
Accepted
Хохол вне форума Ответить с цитированием
Старый 20.03.2011, 15:16   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

ГРАФИЧЕСКОЕ выделение групп.
1раскрасить группы разным цветом.
2.добавить новые (пустые|раскрашенные|...) строки между группами
3. отдельные таблицы для каждой группы.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, StdActns, ActnList, Menus, ComCtrls, ExtCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  r: TStrings;
begin
  r:=TStringList.Create;
  r.Delimiter:='|';
  r.DelimitedText:='Îðãàíèçàöèÿ|Ëèêâèäíîñòü||||Àêòèâû';
  self.StringGrid1.Cols[0]:=r;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  case arow of
  1, 5: begin
    self.StringGrid1.Canvas.Brush.Color:=clBtnFace;
    self.StringGrid1.Canvas.FillRect(rect);
    self.StringGrid1.Canvas.TextOut(rect.Left, rect.Top,self.StringGrid1.Cells[acol, arow]);
  end;
  end;

end;

end.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.03.2011 в 16:07.
evg_m вне форума Ответить с цитированием
Старый 20.03.2011, 21:53   #3
Хохол
Пользователь
 
Аватар для Хохол
 
Регистрация: 20.11.2009
Сообщений: 37
По умолчанию

evg_m, спасибо.
В первом способе остается проблема названия группы.
В остальных - будет усложнена обработка таблицы (циклы по ней проблематично пускать будет).
Может существуют еще способы - без этих недостатков?
Ну если нет - буду использовать что-нибудь из предложенного.
Accepted
Хохол вне форума Ответить с цитированием
Старый 21.03.2011, 09:13   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
В остальных - будет усложнена обработка таблицы (циклы по ней проблематично пускать будет).
Model Модель(Данные массивы классы(объекты) переменные.)
View Представление(StringGrid)
Controller Управление

Циклы надо пускать на ВНУТРЕННИХ данных(в модели).
StringGrid ТОЛЬКО для ПОКАЗА данных ну и ВВОДА данных.
Ввел(StringGrid->массив) Посчитал(массив) Показал(массив->StringGrid).
На StringGrid можно только циклы ПРЕОБРАЗОВАНИЯ.
1.вводимых пользователем данных в о внутреннюю структуру данных
2.отображение расчетных данных
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 21.03.2011 в 09:18.
evg_m вне форума Ответить с цитированием
Старый 21.03.2011, 09:17   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Количество строк и столбцов StringGrid постоянно или будет изменяться?
Спрашиваю не из праздного любопытства, т.к. могу предложить другое решение.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.03.2011, 09:48   #6
Хохол
Пользователь
 
Аватар для Хохол
 
Регистрация: 20.11.2009
Сообщений: 37
По умолчанию

evg_m, еще раз спасибо.
Smitt&Wesson, количество строк постоянно, количество столбцов изменяется.
Accepted
Хохол вне форума Ответить с цитированием
Старый 21.03.2011, 11:51   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Так, понятно. Но у StringGrid очень много недостатков. В частности появление и исчезновение полос прокрутки. Если применять несколько SG, возникает вопрос их синзронизации.
Я бы поступил несколько иначе. Таблицу оставил "как есть", а для навигации ввёл-бы кнопки как у медиаплеера. При нажатии на кнопки "<" и ">" производилась бы запись в соответствующие Edit-ы. Мороки меньше, удобств в работе больше.
Если бы Вы писали на С++, я бы посоветовал воспользоваться разыменованием классов при работе с TEdit, тогда к ним можно было-бы обращаться не как к оддельному компоненту, а как к массиву компонентов.
Есть ли такое в Delphi не знаю.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разделение строк удовлетворяющих определенным условиям prettyfly Microsoft Office Excel 1 15.11.2010 16:52
Строки(группы букв и группы знаков), Pascal Mrs Smith Помощь студентам 1 10.12.2009 16:31
Нумерация строк в StringGrid artemavd Общие вопросы Delphi 5 21.11.2009 19:22
Запет разрыва группы строк при печати karantir Microsoft Office Excel 2 30.10.2008 18:38