Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 9

ListBox & StringGrid. Неправильно работает код

19.09.2012, 13:48. Показов 1666. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Вот отрезок кода, в котором при нажатии на 1 строку ListBox'a происходит загрузка файла в StringGrid2 и некоторые ячейки из уже загруженного StringGrid2 копируются в StringGrid1. Проблема в том, что в StringGrid1 ничего не отображается, как будто StringGrid2 не загрузился, хотя значения в SG2 отображаются.

Delphi
1
2
3
4
5
6
begin
if ListBox1.ItemIndex = 0 then
begin
LoadStringGrid(StringGrid2, 'Base\ul.base');
 
StringGrid1.Cells[5, 2] := StringGrid2.Cells[3, 13]; //этот участок кода не работает.
И еще (при нажатии на Button1), нужно сделать фиксированную привязку cтроки ListBox'a на определенный набор ячеек, которые будут копироваться, БЕЗ нажатия на строку. ListBox1.ItemIndex и ListBox1.Items.Strings[] требуют нажатие.


Delphi
1
2
3
4
5
if ListBox1.ItemIndex = 0 then
StringGrid1.Cells[5, 2] := StringGrid2.Cells[3, 13];
 
if ListBox1.ItemIndex = 1 then
StringGrid1.Cells[5, 3] := StringGrid2.Cells[3, 13];
если в данный момент выделена 2 строка, то значения из строки SG2 скопируются и в ячейку 5, 3 и в ячейку 5, 2.

Вроде все объяснил

Вот для наглядности нарисовал https://www.cyberforum.ru/atta... 1348048043
Миниатюры
ListBox & StringGrid. Неправильно работает код  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.09.2012, 13:48
Ответы с готовыми решениями:

неправильно работает код
var Form1: TForm1; A:array of integer; i,max,min,s:integer; n:real; implementation {$R *.xfm} procedure...

Почему этот код работает неправильно?
procedure TForm1.FormActivate(Sender: TObject); var txt: String; strs: TStringList; i,j: integer; sz1,sz2,sz3: Integer; begin ...

Метод золотого сечения (код работает неправильно)
Здрасте Для функции f:=a1*x*x*x*x+ a3*x*x+a5; нужно составить метод золотого сечения. Я сделал так Procedure Method; Var ...

11
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,901
Записей в блоге: 12
19.09.2012, 14:20
Цитата Сообщение от hoverhorn Посмотреть сообщение
этот участок кода не работает.
Должен работать. Попробуй в новом (пустом) проекте положить на форму 2 StringGrid-а, заполнить один из них случайными данными, и скопировать значение любой ячейки во второй Грид. Прекрасно копируется. Значит, что-то у тебя есть в проекте, что этому мешает. Либо показывай больше кода, либо присоединяй проект полностью.
Цитата Сообщение от hoverhorn Посмотреть сообщение
если в данный момент выделена 2 строка, то значения из строки SG2 скопируются и в ячейку 5, 3 и в ячейку 5, 2.
У тебя в коде написано, что если выделена вторая строка, то скопируется только в ячейку (5, 3). А в (5, 2) скопируется при выделенной первой строке.
0
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 9
19.09.2012, 15:19  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
У тебя в коде написано, что если выделена вторая строка, то скопируется только в ячейку (5, 3). А в (5, 2) скопируется при выделенной первой строке.
Все правильно, так должно быть, но это не работает. Для этого требуется, чтобы выделена была строка в ListBox. У меня есть кнопка "Расчет", которая при нажатии переходит в режим disabled и расчет идет автоматически. Нет возможности каждый раз выделять строку в листбоксе и нажимать эту кнопку.


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.ListBox1Click(Sender: TObject);
var i : integer;
    VdafSUMM, VdafSR, SdSUMM, SdSR, YSUMM, YSR, R0SUMM, R0SR, VtSUMM, VtSR, EokSUMM, EokSR   : real;
 
begin
if ListBox1.ItemIndex = 0 then
begin
LoadStringGrid(StringGrid2, 'Base\ul.base');
Edit1.Text := StringGrid1.Cells[2, 2];
Edit2.Text := StringGrid1.Cells[4, 2];
 
end;
 
if ListBox1.ItemIndex = 1 then
begin
LoadStringGrid(StringGrid2, 'Base\aba.base');
Edit1.Text := StringGrid1.Cells[2, 3];
Edit2.Text := StringGrid1.Cells[4, 3];
end;
 
//и так далее
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.Button1Click(Sender: TObject);
begin
if ListBox1.ItemIndex = 0 then
StringGrid1.Cells[5, 2] := StringGrid2.Cells[3, 13];
StringGrid1.Cells[6, 2] := StringGrid2.Cells[4, 13];
StringGrid1.Cells[7, 2] := StringGrid2.Cells[5, 13];
StringGrid1.Cells[8, 2] := StringGrid2.Cells[6, 13];
StringGrid1.Cells[9, 2] := StringGrid2.Cells[7, 13];
StringGrid1.Cells[10, 2] := StringGrid2.Cells[8, 13];
 
if ListBox1.ItemIndex = 1 then
StringGrid1.Cells[5, 3] := StringGrid2.Cells[3, 13];
StringGrid1.Cells[6, 3] := StringGrid2.Cells[4, 13];
StringGrid1.Cells[7, 3] := StringGrid2.Cells[5, 13];
StringGrid1.Cells[8, 3] := StringGrid2.Cells[6, 13];
StringGrid1.Cells[9, 3] := StringGrid2.Cells[7, 13];
StringGrid1.Cells[10, 3] := StringGrid2.Cells[8, 13];
end;
Миниатюры
ListBox & StringGrid. Неправильно работает код  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,901
Записей в блоге: 12
19.09.2012, 15:21
Delphi
1
2
3
4
5
6
7
8
9
if ListBox1.ItemIndex = 0 then
begin // <---
   StringGrid1.Cells[5, 2] := StringGrid2.Cells[3, 13];
   StringGrid1.Cells[6, 2] := StringGrid2.Cells[4, 13];
   StringGrid1.Cells[7, 2] := StringGrid2.Cells[5, 13];
   StringGrid1.Cells[8, 2] := StringGrid2.Cells[6, 13];
   StringGrid1.Cells[9, 2] := StringGrid2.Cells[7, 13];
   StringGrid1.Cells[10, 2] := StringGrid2.Cells[8, 13];
end; // <---
разницу чувствуешь? А если вспомнить про то, что есть циклы - весь обработчик нажатия кнопки уложится в 2 строки.
0
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 9
20.09.2012, 09:40  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
8
9
if ListBox1.ItemIndex = 0 then
begin // <---
   StringGrid1.Cells[5, 2] := StringGrid2.Cells[3, 13];
   StringGrid1.Cells[6, 2] := StringGrid2.Cells[4, 13];
   StringGrid1.Cells[7, 2] := StringGrid2.Cells[5, 13];
   StringGrid1.Cells[8, 2] := StringGrid2.Cells[6, 13];
   StringGrid1.Cells[9, 2] := StringGrid2.Cells[7, 13];
   StringGrid1.Cells[10, 2] := StringGrid2.Cells[8, 13];
end; // <---
разницу чувствуешь? А если вспомнить про то, что есть циклы - весь обработчик нажатия кнопки уложится в 2 строки.
Сделал так

Delphi
1
2
3
4
5
6
7
procedure TForm1.Button1Click(Sender: TObject);
var x, y : integer;
begin
for x := 5 to StringGrid1.ColCount-1 do
for y := 3 to StringGrid1.ColCount do
StringGrid1.Cells[x, 2] := StringGrid2.Cells[y, 13];
end;
Не работает. Если равенство в последней строчке поменять местами, то пустые строки из StringGrid1 копируются в SG2, в обратную сторону работает. Но мне нужно все наоборот.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,901
Записей в блоге: 12
20.09.2012, 09:50
Цитата Сообщение от hoverhorn Посмотреть сообщение
Сделал так
"Это" ничего общего с тем, что было написано выше, не имеет. Вот так сделай:
Delphi
1
2
for i := 3 to StringGrid2.ColCount - 1 do
   StringGrid1.Cells[i + 2, ListBox1.ItemIndex + 2] := StringGrid2.Cells[i, 13];
Этот цикл будет делать то же самое, что и код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if ListBox1.ItemIndex = 0 then
begin
StringGrid1.Cells[5, 2] := StringGrid2.Cells[3, 13];
StringGrid1.Cells[6, 2] := StringGrid2.Cells[4, 13];
StringGrid1.Cells[7, 2] := StringGrid2.Cells[5, 13];
StringGrid1.Cells[8, 2] := StringGrid2.Cells[6, 13];
StringGrid1.Cells[9, 2] := StringGrid2.Cells[7, 13];
StringGrid1.Cells[10, 2] := StringGrid2.Cells[8, 13];
end
 
if ListBox1.ItemIndex = 1 then
begin
StringGrid1.Cells[5, 3] := StringGrid2.Cells[3, 13];
StringGrid1.Cells[6, 3] := StringGrid2.Cells[4, 13];
StringGrid1.Cells[7, 3] := StringGrid2.Cells[5, 13];
StringGrid1.Cells[8, 3] := StringGrid2.Cells[6, 13];
StringGrid1.Cells[9, 3] := StringGrid2.Cells[7, 13];
StringGrid1.Cells[10, 3] := StringGrid2.Cells[8, 13];
end;
// ...
Если работает код, который внизу - то отработает и тот, что сверху.
0
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 9
20.09.2012, 09:52  [ТС]
Вообщем ввел в первый стринггрид произвольные значения (куда будут копироваться из стрингрида2), программа заменяет их пустыми строками. Такое ощущение что значения из стринггрида2 не загрузились.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,901
Записей в блоге: 12
20.09.2012, 09:56
В общем, я тебе не верю. Прекрасно копируются данные, только что попробовал. Что-то ты недоговариваешь. Присоединяй проект полностью, и пошагово рассказывай, что куда вводить, и что после чего нажимать. Больше писать тебе код без просмотра твоего проекта полностью я не буду.
0
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 9
20.09.2012, 10:19  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
В общем, я тебе не верю. Прекрасно копируются данные, только что попробовал. Что-то ты недоговариваешь. Присоединяй проект полностью, и пошагово рассказывай, что куда вводить, и что после чего нажимать. Больше писать тебе код без просмотра твоего проекта полностью я не буду.
Инструкции на скриншоте
Миниатюры
ListBox & StringGrid. Неправильно работает код  
Вложения
Тип файла: zip sbm.zip (278.0 Кб, 5 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,901
Записей в блоге: 12
20.09.2012, 10:47
А ничего, что при выполнении 316 строки у тебя исключение при делении на 0? Ты их заглушил что-ли? Напрасно. А так - не подтверждаю. Добавил begin/end там, где я тебе показывал (строки 449-467 твоего кода), и прекрасно переносится информация из SG2 в SG1:
Миниатюры
ListBox & StringGrid. Неправильно работает код  
0
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 9
20.09.2012, 11:22  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
А ничего, что при выполнении 316 строки у тебя исключение при делении на 0? Ты их заглушил что-ли? Напрасно. А так - не подтверждаю. Добавил begin/end там, где я тебе показывал (строки 449-467 твоего кода), и прекрасно переносится информация из SG2 в SG1:
Я взял проект из архива, вставил begin\end куда Вы сказали, но значения скопировались в обе строки StringGrid1 как во втором посте.

ш. Ульяновская 10 10 10 10 10
ш. Абашевская 10 10 10 10

На Вашем скриншоте совсем другое. Может у меня с дельфи что-то
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,901
Записей в блоге: 12
20.09.2012, 13:25
Цитата Сообщение от hoverhorn Посмотреть сообщение
Может у меня с дельфи что-то
Откуда я знаю? Тебе лучше знать. Я компилировал на 2009-ой, все прекрасно (за исключением Exception-ов при делении на 0).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.09.2012, 13:25
Помогаю со студенческими работами здесь

Нужен драйвера, код PCI\VEN_1039&DEV_7012&SUBSYS_0C98105B&REV_A0\3&B1BFB68&0&17
всем привет !! уменя нет звука нужен драйвер код PCI\VEN_1039&amp;DEV_7012&amp;SUBSYS_0C98105B&amp;REV_A0\3&amp;B1BFB68&amp;0&amp;17 скачал прогу их много ...

Вывод работы потока в ListBox. Неправильно работает sleep
Здравствуйте. Такая проблема: есть 2 потока, которые выводятся в listbox1 и listbox2 соответственно. Хочется, чтобы значения выводились...

Не работает код (оператор &&)
Народ, код из примера курса по программированию на C не работает, так, как от него ожидалось... Смысл задачи - использовать оператор...

Не работает Drag&Drop для ListBox
Работаю в C++Builder 2010. Есть форма с двумя листбоксами, в каждом по-умолчанию содержится по пять элементов. Реализовал Drag&amp;Drop по...

Неправильно работает код
def lol(s,k): k %= len(s) i = 0 for j in range(len(s)-k): s, s = s, s i += 1 return s ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru