Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631

Использование StringGrid для создания матрицы

02.07.2012, 07:36. Показов 3418. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте. решил для создать матрицу для ввода матрицы использую StringGrid компонент, размерность задает пользователь и формируется матрица, но после ее формирования пользователь должен иметь возможность сам вводить в нее цифры, но почему то при запуске вводить не дает в ячейки не какие значения, почему никак разобраться не могу..., кстате помимо этого по основной диагонали и обратной второстепенной автоматически ячейки заполняются нулями. код выставлять не буду лучше выложу всю программу на данный момент подскажите что не так делаю? может как то не так настроил компонент StringGrid.
Вложения
Тип файла: rar древо графов.rar (6.0 Кб, 23 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.07.2012, 07:36
Ответы с готовыми решениями:

Как написать код для создания матрицы в StringGrid?
Помогите пожалуйста.

Реализовать функцию создания матрицы и последующее использование её в другой функции
Здравствуйте! Подскажите, пожалуйста, почему у меня не считывается (насколько я поняла) массив из функции его объявления? Программа...

Использование DirectX для создания ScreenShot-ов
вопрос можно разбить на две части как подключить функции DirectX(8,9) к делфи в принципе и как сделать скриншот в частности. если...

12
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
02.07.2012, 07:54
lexflax,

Цитата Сообщение от lexflax Посмотреть сообщение
вводить не дает в ячейки не какие значения
Цитата Сообщение от lexflax Посмотреть сообщение
может как то не так настроил компонент StringGrid
Может В Object Inspector у StringGrid: Options - goEditing поставить в true.

Либо:
C++
1
StringGrid1->Options << goEditing;
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
03.07.2012, 19:13  [ТС]
а можно как то заблокировать ячейки после того как в них ввели 0? чтоб туда больше ничего нельзя было ввести????
C++
1
2
3
4
5
6
7
int A;
A=StrToInt(Edit1->Text);
StringGrid1->RowCount=A;
StringGrid1->ColCount=A;
for (int i=0; i < A; i++) {
StringGrid1->Cells[i][i]=0;
StringGrid1->Cells[i][(A-1)-i]=0;
вот размерность матрицы это A
в основную и второстепенную диагональ ввожу 0, вот после ввода надо чтоб там где нули клетки заблокировались и не давали в них уже ввести другое значение

Добавлено через 13 часов 19 минут
хелп ми
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
03.07.2012, 20:14
lexflax, если правильно понял, то вот так:

C++
1
2
3
4
5
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect)
{
if (StringGrid1->Cells[ACol][ARow]==0) CanSelect = false;
}
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
04.07.2012, 17:53  [ТС]
так бы пошло но есть одно но, тут блокироваться ячейки с нулями будут после нажатия на ячейки мышкой, причем цикл будет проходить по всем ячейкам и там где о будет блокировать, у меня кнопка Button после нажатия на нее формируется матрица и в две дианонали забиваются нули, вот надо чтоб при нажатии кнопки баттон нули не просто забивались в ячейки но и блокировали их на изменение так как там будут только нули... а во все другие ячейки будут вводится или нули или единицы по этой матрице будет строится граф в дальнейшем, и если цикл у меня будет по всем ячейкам в которых есть 0 то может и заблокировать те ячейки которые не идут по диагонали
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
07.07.2012, 19:37  [ТС]
Люди ну не ужели у стринг грида нельзя заблокировать ячейки без функции нажатия курсором на ячейки? а просто нажатием кнопки баттон?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
07.07.2012, 20:01
Да все можно, были бы желание да разумение.
Надо блокировать определенные диагонали или любые другие множества ячеек? Не проблема, всего-то надо сделать маску и по ней фильтровать реакцию в обработчике StringGrid1SelectCell.
C++
1
2
3
4
5
6
int strgrid_mask[20][20] = {{1}}; // размер массива должен соответствовать размерам стринггрида
// дальше забиваем в этом массиве нулями диагонали или еще чего там надо...
// а в обработчике уже смотрим на эту маску:
void __fastcall TForm1::StringGrid1SelectCell( TObject *Sender, int ACol, int ARow, bool &CanSelect ) {
   if ( ! strgrid_mask[ACol][ARow] ) CanSelect = false;
}
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
07.07.2012, 20:16  [ТС]
надо чтоб единожды заполнил две диагонали нулями и заблокировал их, а все остальные ячейки если даже туда вводится 0 то он их не блокировал
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
07.07.2012, 20:51
И где проблема? Забей в маску эти две диагонали и не трогай ее больше - заблокируются только эти две диагонали.

Не по теме:

Навыдумываете себе лишних заморочек... проще надо делать.:)



Добавлено через 14 минут
Если нет желания вводить новые сущности, можно воспользоваться массивом ссылок StringGrid->Objects[][]. Заполнить его чем-либо - указателями на объекты vcl или, там, единичками, а упомянутые диагонали занулить.
Тогда фильтровать можно так:
C++
1
if (StringGrid1->Objects[ACol][ARow]==NULL) CanSelect = false;
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
08.07.2012, 15:31  [ТС]
пробовал не получается может я че не так делаю я в начали прогу заархивировал и прикрепил вот добавьте туда свои подсказки и посмотри заработает или нет? если вдруг заработает то сохраните хочу посмотреть ... у меня не работает
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.07.2012, 00:59
ю ар вэлкам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TEdit *Edit1;
    TLabel *ваа;
    TStringGrid *StringGrid1;
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
    void __fastcall StringGrid1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect);
 
private:    // User declarations
public:     // User declarations
     int **strgrid_mask;
    __fastcall TForm1(TComponent* Owner);
};
C++
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
__fastcall TForm1::TForm1( TComponent *Owner )
               : TForm( Owner ) {
    strgrid_mask = NULL;
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click( TObject *Sender ) {
    static int size; // статик позволит нам знать последнее значение размера
    size_t i, j;
    if ( strgrid_mask ) { // освобождаем память, если уже была выделена до этого
        for ( i = 0; i < size; delete[]strgrid_mask[i++] );
        delete[]strgrid_mask;
    }
    for ( i = 0; i < StringGrid1->RowCount; StringGrid1->Rows[i++]->Clear( ) ); // очищаем стринггрид
 
    size = StrToInt( Edit1->Text );
    StringGrid1->RowCount = size;
    StringGrid1->ColCount = size;
    for ( strgrid_mask = new int *[size], i = 0; i < size; i++ ) { // динамически выделяем память под массив маски
        for ( strgrid_mask[i] = new int[size], j = 0; j < size; strgrid_mask[i][j++] = 1 );
    }
    for ( i = 0; i < size; i++ ) {
        StringGrid1->Cells[i][i] = strgrid_mask[i][i] = 0;
        StringGrid1->Cells[i][size - 1 - i] = strgrid_mask[i][size - 1 - i] = 0;
    }
    for ( i = 0; i < size; i++ ) // ставим фокус на первой попавшейся допустимой ячейке
        for ( j = 0; j < size; j++ ) {
            if ( strgrid_mask[i][j] ) {
                StringGrid1->Row = i;
                StringGrid1->Col = j;
                i = j = size;
            }
        }
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1SelectCell( TObject *Sender, int ACol, int ARow, bool &CanSelect ) {
    if ( !strgrid_mask[ACol][ARow] ) {
        CanSelect = false;
    }
}
1
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
10.07.2012, 08:01  [ТС]
скопировал ваш пример запустил ниче так и не изменилось, как можно было вносить изменения в ячейки которые по диагонали идут так и осталась эта возможность на скрине все показано
Миниатюры
Использование StringGrid для создания матрицы  
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
10.07.2012, 10:24
Что-то ты не так сделал или не учел - не ведаю.

У меня спокойненько все работает.
Вот проект - древо графов.rar.
Вот экзешник - Project4.rar.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.07.2012, 10:24
Помогаю со студенческими работами здесь

использование рекурсий для создания псевдоциклов
вычислить на компьютере суммы рядов . для организации циклов используйте рекурсии. 1)1+3+5..n ...

Использование Timer для создания псевдопотока
Всем добрый день. Я разрабатываю программу &quot;Система контроля и управления доступом сотрудников на предприятие&quot;. Программа...

Использование указателей для создания связанных списков
На аптечном складе хранятся лекарства. Сведения о лекарствах содержаться в специальной ведомости: наименования лекарственного препарата;...

Использование MinGW для создания переносимых программ
Здравствуйте, поговорим про компиляцию?) Я хочу использовать MinGW для компиляции .cpp файлов на винде разумеется,но столкнулся с...

Использование переменной для создания статического массива
Всем привет! Помогите разобраться, я запутался, пусть есть такой код: #include &lt;iostream&gt; using namespace std; int...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru