Экспертная система 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] [Следующая »]

Вадим К

Вадим К (статус: Академик), 1 декабря 2009, 17:58 [#1]:

а может стоит Autosize (или как то так оно называется)?
Галочка "подтверждения прочтения" - вселенское зло.
sergey vasilev

sergey vasilev (статус: Посетитель), 1 декабря 2009, 18:01 [#2]:

autosize:=false
unl0K

unl0K (статус: Посетитель), 1 декабря 2009, 18:07 [#3]:

...
var
  MSK:TMaskEdit;
...
   MSK:=TMaskEdit.Create(Self);
   MSK.Width:=300;
   MSK.Left:=100;
   MSK.Top:=100;
   MSK.Parent:=Form1;
...
MSK.Free;
Не знаю , что у вас не получается, но так работает корректно.
Относись к людям так, как хотел бы, чтобы они к тебе относились!
sergey vasilev

sergey vasilev (статус: Посетитель), 1 декабря 2009, 18:23 [#4]:

Все равно не реагирует.
Ниже кусочек программы, которая должна создавать ряд полей в формате Tmaskedit/

coilquan[i]:=TMaskEdit.Create(self);
if i=1 then
coilquan[i].Top:=505
else
coilquan[i].Top:=coilquan[i-1].Top+25;
coilquan[i].AutoSize:=false;
coilquan[i].Left:=255;
coilquan[i].Width:=20;
coilquan[i].Height:=18;
coilquan[i].Font.Height:=8;
coilquan[i].EditMask:='99';
coilquan[i].Create(frmcoil1).Parent:=frmcoil1;

Что здесь не так?
Вадим К

Вадим К (статус: Академик), 1 декабря 2009, 18:55 [#5]:

вот это
coilquan[i].Create(frmcoil1).Parent:=frmcoil1;
хорошо понимаете, что делает эта строка? Она не нужна.

сделаете начало таким
coilquan[i]:=TMaskEdit.Create(frmcoil1);
coilquan[i].Parent:=frmcoil1;

а то иначе безумие получается.
Галочка "подтверждения прочтения" - вселенское зло.
unl0K

unl0K (статус: Посетитель), 1 декабря 2009, 19:00 [#6]:

Как плохо, что нельзя редактировать свой ответ,
даже ошибки нельзя поправить...
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Вадим К

Вадим К (статус: Академик), 1 декабря 2009, 19:03 [#7]:

Можно редактировать. если сильно захотеть. если хорошо стараться. Я могу исправить грамматические/орфографические ошибки, сделать?
Галочка "подтверждения прочтения" - вселенское зло.
unl0K

unl0K (статус: Посетитель), 1 декабря 2009, 19:04 [#8]:

"сделать?"
Если не составит труда, то сделайте пожалуйста.
--
Спасибо Вадим, хотел вам поставить +, но:
"Чтобы изменить репутацию этому пользователю, Вам нужно изменить репутацию ещё как минимум 3 пользователям."
Тоже как-то не продуманно сделано, если человек помог мне два раза, то я не могу поставить ему + 2 раза подряд.
Относись к людям так, как хотел бы, чтобы они к тебе относились!
sergey vasilev

sergey vasilev (статус: Посетитель), 1 декабря 2009, 19:31 [#9]:

спасибо, все получилось, ошибка была в последней строчке, там create не нужен.
И если можно еще один вопрос - можно ли в Tmaskedit добиться автоматического убирания пробелов при заполнении формы.
например заполненная строчка 23 ,55 должна автоматически измениться на 23,55. Иначе получаются ошибки при вводе.
unl0K

unl0K (статус: Посетитель), 1 декабря 2009, 19:39 [#10]:

Я заметил вас не переубедить, зачем же использовать массив компонентов, если можно обойтись одной переменной, посмотрите я вам написал пример...
--
Насчет пробела - думаю можно добавить обраротчик, который запретит ввод пробела, хотя может есть вариант по проще.
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Roma_no_off

Roma_no_off (статус: Посетитель), 1 декабря 2009, 19:42 [#11]:

Немного не в тему, но не совсем понятен смысл использования TList... У формы есть свойство components - тоже самое, что List.
unl0K

unl0K (статус: Посетитель), 1 декабря 2009, 19:56 [#12]:

"У формы есть свойство components - тоже самое, что List"
Ну вы загнули...
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Жикльор

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

Извините, я в конце не дописал end.
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
unl0K

unl0K (статус: Посетитель), 1 декабря 2009, 21:24 [#14]:

Обрезков Евгений Евгенийович, ну раз не по немаете, тогда потрудитесь объяснить, как вы собираетесь обращаться допустим к второму созданному объекту в цикле?
После того как вы создадите таким методом объекты, они можно сказать будут "парить в воздухе".
--
Автору вопроса не рекомендую использовать ваш код.
--
Код который вы написали, я уже писал, только без цикла, дак стоит ли повторять это в ответе?
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Жикльор

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

Да, я не понимаю!!! Один ты святой и магистр!!! В условии не говорилось о контроле этих полей, а говорилось о их создании (как их создать)! Очевидно, автор вопроса знает как это сделать, иначе он задал вопрос по другому!
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
unl0K

unl0K (статус: Посетитель), 1 декабря 2009, 22:34 [#16]:

"Один ты святой и магистр" - ну пусть будет так))
Если бы автор знал как это сделать, он бы вообще этого вопроса не задал.
А раз вы не понимаете, ну стоит почитать литературу на эту тему,может быть и поймете...
Раз уж на то пошол... То, что вы написали, уже было написано на мини-форуме...
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Жикльор

Жикльор (статус: 5-ый класс), 1 декабря 2009, 22:41 [#17]:

Короче, пусть рассуждает автор вопроса! Это все таки ему нужно и мы только предлагаем ему свои варианты!!!
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
Жикльор

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

И еще... Вот код, который обрабатывает нажатие пробела:

procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #32 then Key:=#0;
end;

Этот код не позволяет внести в MaskEdit пробел.
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
sergey vasilev

sergey vasilev (статус: Посетитель), 2 декабря 2009, 01:00 [#19]:

Пробел Maskedit и так не пропускает, потому что в маске стоят девятки, т.е. должны вносится только цифры, но когда в маске два места для цифр перед запятой и цифра вносится на первое место второе остается пустым, а дальше пошли десятичные знаки. В Паскале есть процедура, которая автоматически передвигает цифры к запятой,не оставляя пустых мест. Здесь пока так не получается
unl0K

unl0K (статус: Посетитель), 2 декабря 2009, 08:27 [#20]:

Ну тут все просто, перед тем как использовать полученные данные из TMaskEdit, пропустите текст через цикл и в нем удалите все пробелы...
Относись к людям так, как хотел бы, чтобы они к тебе относились!

Страницы: [1] [2] [Следующая »]

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.04 сек.