С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 12
1

Как можно оптимизировать?

28.11.2013, 11:25. Показов 2382. Ответов 35
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста. Имеется форма на которой находятся 20 edit'ов, как можно через цикл записать из них данные в массив.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2013, 11:25
Ответы с готовыми решениями:

Можно ли оптимизировать, что бы работало побыстрее?
Сделал софтинку для конвертации дбфки в текстовый файл в определенном формате. В дбф файле может...

Как можно еще оптимизировать код?
Как еще можно оптимизировать данный код? Если вкратце, то он выводит значение АВ, если ключ = вводу...

Как можно оптимизировать код?
Здравствуйте. Написал скрипт, позволяющий считывать с сервера картинку, преобразовывать ее в...

Как можно оптимизировать CSS
Собственно так случилось что человек который занимался версткой оказался недоступен. И верстать...

35
43 / 40 / 2
Регистрация: 21.09.2009
Сообщений: 145
28.11.2013, 11:33 2
C
1
2
3
4
5
HWND aEditWnd[20];
for(int i = 0; i < 20; i++)
{
 //aEditWnd[i]
}
1
Заблокирован
28.11.2013, 11:34 3
ну как как - берёшь и читаешь их )))
Ну например, есть у тебя едиты с именами IDC_EDIT1, IDC_EDIT2 и тд . В файле ресурсов у них есть int идентификатор у каждого, вот в цикле его и гоняй
1
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 12
28.11.2013, 11:37  [ТС] 4
я просто не знаю правильный синтаксис языка. 5 день только изучаю(
пытаюсь преренести так ish[i]=StrToFloat(Form2->Edit[i]->Text)
как надо правильно и что на эту тему почитать?
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
28.11.2013, 11:41 5
Цитата Сообщение от newbie666 Посмотреть сообщение
Ну например, есть у тебя едиты с именами IDC_EDIT1, IDC_EDIT2 и тд . В файле ресурсов у них есть int идентификатор у каждого, вот в цикле его и гоняй
Гмм. Ну а если в числовой последовательности этих идентификаторов есть "разрыв", или если, например, между IDC_EDIT8 и IDC_EDIT9 "вклиниваются" идентификаторы каких-нибудь других элементов управления (кнопок, или там статиков...)?

Чтобы реализовать "в цикле", придется вручную все время отслеживать в файле ресурсов:
1. непрерывность числовых значений IDC_EDIT1....IDC_EDIT20,
2. отсутствие "лишних" значений в этой последовательности.
1
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 12
28.11.2013, 11:46  [ТС] 6
а как это сделать? на форме еще находятся еще 40 подписей и 1 кнопка

не проще ли будет тогда их просто в ручную записать?
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
28.11.2013, 12:14 7
А что за "форма"-то у тебя? Приведи код.
0
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 12
28.11.2013, 12:19  [ТС] 8
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//---------------------------------------------------------------------------
 
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published:    // IDE-managed Components
    TEdit *Edit1;
    TLabel *Label1;
    TEdit *Edit2;
    TLabel *Label2;
    TEdit *Edit3;
    TLabel *Label3;
    TEdit *Edit4;
    TLabel *Label4;
    TEdit *Edit5;
    TLabel *Label5;
    TEdit *Edit6;
    TLabel *Label6;
    TEdit *Edit7;
    TLabel *Label7;
    TEdit *Edit8;
    TLabel *Label8;
    TEdit *Edit9;
    TLabel *Label9;
    TEdit *Edit10;
    TLabel *Label10;
    TEdit *Edit11;
    TLabel *Label11;
    TLabel *Label12;
    TLabel *Label13;
    TLabel *Label14;
    TLabel *Label15;
    TLabel *Label16;
    TLabel *Label17;
    TLabel *Label18;
    TLabel *Label19;
    TLabel *Label20;
    TLabel *Label21;
    TLabel *Label22;
    TButton *Button1;
    TLabel *Label23;
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
    __fastcall TForm2(TComponent* Owner);
 
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
int  ish[10];
 
for(int i = 0; i < 10; i++)
{
  ish[i]=StrToFloat(Form2->Edit[i]->Text)
}
 
 
 Form2->Visible=false;
здесь пока десять но будут добавляться
0
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 12
28.11.2013, 12:25  [ТС] 9
Как можно оптимизировать?
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
28.11.2013, 12:40 10
Хм, ну для Билдера не подскажу, с ним не работаю....
0
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,520
Записей в блоге: 1
28.11.2013, 12:46 11
C++ следует учить, не с формами играя, а создавая консольные приложения!
0
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
28.11.2013, 14:13 12
Цитата Сообщение от postal2024 Посмотреть сообщение
Подскажите пожалуйста. Имеется форма на которой находятся 20 edit'ов, как можно через цикл записать из них данные в массив.
C++
1
2
3
    for (int i=0;i<ComponentCount;i++)
        if ( ((TEdit*)Components[i])->Name=="Edit"+IntToStr(i) )
            ish[i]=StrToInt(((TEdit*)Components[i])->Text);
0
Почетный модератор
Эксперт С++
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
28.11.2013, 14:28 13
Kulgar, соответственно лучше не через имя, а через тип.
0
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
28.11.2013, 14:35 14
... опять двадцать пять...
Kulgar, это не сработает. Можно так попробовать (если все эдиты названы "как положено" - Edit№).
C++
1
2
3
4
    for (int i=0;i<Form1->ComponentCount;i++)
      if (Components[i]->ClassNameIs("TEdit"))
        ish[Components[i]->Name.SubString(5,2).ToIntDef(0)] =
          StrToInt(((TEdit*)Components[i])->Text);
В этом случае в массиве под соотв. индексом будет находиться преобразованное содержимое эдита (нулевой не используется).
2
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
28.11.2013, 14:44 15
nick42, мой код же не Вася Пупкин пишет. Я знаю как называются у меня компоненты. Следовательно мой вариант у меня работает.
А вот касательно этой строчки:
C++
1
ish[Components[i]->Name.SubString(5,2).ToIntDef(0)]
- зачем так городить?
C++
1
2
3
4
5
6
    for (int i=0,j=0;i<Form1->ComponentCount;i++)
      if (Components[i]->ClassNameIs("TEdit"))
      {
        ish[j] = StrToInt(((TEdit*)Components[i])->Text);
        j++;
      }
0
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
28.11.2013, 14:52 16
Цитата Сообщение от Kulgar Посмотреть сообщение
зачем так городить?
потому что ваше - в принципе ошибочно. Components[] - это список компонентов, который сочиняется НЕ ВАМИ (я имею в виду последовательность). Попробуйте удалить первый эдит, добавить пару лэйблов, и затем снова добавить эдит1; все это с растяжкой по времени, с пересохранением. Лэйблы окажутся в списке первыми, а все позиции эдитов сместятся. Как-то так во всяком случае. Можно для чистоты эксперимента вывести этот список компонентов в созданную Memo.
1
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
28.11.2013, 14:59 17
Цитата Сообщение от nick42 Посмотреть сообщение
Components[] - это список компонентов, который сочиняется НЕ ВАМИ (я имею в виду последовательность). Попробуйте удалить первый эдит, добавить пару лэйблов, и затем снова добавить эдит1; все это с растяжкой по времени, с пересохранением. Лэйблы окажутся в списке первыми, а все позиции эдитов сместятся.
Это я понимаю. Однако, на работоспособность программы это не повлияет. Я обращаюсь к компоненту по имени. Следовательно пока Edit17 у меня Edit, а не какой-нибудь Speed, то код будет работать.
фрагмент кода из моей программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    for(int i=1;i<55;i++)
    {
        for (int j=0;j<ComponentCount;j++)
        {
            if ( (((TEdit*)Components[j])->Name=="Edit"+IntToStr(i)) && (i>4) )
            {
                ((TEdit*)Components[j])->Visible=false;
                ((TEdit*)Components[j])->Height=24;
                ((TEdit*)Components[j])->Top=0;
                ((TEdit*)Components[j])->Left=0;
                ((TEdit*)Components[j])->TabOrder=i;
                ((TEdit*)Components[j])->TabStop=true;
            }
            if ( (((TEdit*)Components[j])->Name=="Edit"+IntToStr(i)) && (i<5) )
            {
                ((TEdit*)Components[j])->Text="";
                ((TEdit*)Components[j])->TabOrder=i;
                ((TEdit*)Components[j])->TabStop=true;
            }
        }
    }
Разве нет?
0
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
28.11.2013, 15:00 18
А "касательно этой строчки" - сделано "с предохранением". Если на форме окажутся эдиты, названные VasjaPupkin#3, то в моем варианте программа не слетит; содержимое этого эдита попадет в ячейку 0 массива, как и другие аналогичные, а в ячейках 1,2,3 будет содержимое соотв. Edit1,Edit2,Edit3.
0
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 12
28.11.2013, 15:02  [ТС] 19
Цитата Сообщение от nick42 Посмотреть сообщение
1
2
3
4
for (int i=0;i<Form1->ComponentCount;i++)
if (Components[i]->ClassNameIs("TEdit"))
ish[Components[i]->Name.SubString(5,2).ToIntDef(0)] =
StrToInt(((TEdit*)Components[i])->Text);
Если использовать этот метод то в мемо отображаются элементы массива так
1,35214764042893E-37
12
23
34
45
56
67
78
89
90

хотя первый элемент должен быть=12, а последний не приходит
0
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
28.11.2013, 15:06 20
Цитата Сообщение от Kulgar Посмотреть сообщение
Это я понимаю. Однако, на работоспособность программы это не повлияет. Я обращаюсь к компоненту по имени. Следовательно пока Edit17 у меня Edit, а не какой-нибудь Speed, то код будет работать.
фрагмент кода из моей программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    for(int i=1;i<55;i++)
    {
        for (int j=0;j<ComponentCount;j++)
        {
            if ( (((TEdit*)Components[j])->Name=="Edit"+IntToStr(i)) && (i>4) )
            {
                ((TEdit*)Components[j])->Visible=false;
                ((TEdit*)Components[j])->Height=24;
                ((TEdit*)Components[j])->Top=0;
                ((TEdit*)Components[j])->Left=0;
                ((TEdit*)Components[j])->TabOrder=i;
                ((TEdit*)Components[j])->TabStop=true;
            }
            if ( (((TEdit*)Components[j])->Name=="Edit"+IntToStr(i)) && (i<5) )
            {
                ((TEdit*)Components[j])->Text="";
                ((TEdit*)Components[j])->TabOrder=i;
                ((TEdit*)Components[j])->TabStop=true;
            }
        }
    }
Разве нет?
А много удовольствия, что программа "не слетела", если, к примеру, после случайного добавления лэйбла содержимое всех ячеек массива будет "переврано": эдит1 будет во второй ячейке, эдит2 - в третьей и т.д.?

Добавлено через 2 минуты
Цитата Сообщение от postal2024 Посмотреть сообщение
Если использовать этот метод то в мемо отображаются элементы массива так
В мэмо предлагалось выводить вот это:
C++
1
2
    for (int i=0;i<Form1->ComponentCount;i++)
      Memo1->Lines->Add(Components[i]->Name);
Я не знаю, что у вас за последовательность.
1
28.11.2013, 15:06
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.11.2013, 15:06
Помогаю со студенческими работами здесь

Ну и как тогда можно оптимизировать
Что бы вы посоветовали оптимизировать в http://HeroesV.net.ru ?

Как можно оптимизировать запрос?
Подскажите пожалуйста, можно ли как то объединить эти три запроса в один ? SELECT brand,...

Как можно оптимизировать код?
Здравствуйте! Столкнулся с проблемой. VBA стал ругаться на сильно длинный код. Надо его...

Как можно оптимизировать код?
#include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;vector&gt; using namespace std; int main() {...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как программировать под HCL Notes и создавать свои продукты на ее основе
InfoMaster 11.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой мощную платформу для разработки корпоративных приложений, которая сочетает в себе функции электронной почты, календаря,. . .
Как работать с SVN (Subversion)
InfoMaster 11.01.2025
Введение Система контроля версий является неотъемлемой частью современного процесса разработки программного обеспечения. Она обеспечивает управление изменениями в коде, позволяет отслеживать. . .
Использование GraphQL в JavaScript
InfoMaster 11.01.2025
Введение в GraphQL и его преимущества В современной разработке веб-приложений эффективный обмен данными между клиентом и сервером играет ключевую роль. GraphQL представляет собой язык запросов и. . .
Администрирован­­­­ие Git, продвинутые техники работы с Git
InfoMaster 11.01.2025
Основы управления репозиторием Эффективное управление Git-репозиторием требует глубокого понимания механизмов контроля доступа и инструментов администрирования. Рассмотрим ключевые аспекты. . .
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru