Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компонент в компоненте и обращение к ним, Смешанные компоненты 
:(
    Опции темы
Desperate
Дата 25.12.2006, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть компонент StringGrid, мне необходимо в первом столбце в каждой строке пририсовать CheckBox. И потом как определять какие CheckBox'ы выбраны а какие нет, например для копирования определенных строк!
PM MAIL   Вверх
aktuba
Дата 25.12.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

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



Используй Tag.


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Snowy
Дата 25.12.2006, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Может лучше использовать ListView?
PM MAIL   Вверх
Desperate
Дата 25.12.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нет! Мне нужно именно StringGrid! 

Нашел код как пририсовывать к StringGrid CheckBox:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    StringGrid1: TStringGrid;
    CheckBox1: TCheckBox;
    procedure CheckBox1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure AddCheckBoxes;
    Procedure clean_previus_buffer;
    Procedure set_checkbox_alignment;
    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.set_checkbox_alignment;
var
 NewCheckBox: TCheckBox;
 Rect: TRect;
 i: Integer;
begin
 for i := 1 to StringGrid1.RowCount do
 begin
 NewCheckBox := (StringGrid1.Objects[4,i] as TCheckBox);
 if NewCheckBox <> nil then
 begin
 Rect := StringGrid1.CellRect(4,i); // получаем размер ячейки для чекбокса
 NewCheckBox.Left := StringGrid1.Left + Rect.Left+2;
 NewCheckBox.Top := StringGrid1.Top + Rect.Top+2;
 NewCheckBox.Width := Rect.Right - Rect.Left;
 NewCheckBox.Height := Rect.Bottom - Rect.Top;
 NewCheckBox.Visible := True;
end;
 end;
end;
Procedure TForm1.clean_previus_buffer;
var
 NewCheckBox: TCheckBox;
  i: Integer;
begin
 for i := 1 to StringGrid1.RowCount do
 begin
 NewCheckBox := (StringGrid1.Objects[4,i] as TCheckBox);
 if NewCheckBox <> nil then
 begin
 NewCheckBox.Visible := false;
 StringGrid1.Objects[4,i] := nil;
 end;
 end;
end;

 procedure TForm1.AddCheckBoxes;
var
 i: Integer;
  NewCheckBox: TCheckBox;
begin
 clean_previus_buffer; // очищаем неиспользуемые чекбоксы...
for i := 1 to stringgrid1.RowCount  do
 begin
 StringGrid1.Cells[0,i] := 'a';
 StringGrid1.Cells[1,i] := 'b';
 StringGrid1.Cells[2,i] := 'c';
 StringGrid1.Cells[3,i] := 'd';
 NewCheckBox := TCheckBox.Create(Application);
 NewCheckBox.Width := 0;
 NewCheckBox.Visible := false;
 NewCheckBox.Caption := 'OK';
 NewCheckBox.Color := clWindow;
 NewCheckBox.Tag := i;
 NewCheckBox.OnClick := CheckBox1.OnClick; //Связываем предыдущее событие OnClick
                                          // с существующим TCheckBox
 NewCheckBox.Parent := Panel1;
 StringGrid1.Objects[4,i] := NewCheckBox;
 StringGrid1.RowCount := i;
 end;
 set_checkbox_alignment; // расположение чекбоксов в ячейках таблицы...
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 ShowMessage('There it is!!');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 StringGrid1.Cells[0,0] := 'A Simple';  
 StringGrid1.Cells[1,0] := 'Way';
 StringGrid1.Cells[2,0] := 'To';
 StringGrid1.Cells[3,0] := 'Do It';
 StringGrid1.Cells[4,0] := 'Check !!';
 AddCheckBoxes; // добавляем чекбоксы...
 

end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
  if not (gdFixed in State) then set_checkbox_alignment;


end; 

end.



А вот как теперь проверить какие выбраны а какие нет, через тэг что-то не пойму как!
Можно код небольшой, чтоб допустим в ListBox выводил только выбранные строки?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

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


 




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


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

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