Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 466

/ вопрос открыт /

Здравствуйте, эксперты!
У меня задача программно создать на форме окно(а) типа Tmaskedit. Но я не могу добиться вывода окна нужной ширины. Где-то в настройках забита ширина окна, которую я не могу изменить, не знаю как. Простое задание новой ширины типа var.width:=40; программа игнорирует и выводит все равно окно прежней длины. Может быть это можно сделать со свойством parent, но как? Подскажите.

sergey vasilev Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: sergey vasilev (статус: Посетитель)
Вопрос отправлен: 1 декабря 2009, 17:54
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: unl0K

Здравствуйте, sergey vasilev!
Вот на скорую руку набросал Вам пример.
Я заметил, что вы создаете массив контролов TMaskEdit, намного проще будет работать с указателями.
--
Клик по Button1 создает на форме 10 объектов TMaskEdit и добавляет указатель на этот объект в список.
В Edit1 вводим номер контрола, в Edit2 новую ширину, Клик по Button2 задает новую ширину.
Все контролы не переименовывал, чтобы было понятнее.

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, Mask;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Button1: TButton;
  12. Edit1: TEdit;
  13. Button2: TButton;
  14. Edit2: TEdit;
  15. procedure Button1Click(Sender: TObject);
  16. procedure Button2Click(Sender: TObject);
  17. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  18. private
  19. { Private declarations }
  20. public
  21. { Public declarations }
  22. end;
  23.  
  24. var
  25. Form1: TForm1;
  26. ME:TMaskEdit;
  27. i:Integer;
  28. List:TList;
  29.  
  30. implementation
  31.  
  32. {$R *.dfm}
  33.  
  34. procedure TForm1.Button1Click(Sender: TObject);
  35. begin
  36. List:=TList.Create;
  37. for i:=0 to 10 do begin
  38. ME:=TMaskEdit.Create(Self);
  39. with ME do begin
  40. Width:=300;
  41. Left:=10;
  42. Top:=22*i+10;
  43. Parent:=Form1;
  44. end;
  45. List.Add(ME);
  46. end;
  47. end;
  48. procedure TForm1.Button2Click(Sender: TObject);
  49. begin
  50. TMaskEdit(List[StrToInt(Edit1.Text)]).Width:=StrToInt(Edit2.Text);
  51. end;
  52. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  53. begin
  54. for i:=0 to List.Count-1 do
  55. TMaskEdit(List[i]).Free;
  56. List.Free;
  57. end;
  58. end.
  59.  


Ответ отправил: unl0K (статус: Посетитель)
Время отправки: 1 декабря 2009, 18:55

Ответ #2. Отвечает эксперт: Жикльор

Здравствуйте, sergey vasilev!

Код, описан выше очень большой. И я вообще не понимаю зачем нужно было создавать TList. Если вам нужно просто вывести поле класса TMaskEdit и задать его ширину, то можно использовать вот этот код (проверил, создает программно поле и задает ему нужную ширину):

procedure TForm1.Button1Click(Sender: TObject);
var
ME: TMaskEdit;
begin
ME:=TMaskEdit.Create(Self);
ME.Parent:=Form1;
ME.Width:=400;
end;

Если же вам нужно создать несколько таких полей, то используйте эти команды в цикле.

procedure TForm1.Button1Click(Sender: TObject);
var
ME: TMaskEdit;
i: integer;
begin
for i:=0 to 4 do
  begin
  ME:=TMaskEdit.Create(Self);
  ME.Parent:=Form1;
  ME.Width:=Random(400);
  ME.Top:=ME.Height*i;
  en

Ответ отправил: Жикльор (статус: 5-ый класс)
Время отправки: 1 декабря 2009, 21:11


Мини-форум вопроса

Всего сообщений: 23; последнее сообщение — 3 декабря 2009, 15:43; участников в обсуждении: 5.

Страницы: [« Предыдущая] [1] [2]

Жикльор

Жикльор (статус: 5-ый класс), 2 декабря 2009, 20:49 [#21]:

Если будешь оставлять пустым место для ввода цифры, то это вызывает исключительную ошибку. Поэтому можно было бы просто сделать обычное поле, но в обработчике на нажатие кнопок описать все ситуации. Можешь написать какие маски должны быть? При каком количестве цифр где должен стоять дефис и т.д.?
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
sergey vasilev

sergey vasilev (статус: Посетитель), 3 декабря 2009, 12:43 [#22]:

Текстовая маска выглядит следующим образом 999,99;1;. Если при вводе двух или одной цифры не заполняются места возле запятой, то перевод в цифру часто сбоит. Можно ли добиться автоматического управления вводом, чтобы программа передвигала цифры на нужное место, не допуская пустых мест возле запятой. Я попытался вместо пустот ввести нули (маска выглядит так 999,99;1;0;), но все равно автоматического ввода не получается, нужно внимательно контролировать положение курсора. Посоветуйте, можно ли что-то придумать. Я в Паскале видел такую программу, но к сожалению исходника у меня не было.
Жикльор

Жикльор (статус: 5-ый класс), 3 декабря 2009, 15:43 [#23]:

А для чего вам нужны эти маски? Можете конкретно сказать условие, или задайте лучше новый вопрос. Это этого вопроса вообще не касается. Что вы считаете, зачем и т.д.?
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 22:35
Выполнено за 0.02 сек.