IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> компонент для вывода таблицы
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


доброго дня
имеются две колонки в Excel. Необходимо вывести куда нибудь на форму две таблицы. Прикрепленное изображение Значение ячейки "111" в первой таблице нужно оформить в виде выпадающего списка, значения для которого берутся из первой колонки в Excel. Аналогично для "222", только значения берутся из второй колонки. Все остальные ячейки вычисляются по формулам, в зависимости от значений ячеек "111" и "222". Вопрос: какой тут компонент использовать, чтобы можно было так выводить на форму?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


У меня не происходит выделения другой ячейки, вот в чем проблема. Закрывается комбобокс и фокус остается на ячейке, в которую было внесено значение. А я ведь скопировал в точности твой код. Может, от версии Дельфи зависит (в более новой чего-нибудь поправили, например)? У меня XE2, могу чуть позже на 2009-ой проверить.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(IUnknown @ 14.11.2012 22:07) *

У меня не происходит выделения другой ячейки, вот в чем проблема. Закрывается комбобокс и фокус остается на ячейке, в которую было внесено значение. А я ведь скопировал в точности твой код. Может, от версии Дельфи зависит (в более новой чего-нибудь поправили, например)? У меня XE2, могу чуть позже на 2009-ой проверить.

странное поведение. У меня Delphi 7. Может скинуть папку с файлами проекта?

Добавлено через 4 мин.
хотя, может и кода хватит

var
Form1: TForm1;
E,Sheet, E2,Sheet2:variant;
iRow, iClm, iRow2, iClm2: integer;

implementation

{$R *.dfm}

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
var R : TRect;
begin
if (ACol = 1) and (ARow <> 0) then
begin
R := StringGrid1.CellRect(ACol, ARow);
OffsetRect(R, StringGrid1.Left, StringGrid1.Top);
ComboBox1.Left := R.Left + 1;
ComboBox1.Top := R.Top + 1;
ComboBox1.Width := (R.Right + 1) - R.Left;
ComboBox1.Height := (R.Bottom + 1) - R.Top;
{Показываем combobox}
ComboBox1.Visible := True;
ComboBox1.SetFocus;
ComboBox1.DroppedDown := true; // <---
end;
CanSelect := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i : integer;
begin
{Высоту у combobox не получится установить, поэтому мы будем}
{подгонять размер у грида под размер combobox!}
StringGrid1.DefaultRowHeight := ComboBox1.Height;
StringGrid2.DefaultRowHeight := ComboBox2.Height;
{Скрываем combobox}
ComboBox1.Visible := False;
ComboBox1.Style := csDropDownList;
ComboBox2.Visible := False;
ComboBox2.Style := csDropDownList;
StringGrid1.ColWidths[0]:=40;
StringGrid1.ColWidths[1]:=300;
StringGrid1.ColWidths[2]:=110;
StringGrid1.ColWidths[3]:=110;
StringGrid1.ColWidths[4]:=110;
StringGrid2.ColWidths[0]:=40;
StringGrid2.ColWidths[1]:=300;
StringGrid2.ColWidths[2]:=60;
StringGrid2.ColWidths[3]:=120;
StringGrid2.ColWidths[4]:=140;
StringGrid2.ColWidths[5]:=140;
StringGrid2.ColWidths[6]:=140;
StringGrid3.ColWidths[0]:=40;
StringGrid3.ColWidths[1]:=300;
StringGrid3.ColWidths[2]:=110;
StringGrid3.ColWidths[3]:=110;
StringGrid3.ColWidths[4]:=110;
E:=CreateOleObject('Excel.Application');
E.WorkBooks.Open('C:\\1.xlsx');
E.WorkBooks.item [1].Activate;
Sheet:=E.WorkBooks.item [1].Sheets.item[1];
E2:=CreateOleObject('Excel.Application');
E2.WorkBooks.Open('C:\\2.xlsx');
E2.WorkBooks.item [1].Activate;
Sheet2:=E2.WorkBooks.item [1].Sheets.item[1];
iRow := Sheet.UsedRange.Row + Sheet.UsedRange.Rows.Count - 1; //последняя заполненая строка
iClm := Sheet.UsedRange.Column + Sheet.UsedRange.Columns.Count - 1; //последний заполненый столбец
iRow2 := Sheet2.UsedRange.Row + Sheet2.UsedRange.Rows.Count - 1; //последняя заполненая строка
iClm2 := Sheet2.UsedRange.Column + Sheet2.UsedRange.Columns.Count - 1; //последний заполненый столбец
ComboBox1.DropDownCount:=iRow;
for i:=1 to iRow do
ComboBox1.Items.Add(Sheet.Cells[i,1].Text);
ComboBox2.DropDownCount:=iRow2;
for i:=1 to iRow2 do
ComboBox2.Items.Add(Sheet2.Cells[i,1].Text);
end;


procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
{Получаем выбранный элемент из ComboBox и помещаем его в грид}
if ComboBox1.ItemIndex<>-1 then begin
StringGrid1.Cells[StringGrid1.Col,
StringGrid1.Row] :=
ComboBox1.Items[ComboBox1.ItemIndex];
StringGrid1.Cells[StringGrid1.Col+1, StringGrid1.Row]:=Sheet.Cells[ComboBox1.ItemIndex+1,2].Text;
StringGrid1.RowCount:=StringGrid1.RowCount+1;
end;
ComboBox1.Visible := False;
StringGrid1.SetFocus;
ComboBox1.ItemIndex:=-1;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
E.Workbooks[1].Close;
E:=Unassigned;
E2.Workbooks[1].Close;
E2:=Unassigned;
end;

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
i,j: integer;
begin
if Key=vk_delete then begin
StringGrid1.Rows[StringGrid1.Row].Clear;
for i:=StringGrid1.Row to StringGrid1.RowCount-1 do begin
for j:=0 to StringGrid1.ColCount do begin
StringGrid1.Cells[j,i]:=StringGrid1.Cells[j,i+1]
end;
end;
if StringGrid1.RowCount>2 then StringGrid1.RowCount:=StringGrid1.RowCount-1;
end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
{Получаем выбранный элемент из ComboBox и помещаем его в грид}
if ComboBox1.ItemIndex<>-1 then begin
StringGrid1.Cells[StringGrid1.Col,
StringGrid1.Row] :=
ComboBox1.Items[ComboBox1.ItemIndex];
StringGrid1.Cells[StringGrid1.Col+1, StringGrid1.Row]:=Sheet.Cells[ComboBox1.ItemIndex+1,2].Text;
end;
ComboBox1.Visible := False;
StringGrid1.SetFocus;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
{Получаем выбранный элемент из ComboBox и помещаем его в грид}
if ComboBox2.ItemIndex<>-1 then begin
StringGrid2.Cells[StringGrid2.Col,
StringGrid2.Row] :=
ComboBox2.Items[ComboBox2.ItemIndex];
StringGrid2.Cells[StringGrid2.Col+2, StringGrid2.Row]:=Sheet2.Cells[ComboBox2.ItemIndex+1,2].Text;
end;
ComboBox1.Visible := False;
StringGrid1.SetFocus;
end;

procedure TForm1.ComboBox2Exit(Sender: TObject);
begin
{Получаем выбранный элемент из ComboBox и помещаем его в грид}
if ComboBox2.ItemIndex<>-1 then begin
StringGrid2.Cells[StringGrid2.Col,
StringGrid2.Row] :=
ComboBox2.Items[ComboBox2.ItemIndex];
StringGrid2.Cells[StringGrid2.Col+2, StringGrid2.Row]:=Sheet2.Cells[ComboBox2.ItemIndex+1,2].Text;
StringGrid2.RowCount:=StringGrid2.RowCount+1;
end;
ComboBox2.Visible := False;
StringGrid2.SetFocus;
ComboBox2.ItemIndex:=-1;
end;

procedure TForm1.StringGrid2SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
var R : TRect;
begin
if (ACol = 1) and (ARow <> 0) then
begin
R := StringGrid2.CellRect(ACol, ARow);
OffsetRect(R, StringGrid2.Left, StringGrid2.Top);
ComboBox2.Left := R.Left + 1;
ComboBox2.Top := R.Top + 1;
ComboBox2.Width := (R.Right + 1) - R.Left;
ComboBox2.Height := (R.Bottom + 1) - R.Top;
{Показываем combobox}
ComboBox2.Visible := True;
ComboBox2.SetFocus;
ComboBox2.DroppedDown := true; // <---
end;
CanSelect := True;

end;

procedure TForm1.StringGrid2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
i,j: integer;
begin
if Key=vk_delete then begin
StringGrid2.Rows[StringGrid2.Row].Clear;
for i:=StringGrid2.Row to StringGrid2.RowCount-1 do begin
for j:=0 to StringGrid2.ColCount do begin
StringGrid2.Cells[j,i]:=StringGrid2.Cells[j,i+1];
end;
end;
if StringGrid2.RowCount>2 then StringGrid2.RowCount:=StringGrid2.RowCount-1;
end;
end;

end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
marwell   компонент для вывода таблицы   13.11.2012 23:50
IUnknown   Да хоть StringGrid. Что, нельзя в его ячейку затол…   14.11.2012 0:33
marwell   Да хоть StringGrid. Что, нельзя в его ячейку зато…   14.11.2012 0:34
marwell   хм, видимо что то делаю не так. Не добавляются стр…   14.11.2012 1:26
marwell   хм, строки появляются, но каким то странным образо…   14.11.2012 19:42
IUnknown   Не понял, что у тебя не так работает? Тебе что, н…   14.11.2012 20:14
marwell   спасибо, сработало а можно еще вопрос: событие OnC…   14.11.2012 21:07
marwell   чтож за беда такая с этой таблицей :( хочу встави…   14.11.2012 21:34
marwell   эхэх, чет совсем засиделся E.Workbooks[1].Close; з…   14.11.2012 22:01
IUnknown   И у меня тоже вопрос: а кто вообще изначально гово…   14.11.2012 23:12
marwell   И у меня тоже вопрос: а кто вообще изначально гов…   15.11.2012 0:00
IUnknown   Ну, если про этот же - то чего размазывать по разн…   15.11.2012 0:21
marwell   после выбора строки в ComboBox, выбранная строка в…   15.11.2012 0:33
marwell   думал может в конце события OnExit у ComboBox запо…   15.11.2012 1:02
need to buy prednisone without a   construction sp cialis s   12.11.2021 21:22
IUnknown   Не воспроизводится. Может, ты еще что-нибудь добав…   15.11.2012 1:16
marwell   Не воспроизводится. Может, ты еще что-нибудь доба…   15.11.2012 1:35
IUnknown   У меня не происходит выделения другой ячейки, вот …   15.11.2012 2:07
marwell   У меня не происходит выделения другой ячейки, вот…   15.11.2012 15:50
IUnknown   Да, с этим кодом глючит. Попробую посмотреть, что …   15.11.2012 17:55
marwell   Да, с этим кодом глючит. Попробую посмотреть, что…   15.11.2012 18:12
IUnknown   С событиями все нормально. Просто достаточно было …   15.11.2012 19:02
marwell   спасибо! насчет кода, ты прав, там очень много…   15.11.2012 19:36
marwell   пришлось опять поднять эту тему) у комбобоксов не …   4.12.2012 19:47
marwell   и вопрос номер 2: необходимо, чтобы при ручном изм…   5.12.2012 0:26
IUnknown   А где ты, интересно, ставишь DropDownCount? Неужел…   6.12.2012 5:49
marwell   А где ты, интересно, ставишь DropDownCount? Неуже…   6.12.2012 15:28
marwell   попробовал сделать так, как предложил Serge_Blizny…   6.12.2012 16:40
IUnknown   К сожалению, тот форум сбоит, но он тебе советовал…   6.12.2012 21:01
marwell   К сожалению, тот форум сбоит, но он тебе советова…   6.12.2012 21:09
Гость   спасибо :) я это приписал так, только чтоб увиде…   14.03.2014 3:17
marwell   доброго времени суток, форумчане вот уж никак не д…   30.01.2013 18:03
marwell   ответили на другом форуме надо было в качестве par…   1.02.2013 16:45
nishaknapp   Why not settling on games that is fun and at the s…   16.01.2023 6:41


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 3:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name