Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 30.01.2019
Сообщений: 7
1

Исключение в StringGrid

16.06.2019, 17:57. Показов 593. Ответов 10

Author24 — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста, как в определенной ячейке StringGrid запретить вписывать цифры цифры?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2019, 17:57
Ответы с готовыми решениями:

StringGrid работа с TStrings и исключение "превышение размера StringGrid"
предположим есть TStringGrid и у него 10 строк и 2 колонки и есть TStringList и в нем 15 строк ...

Исключение при нажатии на несуществующий столбец StringGrid
Подскажите по такому вопросу, есть 2 StringGrid, первый состоит из 2 столбцов название и значение,...

Delphi 7 Stringgrid Нужно сделать цикл для заполнения Stringgrid данными из другого Stringgrid
Нужно чтобы из Stringgrid1 данные переносились в Stringgrid2 Но ТОЛЬКО ПО УСЛОВИЮ Таблицы...

Исключение EOleError. Как перехватить при удалении записи это исключение ?
Добрый день, Господа. Связал ключем справочник с майн-таблицей на уровне СУБД MySQL. При...

10
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
16.06.2019, 18:02 2
Событие StringGrid1KeyPress есть? есть
определяете активную ячейку и для нее запрещаете ввод
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
16.06.2019, 18:03 3
Запрет ввода в StringGrid
0
0 / 0 / 0
Регистрация: 30.01.2019
Сообщений: 7
16.06.2019, 18:19  [ТС] 4
Ну и как это сделать?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
16.06.2019, 18:38 5
Как написано так и делайте
Delphi
1
if (ACol = 3) and (ARow = 4) then CanSelect:= False;//номер столбца и номер строки, не вводить
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
16.06.2019, 18:57 6
а у ТС не вводить именно цифры
0
1077 / 488 / 316
Регистрация: 05.04.2013
Сообщений: 2,140
17.06.2019, 06:26 7
Запрет ввода 0 5 и 9
Delphi
1
2
3
4
5
6
7
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if ( (StringGrid1.col = 1   ) //номер столбца
 and (StringGrid1.row=1     ) //номер строки
 and (key in ['0','5','9']) ) //цифры 0 5 9
 then Key := #0;   // то не вводить
end;
Не спасет от копипасты

Добавлено через 1 минуту
если все цифры, то можно
Delphi
1
key in ['0'..'9']
0
Житель Земли
3002 / 3004 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
18.06.2019, 15:30 8
можно сделать свой редактор для ячеек на основе TEdit
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
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls;
 
type
  // свое поле редактирования с фильтрацией символов
  TNumEdit = class(Vcl.StdCtrls.TEdit)
  private
    FOwnerGrid: TStringGrid;
  protected
    procedure KeyPress(var Key: Char); override;
    procedure CMExit(var Message: TCMExit); message CM_EXIT;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  end;
 
  // своя сетка с необходимым функционалом
  TStringGrid = class(Vcl.Grids.TStringGrid)
  private
    FEdit: TNumEdit;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure EnterEditor;
  end;
 
  TForm2 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  end;
реализация
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
implementation
 
{$R *.dfm}
 
{ TStringGrid }
 
constructor TStringGrid.Create(AOwner: TComponent);
begin
  inherited;
  // создаем и настраиваем внутреннее поле
  FEdit:= TNumEdit.Create(Self);
  FEdit.Parent:= Self;
  FEdit.AutoSize:= false;
  FEdit.Hide;
  FEdit.FOwnerGrid:= Self;
end;
 
destructor TStringGrid.Destroy;
begin
  FEdit.Free;
  inherited;
end;
 
// процедура отображения редактора
procedure TStringGrid.EnterEditor;
begin
  FEdit.BoundsRect:= CellRect(Col,Row);
  FEdit.Text:= Cells[Col,Row];
  FEdit.Show;
  FEdit.SetFocus;
end;
 
{ TNumEdit }
 
// при потере фокуса редактором скрываем его
procedure TNumEdit.CMExit(var Message: TCMExit);
begin
  inherited;
  Hide;
end;
 
// обработка нажатия функциональных клавиш в поле ввода
procedure TNumEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin
  inherited;
  case Key of
  VK_ESCAPE: FOwnerGrid.SetFocus;
  VK_RETURN: with FOwnerGrid do
             begin
               // ТАКЖЕ ЗДЕСЬ МОЖНО ДОБАВИТЬ КУЧУ ДОПОЛНИТЕЛЬНЫХ ПРОВЕРОК
               // НА СООТВЕТСТВИЕ ТЕКСТА КАКИМ-ЛИБО УСЛОВИЯМ
               Cells[Col,Row]:= Text;
               SetFocus;
             end;
  end;
end;
 
// фильтрация символов
procedure TNumEdit.KeyPress(var Key: Char);
begin
  inherited;
  case Key of
  '0'..'9',#8:;
  else Key:= #0;
  end;
end;
использование в рабочем коде
Delphi
1
2
3
4
5
6
7
procedure TForm2.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key in [VK_RETURN,VK_F2] then
  with StringGrid1 do
  if (Col = 1) and (Row = 1) then EnterEditor;
end;
опять же, можно наделать кучу редакторов с различным функционалом
Миниатюры
Исключение в StringGrid  
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
18.06.2019, 16:44 9
DenNik, а Combobox и SpinEdit можешь?
был бы отличный аналог платных компонент
0
Житель Земли
3002 / 3004 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
18.06.2019, 16:53 10
Цитата Сообщение от qwertehok Посмотреть сообщение
а Combobox и SpinEdit можешь?
qwertehok, а они ничем в этом плане не отличаются от TEdit
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
18.06.2019, 18:47 11
событиями

я пробовал делать для ListValueEditor разные обработчики, встроенные не получилось.
создавал панель, на панель кидал компоненты и с ними работал
очень много мороки
0
18.06.2019, 18:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2019, 18:47
Помогаю со студенческими работами здесь

Explorer.exe Исключение неизвестное программное исключение в Windows XP, что делать?
Уже три месяца борюсь с ужасной заразой, всякий раз, когда я совершаю какое-либо действие, будь...

Возникло необработанное исключение по адресу 0x73A62CF2: исключение Microsoft C++: std::bad_array_new_length
Доброго времени суток, уважаемые форумчане :) Подскажите начинающему программисту. Ругается на...

Что я сделал не так?Возникло необработанное исключение по адресу 0x7434A9F2 : исключение Microsoft C++: std
//Калькулятор Intrigger #include<iostream> #include<conio.h> #include<string.h> ...

прохожу исключение не могу понять где ошибка. мне нужно сделать свое исключение
import java.io.*; public class student { public static void main(String args){ ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru