|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помощь с ListView, распределение данных по ячейкам
Народ, в Delphi я новичок, опыта нет в написании программ, учусь чисто по ходу написания нужной мне программы. Столкнулся с проблемой. Необходимо написать программу, что бы при введении чисел в поля Edit и проведении над ними математических операций, по нажатию на одну, кнопку нужные данные распределялись по ячейкам в ListView. Пытался в интернете найти способ создания таблиц в Delphi или чего-то в этом роде, и наткнулся, что можно сделать это при помощи ListView. Как оперировать математическими операциями - я знаю. Проблема в следующем, как полученный результат внести в нужные ячейки? Что нужно писать в коде? Какая функция? Можете на примере разъяснить? Читал всякую инфр, справочники, кулибничал с кодом, но того, что надо - не получается. Устал уже искать-читать, решил у спецов совета спросить.
Вот пример: http://i63.fastpic.ru/big/2015/0212/...36e42ce73.jpeg - пример по ссылке Дано - Edit 1-9, кнопка Button и ListView с ячейками 1-3. Необходимо, что бы при нажатии на кнопку, поля 1,2 и 3 складывались, поля 4,5 и 6 переумножались и поля 7,8 и 9 вычитались, а результаты записывались в нужные ячейки. Как такое можно организовать? Заранее спасибо. Сторонний вопрос, можно ли будет потом произвести печать через принтер из ListView, ну или на крайняк сохранить в текстовый файл? Такое возможно? |
#2
|
||||
|
||||
Нужно выставить у ListView свойство ViewStyle как vsReport и добавить 3 колонки
Код:
... with ListView1.Items.Add do begin Caption:= IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text) + StrToInt(Edit3.Text)); SubItems.Add(IntToStr(StrToInt(Edit4.Text) * StrToInt(Edit5.Text) * StrToInt(Edit6.Text))); SubItems.Add(IntToStr(StrToInt(Edit7.Text) - StrToInt(Edit8.Text) - StrToInt(Edit9.Text))); end; ... Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Faust-14 (15.02.2015)
|
#3
|
|||
|
|||
Сторонний ответ.
1. Можно просто вывести на печать всю форму как графический объект. 2. можно отрисовать Listview на TBitmap и уже потом печатать этот битмап (как вариант, можно сразу отрисовывать на канве принтера) 3. Можно просто взять информацию из ListView и как текст ее напечатать на принтере (ну и в файл сохранить). 4. Можно взять любой репортер (QuickReport, FastReport, сомневаюсь, что здесь потребуется что-то более мощное) и, немного пошаманив, сделать красивый отчет. 5. Можно придумать еще кучу разных способов, типа экспорта в Word/Excel и печати оттуда. Короче, все зависит от конкретной задачи и хотелок. |
#4
|
|||
|
|||
Почему выбран ListVeiw, а не DrawGrid/StringGrid?
|
#5
|
|||
|
|||
Спасибо за ответы) Смог двигаться далее...)
Цитата:
Есть проблемка в одном моменте... Все поперассмотрел, может запутался и ошибся где-то, но ошибку не нашел. В третью колонку, в процессе проверки, загружаю вычесление с названием переменной ZDSh1. Должна происходить математическая операция, но вместо этого, почему-то выдает ноль. Проект прилагается. Заранее спасибо. |
#6
|
||||
|
||||
Да нет, вроде меняются данные, просто всегда выполняется равенство DL=DR, вы в едитах 2 и 4 цифирки попробуйте поменять немного
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#7
|
|||
|
|||
Все, спасибо, разобрался) Просто запутался в таком объеме переменных)
Есть еще вопросик... Вот код: Код:
if DL=DR then begin ZDSh:=K+D+KU+KD+F; end else begin ZDSh1:=K+D1+KU+KD+F; ZDSh2:=K+D2+KU+KD+F; ZDSh:=???(ZDSH1+'текст\n'+ZDSh2+'текст'); // В этом месте выдает ошибку (!) запутался, не знаю, что вставить end; end; // Вывод расчетных данных в таблицу with ListView1.Items.Add do begin Caption:=String('#'); SubItems.Add(String(ID)); SubItems.Add(IntToStr(ZDSh)); ZDSh=ZDSH1+'тут свой текст\n'+ZDSh2+'тут еще один текст' Спасибо заранее) P.S. Есть ли какая литература или информационный материал где на пальцах о переменных и строках всяких будет рассказано, с примерами. А то читаю порой мануалы всякие и кое где вникаю, где то не понятно. |
#8
|
|||
|
|||
В общем, наконец-то, разобраося с переменными) Усвоил что к чему. Проблемка возникла в следующем...
К примеру вот этот код, для вывода данных в ListView: Код:
... with ListView1.Items.Add do begin Caption:= IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text) + StrToInt(Edit3.Text)); SubItems.Add(IntToStr(StrToInt(Edit4.Text) * StrToInt(Edit5.Text) * StrToInt(Edit6.Text))); SubItems.Add(IntToStr(StrToInt(Edit7.Text) - StrToInt(Edit8.Text) - StrToInt(Edit9.Text))); end; ... Пробовал, кулибничал, не могу сделать так, что бы вывод был в две строки. Искал в нете информацию, тоже все в пустую. Как сделать так, что бы за одно нажатие кнопки, выводились данные в две строки? Последний раз редактировалось Faust-14, 23.02.2015 в 17:04. |
#9
|
|||
|
|||
Что значит "в 2 строки"?
Что бы данные отрисовывались в одной ячейке в 2 строки? Тогда надо перекрывать отрисовку и делать ее самому. Что бы добалялись 2 строки? Дык вызов ListView1.Items.Add как раз и добавляет новую строку. Далее код просто через with работает с неявной переменной. Вот совершенно аналогичный код, просто с явным присваиванием временной переменной: Код:
var Item : TListItem; begin Item := ListView1.Items.Add; Item.Caption:= IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text) + StrToInt(Edit3.Text)); Item.SubItems.Add(IntToStr(StrToInt(Edit4.Text) * StrToInt(Edit5.Text) * StrToInt(Edit6.Text))); Item.SubItems.Add(IntToStr(StrToInt(Edit7.Text) - StrToInt(Edit8.Text) - StrToInt(Edit9.Text))); end; |
#10
|
||||
|
||||
Да не, lmikle, думаю что ты так только усложняешь объяску, проще посоветовать ТСу повторить блок with, кстати, обычно такое делается в цикле и можно сколько угодно пунктов\строчек добавлять, причём с разными значениями
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |