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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2013, 15:43   #1
Руслан240892
Новичок
Джуниор
 
Регистрация: 28.02.2012
Сообщений: 4
Вопрос StringGrid, ComboBox

всем добрый день ( Ех, если бы((( )
Помогите, пожалуйста!!
1) мне надо чтоб в одной ячейке StringGrid-a помещались несколько выбранных Комбоксов
2) и при каждом нажатии на батон Ок добавлялись новые заявки..тут думаю массив нужен, но а я пока еще не силен в них
Буду признателен за помощь!!!


Вот примерно так

procedure TForm5.Button1Click(Sender: TObject);
var
f1:string;
begin
F1:=datetostr(DateTimePicker1.Date) ;
StringGrid1.Cells[0, 1] :=F1;
StringGrid1.Cells[1, 1] :=maskedit1.Text;
StringGrid1.Cells[2, 1] :=ComboBox1.Items[ComboBox1.ItemIndex];
StringGrid1.Cells[3, 1] :=ComboBox8.Items[ComboBox8.ItemIndex];
StringGrid1.Cells[4, 1] :=ComboBox2.Items[ComboBox2.ItemIndex];
StringGrid1.Cells[5, 1] :=ComboBox9.Items[ComboBox9.ItemIndex];
StringGrid1.Cells[6, 1] :=ComboBox10.Items[ComboBox10.ItemIndex];
StringGrid1.Cells[7, 1] :=Edit2.Text;

Все работает!
1)Но вот только надо чтоб несколько комбоксов поместились в одной ячейке!
2)А при каждом нажатии на ОК новые заявки попадали в стринггрид

Последний раз редактировалось Руслан240892; 27.06.2013 в 08:10.
Руслан240892 вне форума Ответить с цитированием
Старый 26.06.2013, 16:09   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

нечего кросспостить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.06.2013, 18:11   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
надо чтоб в одной ячейке StringGrid-a помещались несколько выбранных Чекбоксов.
Для этого нужно либо в OnDrawCell отрисовывать эти чекбоксы, либо использовать какие нить навороченные компоненты типа RX или NextGrid.
Ну мона собсно и свою прогу написать для этого.
Выглядеть это может так:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

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

type

  { TForm1 }

  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var   cbs:TComponentList;
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var i:integer; cb:TCheckBox;
begin
 cbs:=TComponentList.create;
 for i:=1 to 10 do begin
  cb:=TCheckBox.Create(self);
  cb.Parent:=self;
  cb.Caption:=IntToStr(i);
  cb.Height:=12;
  cbs.Add(cb);
 end;
 StringGrid1.ColCount:=1;
 StringGrid1.RowCount:=5;
 StringGrid1.DefaultRowHeight:=50;
end;

procedure TForm1.FormPaint(Sender: TObject);
var j,i:integer; aRect: TRect;
begin
 i:=0; j:=0;
 while i<4 do begin
  arect:=StringGrid1.CellRect(0,i);
  with TCheckBox(cbs[j]) do begin
   Top:=aRect.Top+StringGrid1.Top;
   Left:=aRect.Left+StringGrid1.Left;
   Width:=aRect.Right-aRect.Left;
  end; inc(j);
  arect:=StringGrid1.CellRect(0,i);
  with TCheckBox(cbs[j]) do begin
   Top:=aRect.Top+Height+StringGrid1.Top;
   Left:=aRect.Left+StringGrid1.Left;
   Width:=aRect.Right-aRect.Left;
  end; inc(j);
  inc(i) ;
 end;
end;


end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.06.2013, 07:36   #4
Руслан240892
Новичок
Джуниор
 
Регистрация: 28.02.2012
Сообщений: 4
Печаль

Спасибо за помощь!
Но я оказывается перепутал себя и Вас со своим вопросом!(((
Вот каким должен был быть вопрос:

1) мне надо чтоб в одной ячейке StringGrid-a помещались несколько выбранных Комбоксов
2) и при каждом нажатии на батон Ок добавлялись новые заявки..тут думаю массив нужен, но а я пока еще не силен в них
Буду признателен за помощь!!!


Вот примерно так
Код:
procedure TForm5.Button1Click(Sender: TObject);
var
f1:string;
begin
F1:=datetostr(DateTimePicker1.Date) ;
StringGrid1.Cells[0, 1] :=F1;
StringGrid1.Cells[1, 1] :=maskedit1.Text;
StringGrid1.Cells[2, 1] :=ComboBox1.Items[ComboBox1.ItemIndex];
StringGrid1.Cells[3, 1] :=ComboBox8.Items[ComboBox8.ItemIndex];
StringGrid1.Cells[4, 1] :=ComboBox2.Items[ComboBox2.ItemIndex];
StringGrid1.Cells[5, 1] :=ComboBox9.Items[ComboBox9.ItemIndex];
StringGrid1.Cells[6, 1] :=ComboBox10.Items[ComboBox10.ItemIndex];
StringGrid1.Cells[7, 1] :=Edit2.Text;
Все работает!
1)Но вот только надо чтоб несколько комбоксов поместились в одной ячейке!
2)А при каждом нажатии на ОК новые заявки попадали в стринггрид

Помогите, пожалуйста!!

Последний раз редактировалось Stilet; 27.06.2013 в 16:56.
Руслан240892 вне форума Ответить с цитированием
Старый 27.06.2013, 16:51   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
1)Но вот только надо чтоб несколько комбоксов поместились в одной ячейке!
не совсем понял, что Вы подразумеваете под этим...

так, что ли (всё валим в одну ячейку)?
Код:
var CurRow : integer;
begin
  StringGrid1.RowCount :=  StringGrid1.RowCount + 1;
  CurRow := StringGrid1.RowCount - 1;

  StringGrid1.Cells[0, CurRow] := datetostr(DateTimePicker1.Date) ;
  StringGrid1.Cells[1, CurRow] :=maskedit1.Text;
  StringGrid1.Cells[2, CurRow] :=ComboBox1.Items[ComboBox1.ItemIndex] + ' ' +;
        ComboBox8.Items[ComboBox8.ItemIndex] + ' ' +
        ComboBox2.Items[ComboBox2.ItemIndex];
  StringGrid1.Cells[3, CurRow] :=ComboBox9.Items[ComboBox9.ItemIndex] + ' ' + 
         ComboBox10.Items[ComboBox10.ItemIndex];
  StringGrid1.Cells[4, CurRow] :=Edit2.Text;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.06.2013, 16:59   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
чтоб несколько комбоксов поместились в одной ячейке!
вопрос в лоб - а зачем ты стринггрид для этого выбрал?
Может лучше использовать Frame, в котором можно нарисовать компонентами карточку, и по мере добавления записей создавать новые фреймы типа этой карточки с выравниванием alTop?
Это будет похоже на грид, но без мороки с стринггридом.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.06.2013, 17:09   #7
Руслан240892
Новичок
Джуниор
 
Регистрация: 28.02.2012
Сообщений: 4
По умолчанию

да, да точно!

StringGrid1.Cells[2, CurRow] :=ComboBox1.Items[ComboBox1.ItemIndex] + ' ' +; (только здесь это лишнее по-моему)
ComboBox8.Items[ComboBox8.ItemIndex] + ' ' +
ComboBox2.Items[ComboBox2.ItemIndex];
спасибо!!! Теперь понял! а можно же туда ввести не просто пробелы а через отступ?! #13 типа этого?)

Цитата:
Сообщение от Stilet Посмотреть сообщение
вопрос в лоб - а зачем ты стринггрид для этого выбрал?
Может лучше использовать Frame, в котором можно нарисовать компонентами карточку, и по мере добавления записей создавать новые фреймы типа этой карточки с выравниванием alTop?
Это будет похоже на грид, но без мороки с стринггридом.
Я просто со стринггрида в Excel сохраняю! а так, как вы говорите, я не знаю(((

Согласен "Чайник"!!!

Вот как все у меня выглядит
Изображения
Тип файла: jpg 12.JPG (58.3 Кб, 126 просмотров)

Последний раз редактировалось Stilet; 27.06.2013 в 17:24.
Руслан240892 вне форума Ответить с цитированием
Старый 27.06.2013, 17:26   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Согласен "Чайник"
Причем тут чайник или кофейник?
Ты просто повникай в то как работать с панелями и фреймами. Примеры посмотри.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.06.2013, 17:29   #9
Руслан240892
Новичок
Джуниор
 
Регистрация: 28.02.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Причем тут чайник или кофейник?
Ты просто повникай в то как работать с панелями и фреймами. Примеры посмотри.
Хорошо! Объязательно!!!
Руслан240892 вне форума Ответить с цитированием
Старый 06.07.2013, 15:44   #10
fastergus2dog
 
Регистрация: 06.07.2013
Сообщений: 2
По умолчанию

СтринГрид должен иметь функцию добавления данных, но вот чтобы добавить два ComboBox то это надо написать определенный алгорытм.
fastergus2dog вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CheckBox и ComboBox в StringGrid ZeitGeist7 Общие вопросы Delphi 16 22.04.2012 20:22
Checkbox & Stringgrid z-wer Компоненты Delphi 3 25.05.2011 10:13
CheckBox в ячейку StringGrid mutabor Общие вопросы Delphi 0 23.08.2010 10:54
Checkbox и StringGrid ttjke Помощь студентам 2 28.04.2010 18:08