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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2013, 23:50   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Stringgrid+чекбокс

возможно ли по нажатию Tbutton заполнить первый столбец Tstringgridа чекбоксом через строчку, то есть две фиксированные строки пропускаем, затем идет чекбокс, затем пусто, затем еще один чекбокс, если да, то как? и возможно ли проверить чекбоксы каких строк оказались активными?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 29.12.2013, 00:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В стринглисте чекбоксы уже есть или их туда нужно создать?
Если создать то предположим так:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids,
  StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
      aRect: TRect; aState: TGridDrawState);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

// Создадим чекбоксы и привяжем к ячейкам грида
procedure TForm1.FormCreate(Sender: TObject);
var i:integer; cb:TCheckBox;
begin
 with StringGrid1 do begin
   i:=FixedRows;
   while i<RowCount do begin
     cb:=TCheckBox.Create(StringGrid1);
     cb.Parent:=StringGrid1;
     Objects[1,i]:=cb;
     inc(i,2);
   end;
 end;
end;

// Покажем чекбоксы
procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
  aRect: TRect; aState: TGridDrawState);
begin
  with TStringGrid(sender) do begin
    if Objects[aCol,aRow] is TCheckBox then begin
      with TCheckBox(Objects[aCol,aRow]) do begin
        Top:=aRect.Top; Left:=aRect.Left;
        Show;
      end;
    end;
  end;
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.12.2013, 04:17   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

спасибо большое) только там почему-то галочка не ставится( Вот допустим в клетках, закрашенные через фотошоп фиолетовым цветом (кроме первых двух фиксированных строк) должны появиться Tcheckbox, а затем после нажатия какой-либо кнопки или другого события содержимое выделенных строк tcheckbox должно быть перенесено в файл, при этом следует учитывать то что запись выводится в две строки (первая-зеленая, вторая-желтая). Возможно ли сделать такое? Или слишком сложно все придумал? так то у меня задание проще, по клику на запись распечатать все данные о человеке) а я для усложнения придумал эти чекбоксы, чтобы можно было сразу несколько человек выбрать
from dark to light)

Последний раз редактировалось Алексей_2012; 30.12.2013 в 04:27.
Алексей_2012 вне форума Ответить с цитированием
Старый 30.12.2013, 16:13   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

ой, извиняюсь, праздник вчера был, вроде фото я не выложил, забыл)) а галочка все равно в чекбоксе не ставится
Изображения
Тип файла: jpg tstringgrid.jpg (39.3 Кб, 167 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 30.12.2013, 16:44   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Попробуй cb.Parent:=Self;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.12.2013, 17:06   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Что бы оно было на что-то похоже и скрол вертикальный нормально работал подправь чуть процедуры от Виталия
Код:
procedure TForm1.FormCreate(Sender: TObject);
var i:integer; cb:TCheckBox;
begin
 with StringGrid1 do begin
   i:=FixedRows;
   while i<RowCount do begin
     cb:=TCheckBox.Create(Self);
     cb.Parent:=Self;
     cb.Caption:=IntToStr(i);
     Objects[1,i]:=cb;
     inc(i,2);
   end;
 end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var i: Integer;
begin
  for i:=1 to StringGrid1.RowCount-1 do
    if StringGrid1.Objects[1,i] is TCheckBox then TCheckBox(StringGrid1.Objects[1,i]).Visible:=(i>=StringGrid1.TopRow) and (i<=StringGrid1.TopRow+StringGrid1.VisibleRowCount);
  with TStringGrid(sender) do begin
    if Objects[aCol,aRow] is TCheckBox then begin
      with TCheckBox(Objects[aCol,aRow]) do begin
        Top:=StringGrid1.Top+Rect.Top+4;
        Left:=StringGrid1.Left+Rect.Left+4;
        Width:=Rect.Right-Rect.Left;
        Height:=Rect.Bottom-Rect.Top;
        Show;
      end;
    end
    else Canvas.FillRect(Rect);
  end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 30.12.2013 в 17:14.
Аватар вне форума Ответить с цитированием
Старый 01.01.2014, 00:23   #7
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Спасибо большое, но чекбоксы не в тех ячейках появились(( Нужно на одну ячейку левее, а код поправил немного, чтоб на одну ячейку ниже было)
Код:
 
procedure TForm1.FormCreate(Sender: TObject);
var i:integer; cb:TCheckBox;
begin
 with StringGrid1 do begin
  i := FixedRows+1;
      while i < RowCount do begin
        cb := TCheckBox.Create(Self);
        cb.Parent := Self;
        cb.Caption := IntToStr(i);
        Objects[1, i] := cb;
        inc(i, 2);
      end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var i: Integer;
begin
for i := 1 to StringGrid1.RowCount - 1 do
        if StringGrid1.Objects[1, i] is TCheckBox then TCheckBox(StringGrid1.Objects[1, i]).Visible := (i >= StringGrid1.TopRow) and (i <= StringGrid1.TopRow + StringGrid1.VisibleRowCount);
      with TStringGrid(sender) do begin
        if Objects[aCol, aRow] is TCheckBox then begin
          with TCheckBox(Objects[aCol, aRow]) do begin
            Top := StringGrid1.Top + Rect.Top + 4;
            Left := StringGrid1.Left + Rect.Left + 4;
            Width := Rect.Right - Rect.Left;
            Height := Rect.Bottom - Rect.Top;
            Show;
          end;
        end
        else Canvas.FillRect(Rect);
end;
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 10.01.2014, 18:09   #8
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

ну есть идеи как сдвинуть чек бокс на ячейку левее, вернее все чекбоксы? а затем как организовать проверку checked? и по необходимости убрать все эти чекбоксы? покажите пару примеров, или киньте ссылку, заранее спасибо!
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 10.01.2014, 18:15   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
ну есть идеи как сдвинуть чек бокс на ячейку левее
Везде где в коде колонка 1 замените на 0
Цитата:
а затем как организовать проверку checked?
Первые две строки из StringGrid1DrawCell и есть цикл по всем. И проверять Checked
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.01.2014, 18:51   #10
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Аватар, спасибо, но я совсем запутался, чтобы все нормально заработало, ну как нормально, чекбокс не должен выводиться в фиксированных строках, нужно сначала нажать на кнопку показать, а затем на кнопку просмотр/печать, тогда все чекбоксы выведутся верно, ну как верно, почему-то фон белого цвета, а надо желтого(( в общем я совсем запутался в этой штуке и ничего не выходит(((
Вложения
Тип файла: rar ОАО Тепловые сети.rar (206.5 Кб, 14 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструкция Else if и чекбокс Phantosmagor Общие вопросы Delphi 2 27.09.2012 09:35
Добавить чекбокс в инсталлятор luminary Фриланс 2 08.02.2012 14:12
Как программно включить чекбокс??? xpams HTML и CSS 2 08.01.2012 19:18
Чекбокс soonner PHP 0 25.03.2011 17:59
чекбокс - поверх всех окон puz Компоненты Delphi 6 11.05.2007 17:58