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

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

02.07.2012, 07:36. Показов 3335. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru