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

> ВНИМАНИЕ!

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> компонент для вывода таблицы
сообщение
Сообщение #21


Гуру
*****

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

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


С событиями все нормально. Просто достаточно было включить опцию goEditing у гридов, чтобы всё заработало как нужно. Но твой код прямо образец того, как не надо делать. Я не удержался и чуть-чуть его сократил (на самом деле, от него может остаться половина того, что есть сейчас). Смотри:

Сокращённый вариант (Показать/Скрыть)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Бывалый
***

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

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


спасибо!
насчет кода, ты прав, там очень много чего можно упростить, укоротить, да и улучшить. К сожалению, мне такое пока не дается, код выходит громоздкий, не оптимизированный. Пытаюсь работать над этим
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Бывалый
***

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

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


пришлось опять поднять эту тему)
у комбобоксов не работает колесо прокрутки, если количество строк довольно большое
и, что интересно, DropDownCount ставлю например 20, а комбобокс все равно раскрывает список на максимум (на сколько позволяет экран вообще), и без колеса прокрутки никак не доступны элементы, "не влезшие" туда blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Бывалый
***

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

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


и вопрос номер 2:
необходимо, чтобы при ручном изменении значения одной из двух, или же обеих ячеек, пересчиталось значение другой ячейки
делаю так: при начале редактирования ячейки запоминаю координаты и старое значение, потом при получении фокуса ввода другой ячейкой пересчитываю новое значение

procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol,
ARow: Integer; var Value: String);
begin
EditCol:=ACol;
EditRow:=ARow;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
var price, procent: real;
begin
if StringGrid1.Cells[EditCol, EditRow]<>'' then begin
price:=StrToFloat(StringGrid1.Cells[1, EditRow]);
procent:=StrToFloat(StringGrid1.Cells[2, EditRow]);
StringGrid1.Cells[3,EditRow]:=FloatToStr(price+price*procent/100);
end;
end;


procedure TForm1.StringGrid1Exit(Sender: TObject);
var price, procent: real;
begin
if StringGrid1.Cells[EditCol, EditRow]<>'' then begin
price:=StrToFloat(StringGrid1.Cells[1, EditRow]);
procent:=StrToFloat(StringGrid1.Cells[2, EditRow]);
StringGrid1.Cells[3,EditRow]:=FloatToStr(price+price*procent/100);
end;
end;

но что то делаю неправильно...

Сообщение отредактировано: marwell -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Гуру
*****

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

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


Цитата
и, что интересно, DropDownCount ставлю например 20, а комбобокс все равно раскрывает список на максимум
А где ты, интересно, ставишь DropDownCount? Неужели через свойства Object Inspector-а? Оно ж у тебя выставляется в коде, 74 и 77 строкой (в коде из поста №18), а у меня в 21-ом посте - строкой №101. Если заменяю у себя 101 строку на

cbx.DropDownCount := 10; // Rows;
, то показывает ровно 10 строк с прокруткой...

Цитата
но что то делаю неправильно...
Угу. А ничего, что у тебя на OnSelectCell навешено другое событие, которое показывает комбобокс в ячейке? Ты его куда дел? А в моем коде StringGrid1SelectCell вообще не будет вызываться, поскольку обработка выбора переназначена другому событию... В общем, ты лучше тестовый проект выложи, а то ты там постоянно что-то меняешь, а потом вопросы задаешь, ничего не объясняя. Тут каждый символ важен, не то что куски кода в сотни строк...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Бывалый
***

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

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


Цитата(IUnknown @ 6.12.2012 1:49) *

А где ты, интересно, ставишь DropDownCount? Неужели через свойства Object Inspector-а? Оно ж у тебя выставляется в коде, 74 и 77 строкой (в коде из поста №18), а у меня в 21-ом посте - строкой №101. Если заменяю у себя 101 строку на

cbx.DropDownCount := 10; // Rows;
, то показывает ровно 10 строк с прокруткой...

Угу. А ничего, что у тебя на OnSelectCell навешено другое событие, которое показывает комбобокс в ячейке? Ты его куда дел? А в моем коде StringGrid1SelectCell вообще не будет вызываться, поскольку обработка выбора переназначена другому событию... В общем, ты лучше тестовый проект выложи, а то ты там постоянно что-то меняешь, а потом вопросы задаешь, ничего не объясняя. Тут каждый символ важен, не то что куски кода в сотни строк...

даже не знаю, как я мог упустить этот момент sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Бывалый
***

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

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


попробовал сделать так, как предложил Serge_Bliznykov вот тут , но ничего не вышло
архив прикрепляюПрикрепленный файл  test.rar ( 222.47 килобайт ) Кол-во скачиваний: 234
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Гуру
*****

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

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


К сожалению, тот форум сбоит, но он тебе советовал не OnGetEditText, а OnSetEditText, насколько я успел увидеть...

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: string);
begin
Calculate(ACol, ARow);
end;
прекрасно пересчитывает данные. Только убери этот дурацкий ShowMessage('Calculate'), он всё портит...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #29


Бывалый
***

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

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


Цитата(IUnknown @ 6.12.2012 17:01) *

К сожалению, тот форум сбоит, но он тебе советовал не OnGetEditText, а OnSetEditText, насколько я успел увидеть...

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: string);
begin
Calculate(ACol, ARow);
end;
прекрасно пересчитывает данные. Только убери этот дурацкий ShowMessage('Calculate'), он всё портит...

спасибо smile.gif
Цитата
Только убери этот дурацкий ShowMessage('Calculate'), он всё портит...
я это приписал так, только чтоб увидеть заходит ли туда вообще ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #30


Бывалый
***

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

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


доброго времени суток, форумчане
вот уж никак не думал что придется продолжить эту тему...
но у самого реализовать "это" не получается sad.gif
в общем, есть две таблицы stringgrid, для вывода данных из excel в ячейки этих grid'ов помещены combobox'ы. При щелчке по строке grid'a раскрывается список и после выбора вставляется содержимое. Мне необходимо несколько изменить этот процесс - надо чтобы на строчке grida при наведении мышки появлялась кнопка, при нажатии на которую раскрывался бы список, а если щелкать просто по строчке, то можно вручную вписывать значения. Пытаюсь использовать StringGridMouseMove, при наведении мышки кнопка действительно перемещается, но ее почему то не видно, как будто она оказывается за таблицей. Прилагаю Прикрепленный файл  123.rar ( 248.3 килобайт ) Кол-во скачиваний: 201
архив с исходниками, буду признателен за совет
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #31


Бывалый
***

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

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


ответили на другом форуме
надо было в качестве parent у speedbutton указывать не форму, а grid
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #32


Гость






Цитата(marwell @ 6.12.2012 17:09) *

спасибо smile.gif
я это приписал так, только чтоб увидеть заходит ли туда вообще ...

Че такое Calculate?
 К началу страницы 
+ Ответить 

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

 




- Текстовая версия 19.02.2018 0:59
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"