Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 08.03.2022
Сообщений: 42

Добавление строк в StringGrid

30.04.2022, 18:55. Показов 4551. Ответов 24

Студворк — интернет-сервис помощи студентам
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
procedure TForm1.Button1Click(Sender: TObject);
 var a,f1,f2,f3,b,c,q1,q2,q3,q4:integer;
ms1,ms2,ms3: array of string;
begin
q1 := 0;
q2 := 0;
q3 := 0;
q4 := 0;
 
SetLength(ms1,StringGrid1.RowCount);
SetLength(ms2,StringGrid1.RowCount);
SetLength(ms3,StringGrid1.RowCount);
 
 
for a := 1 to StringGrid1.RowCount-1 do
if StringGrid1.Cells[1,a]=Trim(Edit1.Text) then
q1 := 1;
for a := 1 to StringGrid1.RowCount-1 do
if StringGrid1.Cells[2,a]=Trim(Edit2.Text) then
q2 := 1;
for a := 1 to StringGrid1.RowCount-1 do
if StringGrid1.Cells[3,a]=Trim(Edit3.Text) then
q3 := 1;
q4 := q1 + q2 + q3;
 
Val(Trim(Edit1.Text),b,f1);
Val(Trim(Edit2.Text),b,f2);
Val(Trim(Edit3.Text),c,f3);
 
if (Length(Edit1.text)<>0) and (Length(Edit2.text)<>0) and (Length(Edit3.text)<>0) and (f3=0) and (f1<>0) and (f2<>0) and (c>0) then
begin
if q4 <> 3 then
begin
 
for a := 1 to StringGrid1.RowCount-1 do
ms1[a]:= Trim(StringGrid1.Cells[1,a]);
for a := 1 to StringGrid1.RowCount-1 do
ms2[a]:= Trim(StringGrid1.Cells[2,a]);
for a := 1 to StringGrid1.RowCount-1 do
ms3[a]:= Trim(StringGrid1.Cells[3,a]);
 
StringGrid1.ColCount := 0;
StringGrid1.ColCount := StringGrid1.ColCount + 4;
StringGrid1.RowCount := StringGrid1.RowCount + 1;
 
for a := 1 to StringGrid1.RowCount-2 do
StringGrid1.Cells[1,a] := ms1[a];
for a := 1 to StringGrid1.RowCount-2 do
StringGrid1.Cells[2,a] := ms2[a];
for a := 1 to StringGrid1.RowCount-2 do
StringGrid1.Cells[3,a] := ms3[a];
 
StringGrid1.Cells[1,StringGrid1.RowCount-1] := Edit1.Text;
StringGrid1.Cells[2,StringGrid1.RowCount-1] := Edit2.Text;
StringGrid1.Cells[3,StringGrid1.RowCount-1] := Edit3.Text;
 
for a :=1 to StringGrid1.RowCount-1 do
StringGrid1.Cells[0,a] := IntToStr(a)
end
else
ShowMessage('Дублированная запись');
end
else
ShowMessage('Ошибки в таблице');
end;
Код работает в СтрингГриде, там таблица с данными из трех Эдитов. Первые два столбца - текстовые, третий- числа.
Помогите пожалуйста убрать ошибку - кидает запись на 6 строку вместо второй
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.04.2022, 18:55
Ответы с готовыми решениями:

Добавление строк в StringGrid
Доброго времени суток! Подскажите, пожалуйста, как добавить новую чистую строку в StringGrid при нажатии на кнопку в самое начало таблицы...

StringGrid - добавление строк. (Delphi)
ЗДРАВСТВУЙТЕ!!! Есть 2 таблицы StringGrid. Нужно, чтоб программа рабоатла так: В StrGr1 вводим данные, нажимаем на кнопку, они...

Добавление строк в StringGrid. Delphi.
Здравствуйте! :) Скажите пожалйста как в StringGrid добавлять строки. Есть две таблицы StringGrid и кнопка &quot;Найти&quot;. ...

24
0 / 0 / 0
Регистрация: 08.03.2022
Сообщений: 42
01.05.2022, 11:13  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от AzAtom Посмотреть сообщение
В самом первом варианте так. Так что же надо, а? Схематически нарисуй, что ли?
Когда я запускаю код, который скидывала в заголовке этой темы, он выводит вот так
Новые записи добавляются под старой, но самая первая идет в строку с пятым номером, а надо в первую
Миниатюры
Добавление строк в StringGrid  
0
Модератор
4150 / 2360 / 813
Регистрация: 15.11.2015
Сообщений: 9,487
01.05.2022, 11:46
Лучший ответ Сообщение было отмечено lina_parker как решение

Решение

lina_parker, значит, изначально не нужно пустые строки создавать. Вот так можно:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.RowCount := 1;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  // Добавление пустой строки
  StringGrid1.RowCount := StringGrid1.RowCount + 1;
 
  // Заполнение последней строки
  StringGrid1.Cells[1, StringGrid1.RowCount-1] := Edit1.Text;
  StringGrid1.Cells[2, StringGrid1.RowCount-1] := Edit2.Text;
  StringGrid1.Cells[3, StringGrid1.RowCount-1] := Edit3.Text;
end;
1
0 / 0 / 0
Регистрация: 08.03.2022
Сообщений: 42
02.05.2022, 19:17  [ТС]
Получилось
Выводит как надо
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
procedure TForm1.Button1Click(Sender: TObject);
 var a,b,c,d,f1,f2,f3,q1,q2,q3,q4:integer;
ms1,ms2,ms3: array of string;
begin
q1 := 0;
q2 := 0;
q3 := 0;
q4 := 0;
 
SetLength(ms1,StringGrid1.RowCount);
SetLength(ms2,StringGrid1.RowCount);
SetLength(ms3,StringGrid1.RowCount);
 
for a := 1 to StringGrid1.RowCount-1 do
if StringGrid1.Cells[1,a] = Trim(Edit1.Text) then
q1 := 1;
for a := 1 to StringGrid1.RowCount-1 do
if StringGrid1.Cells[2,a] = Trim(Edit2.Text) then
q2 := 1;
for a := 1 to StringGrid1.RowCount-1 do
if StringGrid1.Cells[3,a] = Trim(Edit3.Text) then
q3 := 1;
q4 := q1 + q2 + q3;
 
Val(Trim(Edit1.Text),b,f1);
Val(Trim(Edit2.Text),b,f2);
Val(Trim(Edit3.Text),c,f3);
 
if (Length(Edit1.text) <> 0) and (Length(Edit2.text) <> 0) and (Length(Edit3.text) <> 0) and (f3 = 0) and (f1 <> 0) and (f2 <> 0) and (c > 0) then
begin
if q4 <> 3 then
begin
 
for a := 1 to StringGrid1.RowCount-1 do
ms1[a]:= Trim(StringGrid1.Cells[1,a]);
for a := 1 to StringGrid1.RowCount-1 do
ms2[a]:= Trim(StringGrid1.Cells[2,a]);
for a := 1 to StringGrid1.RowCount-1 do
ms3[a]:= Trim(StringGrid1.Cells[3,a]);
 
for a := 1 to StringGrid1.RowCount-2 do
StringGrid1.Cells[1,a] := ms1[a];
for a := 1 to StringGrid1.RowCount-2 do
StringGrid1.Cells[2,a] := ms2[a];
for a := 1 to StringGrid1.RowCount-2 do
StringGrid1.Cells[3,a] := ms3[a];
 
StringGrid1.InsertRowWithValues(StringGrid1.RowCount-2, ['', Edit1.Text, Edit2.Text, Edit3.Text]);
 
for a := 1 to StringGrid1.RowCount-1 do
StringGrid1.Cells[0,a] := IntToStr(a)
end
else
ShowMessage('Дублированная запись');
end
else
ShowMessage('Ошибки в записи');
end;
0
0 / 0 / 0
Регистрация: 08.03.2022
Сообщений: 42
25.05.2022, 22:59  [ТС]
Подскажите пожалуйста еще с этим кодом
Надо написать функцию для проверки ввода
Что надо делать? А то я пишу какую-то дичь

Pascal
1
2
3
4
5
6
7
8
9
10
11
function prov(Edit1.Text,Edit2.Text,Edit3.Text:string):boolean;
begin
If Edit1.Text = '' Then
ShowMessage('Пустота');
If Edit2.Text = '' Then
ShowMessage('Пустота');
If Edit3.Text = '' Then
ShowMessage('Пустота');
If StrToInt(Edit3.Text) < 0 Then
ShowMessage('Число некорректно  ');
end;
0
Модератор
 Аватар для D1973
9939 / 6475 / 2459
Регистрация: 21.01.2014
Сообщений: 27,450
Записей в блоге: 3
26.05.2022, 05:16
lina_parker, совсем поиском не пользуетесь, из принципа, наверное...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2022, 05:16
Помогаю со студенческими работами здесь

Поиск в Stringgrid и вывод строк в новый Stringgrid
Привет. Наверное этот вопрос задавался уже много раз, но я не могу никак понять: 1. У меня есть Stringgrid в нем содержатся записи: фио,...

StringGrid и добавление строк
в StringGrid при добавлении строк всегда остается нижняя пустая строка. точнее заполняется нижняя строка, а потом добавляется еще одна...

StringGrid динамическое добавление строк
Добрый день, есть программа : Выводит на экран имя файла,размер файла,дату создания,контрольную сумму.Но это консольное приложение.Хочу...

StringGrid: динамическое добавление строк и назначение типа столбцов
Доброго дня! Есть ли StringGrid, которому можно было задать тип конкретной ячейки (или всего столбца): ComboBox, обычный Edit, CheckBox?...

Функции работы со строками символов: определение размера строки, копирование строк, добавление строк, сравнение строк
На языке Ассемблер написать функции работы со строками символов: определение размера строки, копирование строк, добавление строк, сравнение...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове. Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru