Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3

InputQuery ограниченное количество введенных символов

10.08.2015, 22:13. Показов 2417. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго!
Возможно лимитировать количество введенных символов во время вызова диалога (вариант отсеять лишнее после нажатия не подходит).


C++
1
2
3
4
    UnicodeString NewString;
    if(InputQuery("Новое имя ", "Имя:",  NewString))
        {
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.08.2015, 22:13
Ответы с готовыми решениями:

Количество введенных символов в Edit.
Можно ли как ни будь узнать, сколько пользователь ввел символов в поле Edit?

Ограничить количество введенных символов в ячейку StringGrid
Доброго дня. Столкнулся с проблемой - не получается ограничить колличество введенных символов (32 символа) в ячейку StringGrid. В...

Ограниченное количество символов в строке
как ограничить вводимое кол-во символов в строке ( ввод с клавиатуры ) ? желательно через scanf, если возможно

19
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33405 / 21515 / 8236
Регистрация: 22.10.2011
Сообщений: 36,916
Записей в блоге: 12
10.08.2015, 22:33
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Нет. Edit, в который вводится текст, создается динамически прямо внутри функции InputQuery (так же, как и сама форма), извне нет возможности повлиять на его свойства.
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.08.2015, 13:45
Если очень нужно лимитировать, то предлагаю использовать диалог из ресурсов, - в этом случае больше возможностей управления видом окна диалога. В качестве примера:
так выглядит текст юнита:
Кликните здесь для просмотра всего текста
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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop   //--- use  resurs.rc  winuser.h
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
  HINSTANCE h;
  HWND hw;
  char buf[256];
  const int maxlenth = 6;
//---------------------------------------------------------------------------
BOOL CALLBACK DlgProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp)
{ 
  switch (msg) {
    case WM_INITDIALOG:
      SendDlgItemMessage(hw,3000,EM_SETLIMITTEXT,(WPARAM)maxlenth,-1L);
      return TRUE;
    case WM_COMMAND:
      if (LOWORD(wp)==3002) GetDlgItemText(hw,3000,buf,256);
      if (LOWORD(wp)==3001 || LOWORD(wp)==3002) EndDialog(hw,0); 
  }
  return FALSE;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   for(int i=0;i<256;i++) buf[i]=0;
   DialogBox(h,"ID_A",hw,(DLGPROC)DlgProc);
   Edit1->Text = buf;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
     Close();
}
//---------------------------------------------------------------------------
а так добавляемый к проекту файл сценария ресурсов:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
//---------------------------------------------------------------------------
ID_A DIALOG 10, 10, 100, 47
STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_VISIBLE | WS_CAPTION
CAPTION "My Dialog Box"
{
 EDITTEXT 3000, 8, 6, 86, 13, ES_AUTOHSCROLL
 DEFPUSHBUTTON "Cancel", 3001, 12, 27, 35, 13
 PUSHBUTTON "OK", 3002, 54, 27, 35, 13
}
//---------------------------------------------------------------------------
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
11.08.2015, 14:08  [ТС]
nick42, ну это выходит наверное равно ценно создать форму в отдельной функции? кинуть на нее тот же TEdit и прописать им события?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.08.2015, 14:14
Для меня - не равноценно. У меня в проекте обычно всегда есть файл .RC, а добавление лишних юнитов ( с DFMами) я как правило не приветствую.
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
11.08.2015, 14:20  [ТС]
ну как бы nick42 и вашем варианте и кода меньше,чем динамически создавать форму в функции
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33405 / 21515 / 8236
Регистрация: 22.10.2011
Сообщений: 36,916
Записей в блоге: 12
11.08.2015, 14:45
Ну, не так, чтобы сильно меньше, с использованием CreateMessageDialog может еще и меньше получится, всего-то добавить один Edit...
3
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.08.2015, 15:36
Лучший ответ Сообщение было отмечено Dinkin как решение

Решение

Да. Забыл про CreateMesage. Получилось...
C++
1
2
3
4
5
6
7
    TMsgDlgButtons Buttons = TMsgDlgButtons() << mbYes << mbNo;
    TForm *aMsgDlg = CreateMessageDialog("", mtCustom, Buttons);
    TEdit *died1 = new TEdit(aMsgDlg); died1->Parent = aMsgDlg;
    died1->MaxLength = 8;
    died1->SetBounds(12,12,156,21);
    aMsgDlg->Caption = "Ввод строки";
    if(6==aMsgDlg->ShowModal()) ShowMessage(died1->Text);
Можно короче?...
2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33405 / 21515 / 8236
Регистрация: 22.10.2011
Сообщений: 36,916
Записей в блоге: 12
11.08.2015, 15:53
Можно, если первые 2 строки заменить на одну:
C++
1
TForm *aMsgDlg = CreateMessageDialog("", mtCustom, TMsgDlgButtons() << mbYes << mbNo);
2
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.08.2015, 16:26
Кстати, что здесь нужно удалять и почему? Логически рассуждая, созданная в обработчике модальная форма при её закрытии удаляется, как и создаваемые на ней компоненты (и из памяти тоже). На деле же, если многократно вызывать эту функцию, то от памяти по ~4 кб откусываются.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33405 / 21515 / 8236
Регистрация: 22.10.2011
Сообщений: 36,916
Записей в блоге: 12
11.08.2015, 16:33
Цитата Сообщение от nick42 Посмотреть сообщение
созданная в обработчике модальная форма при её закрытии удаляется
С чего бы? Она ж не на стеке а в "куче" создается. Удалять надо форму:
C++
1
    delete aMsgDlg;
, после того, как сохранили (или показали) содержимое died1 (а вот удаление формы повлечет за собой удаление всех контролов, которыми она владеет)
2
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.08.2015, 16:44
Это правильно или не правильно? У меня нет понимания "кучи", стэка, но если я к этой форме (да и никто другой) не могу обратиться без её пересоздания, то это просто цифровой мусор! Операционка не имеет "ассенизаторов" на подобный случай?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33405 / 21515 / 8236
Регистрация: 22.10.2011
Сообщений: 36,916
Записей в блоге: 12
11.08.2015, 16:47
Операционка - имеет. Только вот они запускаются при убиении приложения. А пока приложение работает - следить за памятью должен сам программист. GC в С++ нет (и это хорошо)
2
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
11.08.2015, 17:57  [ТС]
а возможно как то увеличить ширину формы?
Изображения
 
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
11.08.2015, 18:00  [ТС]
И еще вопрос как правильно делать возврат значения функции в таком случае.....если я данный функционал типа так:

C++
1
2
3
4
5
6
7
8
9
10
    TForm *aMsgDlg = CreateMessageDialog("", mtCustom, TMsgDlgButtons() << mbYes << mbNo);
 
    TEdit *died1 = new TEdit(aMsgDlg); died1->Parent = aMsgDlg;
    died1->MaxLength = 8;
    died1->SetBounds(12,12,156,21);
    aMsgDlg->Caption = "Ввод строки";
 
    return   died1->Text;   // <-----Ведь если вернуть в данный момент далее форма не удаляеться
 
    delete aMsgDlg;         // <-----А если первым поставть удаление формы, то и возращать несчего
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.08.2015, 19:44
Dinkin, ну и проблемы!...
Цитата Сообщение от Dinkin Посмотреть сообщение
а возможно как то увеличить ширину формы?
- добавь aMsgDlg->ClientWidth = 210; перед ShowModal (210 - для примера).
Цитата Сообщение от Dinkin Посмотреть сообщение
как правильно делать возврат значения функции
- обязательно возврат? Можешь, конечно, написать автономнуб функцию типа AnsiString __fastcall TForm1::ZaprosTexta(), но по мне, так легче обойтись общкей переменной:
C++
1
2
String otzyv ;
if(7==aMsgDlg->ShowModal()) otzyv = died1->Text;
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
11.08.2015, 20:17  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
но по мне, так легче обойтись общей переменной
то есть глобальной, что бы на нее ссылаться по закрытию формы, верно?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.08.2015, 20:24
Ну да. Зависит от того, как часто и где будет использоваться введенная фраза.
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
11.08.2015, 20:27  [ТС]
nick42, Спасибо, отличный пример, компактно и без гемора
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.08.2015, 20:50
Пример, вообще-то, из ссылки в 7 сообщении (volvo), моя только обработка. Кстати, может пригодится с обработкой названий и расположения кнопок (не пропадать же, раз написано)
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Button1Click(TObject *Sender)
{      //   AnsiString otzyv ;
    TButton *bu2;
    TMsgDlgButtons Buttons = TMsgDlgButtons() << mbYes << mbNo;
    TForm *aMsgDlg = CreateMessageDialog("", mtCustom, Buttons);
    TEdit *died1 = new TEdit(aMsgDlg); died1->Parent = aMsgDlg;
    died1->MaxLength = 6;
    aMsgDlg->Caption = "Ввод теекста";
    aMsgDlg->ClientWidth = 210;
    int p=-1; while(++p<aMsgDlg->ControlCount)  {
      bu2=dynamic_cast<TButton*>(aMsgDlg->Controls[p]);
      if(bu2 && bu2->Name=="Yes") { bu2->Caption = "Отмена";
         bu2->SetBounds(15,42,57,25); }
      if(bu2 && bu2->Name=="No" ) { bu2->Caption = "Ввод";
         bu2->SetBounds(138,42,57,25); }   }
    died1->SetBounds(15,10,180,21);
    if(7==aMsgDlg->ShowModal()) otzyv = died1->Text;
    delete  aMsgDlg;
    Edit1->Text = otzyv;
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.08.2015, 20:50
Помогаю со студенческими работами здесь

Ограниченное количество вводимых символов в TextBox
Как сделать что в textbox`e1 можно было написать всего два символа,и если пользователь ввел 3 символ,то выводит сообщение. И второй...

Какая функция может считывать ограниченное количество символов?
Нужна функция которая считывает ограниченное количество символов ,для программы которая считает количество \n

Ввести с клавиатуры произвольную строку символов и выдать на экран количество введенных символов
Cоставить программу которая вводит с клавиатуры произвольную строку символов (конец строки клавиша enter) и выдает на экран количество...

В строке введенных символов подсчитать количество символов C,D,Р
Помогите пожалуйста. В строке введенных символов подсчитать количество символов C,D,Р, считая концом ввода символ (*). У меня получилась...

Количество введенных символов
подскажите есть задание С клавиатуры вводится последовательность символов до тех пор, пока не встретится символ, не являющийся цифрой....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru