Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
Delphi 6-7

Заполнение ячеек в StringGrid

07.07.2021, 23:53. Показов 6433. Ответов 33

Студворк — интернет-сервис помощи студентам
Добрый день. Я в программировании новичок и в последний раз пользовался delphi 7 лет 7-8 назад, а сейчас захотелось для себя написать небольшую программку, но столкнулся с проблемами с заполнением ячеек в StringGrid.

Я написал простой калькулятор где по нажатию кнопки осуществляется подсчёт в блоках Edit(1-3) и всё прекрасно работает. Но я захотел, чтобы можно было посмотреть подробную информацию по этим расчётам. Сначала думал выводить таблицу в какой-нибудь Memo, но потом нашёл уже готовую таблицу StringGrid и решил выводить данные в неё, т.к. это показалось удобным.

На скриншоте "Главное окно" показываю что получилось на данном этапе.

Так вот, я не могу вспомнить или найти как написать несколько заполнений массива :
1) Простой массив с шагом 10. Т.е. должно выйти 10, 20, 30, 40 и тд до 10000 (колонка Количество акций)
2) Массив в котором бы ячейки заполнялись в результате операций между ячейками (колонка Доход за дивы и колонка Расходы на акции)
3) Выбор из массива числа по условию. Например ставлю в ячейку "Цель" 1000 а в ячейке "Достижение цели" должно выдать число из колонки "Расходы на акции" которое соответствует строке в колонке "доход за дивы") в данном примере выдаст 15000

Для понимания на скриншоте "Пример ексель" показано, что я хочу получить в итоге.



Это основные проблемы с которыми я столкнулся, потратил 2 дня, чтобы найти их решение в похожих примерах, но к сожалению не смог. Поэтому обращаюсь за помощью сюда. Помогите написать код для заполнения этой таблицы.

P.S. Есть ещё маленькие вопросы по самой таблице StringGrid:
1) почему-то её заполнение работает только если я код пишу в процедуре этой таблице. При попытке внести код в процедуру кнопки "Расчёт" просто выдаёт разные ошибки... Если бы получилось все расчёты завязать на эту кнопку, было бы прекрасно.

2) Сейчас у меня заполнение ячеек прописаны в процедуре этой таблице. И вывод данных происходит по нажатию на любую ячейку почему-то. Это такая фича или просто я не прописал что-то, чтобы хотя-бы шапка была написана всегда, а не после нажатия по ячейке?



P.S.S. Прикладываю код программы, который работает на данном этапе и на всякий случай сами файлы.

Delphi
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids;
 
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Label0: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Button1: TButton;
    Label9: TLabel;
    StringGrid1: TStringGrid;
    Button2: TButton;
    Label6: TLabel;
    Label7: TLabel;
    Edit6: TEdit;
    Edit7: TEdit;
 
 
 
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure StringGrid1Click(Sender: TObject);
//    procedure StringGrid1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  S, i, j: Integer;
 
implementation
 
{$R *.dfm}
 
 
////////////////////////////////////////////////////////////////
 
 
procedure TForm1.Button1Click(Sender: TObject);
 
//Расчёт дивидендов
begin
// проверка пустых ячеек
  if (Edit1.Text <> '') And  (Edit2.Text <> '')  And  (Edit3.Text <> '')
  //
  then
    begin
Edit4.Text:= FloatToStr(StrToFloat(Edit2.Text) *  StrToFloat(Edit3.Text));
Edit5.Text:= FloatToStr(StrToFloat(Edit1.Text) *  StrToFloat(Edit2.Text));
    end
  // в случае незаполнения ячеек выдать ошибку
  else
  begin
  ShowMessage('Введите значения');
  end
 
end;
 
 
////////////////////////////////////////////////////////////////
 
 
  
procedure TForm1.Button2Click(Sender: TObject);
 
// очистка таблицы
 
var i, j : Integer;
begin
  with StringGrid1 do
    for i:=1 to RowCount-1 do
    for j:=0 to ColCount-0 do
    Cells[j, i]:='';
end;
 
 
////////////////////////////////////////////////////////////////
 
 
procedure TForm1.StringGrid1click(Sender: TObject);
begin
  // Заполнение шапки
StringGrid1.Cells[0, 0]:= 'Цена за акцию';
StringGrid1.Cells[1, 0]:= 'Количество акций';
StringGrid1.Cells[2, 0]:= 'Дивиденды';
StringGrid1.Cells[3, 0]:= 'Доход за дивы';
StringGrid1.Cells[4, 0]:= 'Расход на акции';
 
 
  // заполнение ячеек
 
  // заполнение столб 1
StringGrid1.Cells[0, 1]:= Edit1.Text;
 
  // заполнение столб 2
 
 
  // заполнение столб 3
  StringGrid1.Cells[2, 1]:= Edit3.Text;
 
  // заполнение столб 4
 
 
  // заполнение столб 5
 
 
 
end;
 
 
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.07.2021, 23:53
Ответы с готовыми решениями:

Заполнение ячеек stringgrid в delphi
Как программно заполнить несколько ячеек Stringrid ?Предположим мне надо заполнить с по ячейки словом &quot;лето&quot;.(Не надо...

Заполнение ячеек StringGrid содержимым текстового файла
Здравствуйте, при решении данного задания: 1)Возможность открыть текстовый файл - заполнить ячейки StringGrid-a подстроками, между 2-мя...

Анимированное заполнение ячеек таблицы StringGrid разными способами
Доброго времени суток, уважаемые форумчане и форумчанки. Решая одну немаленькую задачу столкнулся с затруднительной ситуацией, поэтому...

33
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
11.07.2021, 09:18
Студворк — интернет-сервис помощи студентам
Я тоже не совсем понял, что и как там выбирать, потому и ничего не написал в ответ.

KiofST, можно в последнем сообщении написать, какая проблема ещё не решена, чтобы не искать по всей теме.
0
 Аватар для roach1967
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
11.07.2021, 10:26
Лучший ответ Сообщение было отмечено KiofST как решение

Решение

Тут, IMHO, нужно немного изменить логику вывод результатов.
Не стоит городить вывод всей таблицы (а вдруг мне приспичило посмотреть стоимость 1000000 акций).
Т.к. расчёты достаточно простые, можно поступить так:
- ввести переменную диапазона просмотра (сколько строчек до цели и сколько после). Например при значении 3 будет выведено семь строк таблицы, где центральная строка и будет целью;
- с учётом дискретного количества акций находим номер итерации: пока кол-во акций <= цели, добавляем то значение шага акций, которое указали. В итоге получим то ближайшее значение акций, которое не меньше цели.
- от номера итерации отнимает значение диапазона и далее в цикле заполняем ячейки таблицы.

Заполнение шапки лучше всего перенести в обработчик создания формы TForm1.OnCreate.
1
 Аватар для roach1967
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
11.07.2021, 12:37
Лучший ответ Сообщение было отмечено KiofST как решение

Решение

Это работает так:
Вложения
Тип файла: rar Divident.rar (10.0 Кб, 9 просмотров)
1
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
14.07.2021, 00:09  [ТС]
Добавлено через 1 час 14 минут
Цитата Сообщение от roach1967 Посмотреть сообщение
Тут, IMHO, нужно немного изменить логику вывод результатов.
Не стоит городить вывод всей таблицы (а вдруг мне приспичило посмотреть стоимость 1000000 акций).
Т.к. расчёты достаточно простые, можно поступить так:
- ввести переменную диапазона просмотра (сколько строчек до цели и сколько после). Например при значении 3 будет выведено семь строк таблицы, где центральная строка и будет целью;
- с учётом дискретного количества акций находим номер итерации: пока кол-во акций <= цели, добавляем то значение шага акций, которое указали. В итоге получим то ближайшее значение акций, которое не меньше цели.
- от номера итерации отнимает значение диапазона и далее в цикле заполняем ячейки таблицы.
Заполнение шапки лучше всего перенести в обработчик создания формы TForm1.OnCreate.

Это действительно интересный способ решений! Я не знал, что можно реализовать с таким выбором, поэтому и хотел чтобы вся таблица была видна. Такой способ намного лучше, спасибо за помощь!
0
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
14.07.2021, 13:03  [ТС]
Цитата Сообщение от roach1967 Посмотреть сообщение
с учётом дискретного количества акций находим номер итерации: пока кол-во акций <= цели, добавляем то значение шага акций, которое указали. В итоге получим то ближайшее значение акций, которое не меньше цели.
Добрый день. Сегодня обратил внимание, что программа всё же не совсем корректно отображает значения.
Сделал 3 скриншота с одинаковыми данными, кроме кол-ва акций для наглядности

1) Когда мы задаём значение в ячейку "Кол-во акций", то программа воспринимает это как шаг. И поэтому разброс получается слишком большой.
Например я бы хотел купить 300 акций, но возможно +\- 50. Т.е. 250-350 акций. И хотелось бы визуально посмотреть на значения при таких количествах. Но из-за того, что программа считает кол-во как шаг, то я увижу 300, 600, 900 и тд.

2) Из-за того, что программа считает кол-во акций за шаг мы сталкиваемся с другой проблемой - не точный подсчёт "Достижение цели".
Обратите внимание на скриншоты. На снимке 1 видно, что при таком расчёте программа считает, что 600 акций это минимальное необходимое. Но если уменьшить шаг как на снимках 2 и 3, то будет видно, что было бы достаточно и 360 акций всего.


Может стоит добавить, в таком случае, ещё ячейку в которой можно было бы задать шаг? Например Шаг - 10. И он выдаст в таблице в колонке "Кол-во акций" 300 310 320 330. По сути всё останется также, просто шаг он будет брать не из количества. Отобразил ячейки в Снимке 5.
Это точно решило бы первую проблему и кажется решает вторую тоже. Если посмотреть на снимок 4 (ексель), то видно что с шагом 10 он отобразит более точно. А Ваша идея с диапазоном отрежет всё лишнее от таблицы.


Могу ли я Вас попросить написать этот блок с шагом?



P.S. немного изменил Ваш код. Добавил сообщение об ошибки, при незаполненных ячейках и перенёс все элементы на Panel.

Прикладываю код программы:

Delphi
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, Buttons, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    BitBtn1: TBitBtn;
    StringGrid1: TStringGrid;
    Edit8: TEdit;
    BitBtn2: TBitBtn;
    Label11: TLabel;
    Edit9: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
Var
    act_cena, act_shag: real;
    divy: real;
    celi, celi_dost: real;
    diapazon, iter, nstr: integer;
    flag: boolean = false;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
    with(StringGrid1) do begin
        Cells[0, 0]:= 'Цена за акцию';
        Cells[1, 0]:= 'Количество акций';
        Cells[2, 0]:= 'Дивиденты';
        Cells[3, 0]:= 'Доход за дивы';
        Cells[4, 0]:= 'Расход на акции';
    end;
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
    i: integer;
    SelGrid: TGridRect;
begin
    if (Edit1.Text <> '') AND (Edit2.Text <> '') AND (Edit3.Text <> '') then
 
  begin
        act_cena:= StrToFloat(Edit1.Text);
        act_shag:= StrToFloat(Edit2.Text);
        divy    := StrToFloat(Edit3.Text);
        diapazon:= StrToInt(Edit8.Text);
        celi    := StrToFloat(Edit6.Text);
 
        StringGrid1.RowCount:= 2 + diapazon * 2;
        SelGrid.Left:= 5;
        SelGrid.Top:= 0;
        SelGrid.Right:= 5;
        SelGrid.Bottom:= 0;
        StringGrid1.Selection:= SelGrid;
 
        Edit4.Text:= FloatToStr(act_shag * divy);
        Edit5.Text:= FloatToStr(act_shag * act_cena);
 
        iter:= 1;
        while(iter * act_shag * divy < celi) do begin
            Inc(iter);
        end;
        celi_dost:= iter * act_shag * act_cena;
        Edit7.Text:= FloatToStr(celi_dost);
 
        nstr:= iter - diapazon;
        if nstr < 1 then nstr:= 1;
        flag:= true;
        for i:= 1 to 1 + diapazon * 2 do begin
            StringGrid1.Cells[0, i]:= FloatToStr(act_cena);
            StringGrid1.Cells[1, i]:= FloatToStr(act_shag * (i + nstr - 1));
            StringGrid1.Cells[2, i]:= FloatToStr(divy);
            StringGrid1.Cells[3, i]:= FloatToStr(divy * act_shag * (i + nstr - 1));
            StringGrid1.Cells[4, i]:= FloatToStr(act_cena * act_shag * (i + nstr - 1));
        end;
        flag:= false;
    end
    // в случае незаполнения - ошибка
  else
  begin
    ShowMessage('Введите значение');
    Exit;
  end;
 
end;
 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
        if ARow = (iter - nstr + 1) then StringGrid1.Canvas.Brush.Color:= clHighlight else StringGrid1.Canvas.Brush.Color:= clWhite;
        if ARow > 0 then begin
            StringGrid1.Canvas.FillRect(Rect);
            StringGrid1.Canvas.TextOut(Rect.Left + 5, Rect.Top + 5, StringGrid1.Cells[ACol, ARow]);
        end;
end;
 
procedure TForm1.BitBtn2Click(Sender: TObject);
Var
    i: integer;
begin
    StringGrid1.RowCount:= 2;
    for i:= 0 to 4 do StringGrid1.Cells[i, 1]:= '';
end;
 
end.
Миниатюры
Заполнение ячеек в StringGrid   Заполнение ячеек в StringGrid   Заполнение ячеек в StringGrid  

Заполнение ячеек в StringGrid   Заполнение ячеек в StringGrid  
0
 Аватар для roach1967
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
14.07.2021, 13:31
Всё правильно. Я так и рассчитывал алгоритм, что поле Количество акций - это шаг таблицы (а не цель). В таблице как раз и выводится найденное расчёта по запросу в колонке Количество акций.
0
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
14.07.2021, 14:14  [ТС]
Цитата Сообщение от roach1967 Посмотреть сообщение
Количество акций - это шаг таблицы (а не цель)
Верно, это не цель. Цель - доход за дивиденды.

Цитата Сообщение от KiofST Посмотреть сообщение
На снимке 1 видно, что при таком расчёте программа считает, что 600 акций это минимальное необходимое. Но если уменьшить шаг как на снимках 2 и 3, то будет видно, что было бы достаточно и 360 акций всего.
Вас видимо смутило, что я говорил о количестве акций. Могу перефразировать:
На снимке 1 видно, что при таком расчёте программа считает, что 90000 расход на акции это минимальное необходимое. Но если уменьшить шаг как на снимках 2 и 3, то будет видно, что было бы достаточно всего 54000 расхода на акций.

Мне просто кажется, что задавать шаг таблицы через кол-во акций это не совсем корректно и я выше описывал почему. При таком расчёте отображается не истинные и очень грубые значения. Поэтому я и предлагаю добавить ячейку с возможностью выбора шага. И прошу Вас помочь с этим )
0
 Аватар для mr-Crocodile
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
14.07.2021, 16:02
KiofST, посмотри, я то, что ты хотел сделал?

Dividents.rar
0
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
14.07.2021, 17:00  [ТС]
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
KiofST, посмотри, я то, что ты хотел сделал?
Ну с шагами - ДА.
А максимальное количество акций лишнее. Лучше как предлагал товарищ roach1967 сделать диапазон просмотра.
0
 Аватар для roach1967
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
14.07.2021, 17:37
Вот ввёл все возможные обработчики для полей.
При двойном клике на таблице меняется цель. Так-же при вводе в поле Количество акций автоматически делается перерасчёт затрат/прибыли. При нажатии Enter рассчитывается новая в соответствии с заданными параметрами.
В принципе, по всей программе расставил пояснения.
---
Ну и небольшие косметические улучшения...
Вложения
Тип файла: rar Divident.rar (10.1 Кб, 7 просмотров)
1
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
14.07.2021, 20:02  [ТС]
Цитата Сообщение от roach1967 Посмотреть сообщение
Вот ввёл все возможные обработчики для полей.
При двойном клике на таблице меняется цель. Так-же при вводе в поле Количество акций автоматически делается перерасчёт затрат/прибыли. При нажатии Enter рассчитывается новая в соответствии с заданными параметрами.
В принципе, по всей программе расставил пояснения.
---
Ну и небольшие косметические улучшения...

Воу! Это прям великолепно выполнено...
Единственное что, я заметил 2 небольших минуса, но они не критичные в целом.

1) Если мы задаём значения в ячейках как представлено на Снимке 1, то мы не сможем сделать расчёт, потому что нужно ввести обязательно "Цель", потом нажимаем кнопку расчёта и получаем результат как на Снимке 2.
Это вызвано тем, что программа приоритетнее считает "Цель".

И это логично и правильно, так оно и должно по идеи работать.
Но получается, чтобы посмотреть диапазон вокруг нужного кол-ва акций, придётся писать в ячейку "Цель" приближенные значения к "доход за дивиденды". Как показано на Снимке 3.
Было бы удобнее, если бы ячейка "Цель" была бы пустая(так наверное нельзя...) или хотя-бы равна 0, то в таблице бы отображался диапазон вокруг кол-ва акций. Визуально это выглядело бы как на Снимке 4



2)Вторая более мелкая деталь.
Я в первом пункте написал, что придётся писать в ячейку "Цель" приближенные значения к "доход за дивиденды".
Дело в том, что если написать ровно тоже самое число, то оно его перескакивает и идёт к следующему.
Если при кол-ве 100 акций задать "Цель" = 384, а не 383 то выдаст результат как на Снимке 5.
Я так полагаю где-то в Условии прописано "Если число меньше, тогда.. ", корректнее было бы наверно написать "Если число меньше или равно, тогда.. "


_________________
Но как я и сказал, это всё в целом мелочи и работа выполнена прям очень сильно.
Но если можно как-то эти мелочи подправить, то было бы здорово )
Миниатюры
Заполнение ячеек в StringGrid   Заполнение ячеек в StringGrid   Заполнение ячеек в StringGrid  

Заполнение ячеек в StringGrid   Заполнение ячеек в StringGrid  
0
14.07.2021, 20:32

Не по теме:

Согласно орфографической норме русского языка правильно писать дивиденДы

0
 Аватар для roach1967
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
15.07.2021, 03:52
Ну почему-же, если ввести количество акций и нажать Enter, то автоматом рассчитается цель, даже если поле было пустым, то оно заполнится и будет заполнена таблица.

Добавлено через 10 минут
А по поводу перескакивания, это происходит, видимо из-за округления.
Можно заменить проверку итераций таким образом:
C#
1
2
3
        while(iter * act_shag * divy < (celi - 0.0000001)) do begin
            Inc(iter);
        end;
Теперь перескакивания нет.
1
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
15.07.2021, 10:42  [ТС]
Цитата Сообщение от roach1967 Посмотреть сообщение
если ввести количество акций и нажать Enter, то автоматом рассчитается цель
Действительно.. Не обратил внимание, что нажимать Enter необходимо именно из ячейки "Кол-во акций". Сначала подумал, что из любой можно )


Цитата Сообщение от roach1967 Посмотреть сообщение
Можно заменить проверку итераций таким образом:
Да, это помогло. Спасибо Вам большое за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.07.2021, 10:42

StringGrid Цвет фона пустых ячеек и ячеек с текстом
Доброго дня.. Задачка следующая: Ячейки в StringGrid'e заполняются по блоку из Timer. В StringGrid1DrawCell блок анализа...

Отрисовка ячеек StringGrid
Приветствую! Столкнулся с проблемой при динамическом создании StringGrid-ov. Ячейки почему-то отрисовываются в самом последнем, из...

Сложение ячеек в StringGrid
Нужно сложить значения всех ячеек в столбцах StringGrid? При подсчете выдает ошибку не могу понять что не так.

Закрашивание ячеек StringGrid
Доброго времени суток. Есть форма. столбцы-имена людей, 0 строка - числа месяца с 1 по последнее. Должно быть что-то вроде таблицы с...

Разность ячеек в Stringgrid
Привет тому,кто это читает. Прошу оказать помощь с курсовой, мне необходимо сделать так,чтобы разность кол-ва отпущенной продукции и...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru