|
Вопрос # 3 466/ вопрос открыт / |
|
Здравствуйте, эксперты!
У меня задача программно создать на форме окно(а) типа Tmaskedit. Но я не могу добиться вывода окна нужной ширины. Где-то в настройках забита ширина окна, которую я не могу изменить, не знаю как. Простое задание новой ширины типа var.width:=40; программа игнорирует и выводит все равно окно прежней длины. Может быть это можно сделать со свойством parent, но как? Подскажите.
 |
Вопрос задал: sergey vasilev (статус: Посетитель)
Вопрос отправлен: 1 декабря 2009, 17:54
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: unl0K
Здравствуйте, sergey vasilev!
Вот на скорую руку набросал Вам пример.
Я заметил, что вы создаете массив контролов TMaskEdit, намного проще будет работать с указателями.
--
Клик по Button1 создает на форме 10 объектов TMaskEdit и добавляет указатель на этот объект в список.
В Edit1 вводим номер контрола, в Edit2 новую ширину, Клик по Button2 задает новую ширину.
Все контролы не переименовывал, чтобы было понятнее.
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, Mask;
-
- type
- TForm1 = class(TForm)
- Button1: TButton;
- Edit1: TEdit;
- Button2: TButton;
- Edit2: TEdit;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
- ME:TMaskEdit;
- i:Integer;
- List:TList;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- List:=TList.Create;
- for i:=0 to 10 do begin
- ME:=TMaskEdit.Create(Self);
- with ME do begin
- Width:=300;
- Left:=10;
- Top:=22*i+10;
- Parent:=Form1;
- end;
- List.Add(ME);
- end;
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- TMaskEdit(List[StrToInt(Edit1.Text)]).Width:=StrToInt(Edit2.Text);
- end;
- procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- for i:=0 to List.Count-1 do
- TMaskEdit(List[i]).Free;
- List.Free;
- end;
- end.
-
 |
Ответ отправил: 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 (статус: Посетитель), 1 декабря 2009, 18:01 [#2]:
autosize:=false
|
|
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 (статус: Посетитель), 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 (статус: Посетитель), 1 декабря 2009, 19:00 [#6]:
Как плохо, что нельзя редактировать свой ответ,
даже ошибки нельзя поправить...
Относись к людям так, как хотел бы, чтобы они к тебе относились!
|
|
Вадим К (статус: Академик), 1 декабря 2009, 19:03 [#7]:
Можно редактировать. если сильно захотеть. если хорошо стараться. Я могу исправить грамматические/орфографические ошибки, сделать?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
unl0K (статус: Посетитель), 1 декабря 2009, 19:04 [#8]:
"сделать?"
Если не составит труда, то сделайте пожалуйста.
--
Спасибо Вадим, хотел вам поставить +, но:
"Чтобы изменить репутацию этому пользователю, Вам нужно изменить репутацию ещё как минимум 3 пользователям."
Тоже как-то не продуманно сделано, если человек помог мне два раза, то я не могу поставить ему + 2 раза подряд.
Относись к людям так, как хотел бы, чтобы они к тебе относились!
|
|
sergey vasilev (статус: Посетитель), 1 декабря 2009, 19:31 [#9]:
спасибо, все получилось, ошибка была в последней строчке, там create не нужен.
И если можно еще один вопрос - можно ли в Tmaskedit добиться автоматического убирания пробелов при заполнении формы.
например заполненная строчка 23 ,55 должна автоматически измениться на 23,55. Иначе получаются ошибки при вводе.
|
|
unl0K (статус: Посетитель), 1 декабря 2009, 19:39 [#10]:
Я заметил вас не переубедить, зачем же использовать массив компонентов, если можно обойтись одной переменной, посмотрите я вам написал пример...
--
Насчет пробела - думаю можно добавить обраротчик, который запретит ввод пробела, хотя может есть вариант по проще.
Относись к людям так, как хотел бы, чтобы они к тебе относились!
|
|
Roma_no_off (статус: Посетитель), 1 декабря 2009, 19:42 [#11]:
Немного не в тему, но не совсем понятен смысл использования TList... У формы есть свойство components - тоже самое, что List.
|
|
unl0K (статус: Посетитель), 1 декабря 2009, 19:56 [#12]:
"У формы есть свойство components - тоже самое, что List"
Ну вы загнули...
Относись к людям так, как хотел бы, чтобы они к тебе относились!
|
|
Жикльор (статус: 5-ый класс), 1 декабря 2009, 21:14 [#13]:
Извините, я в конце не дописал end.
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
|
unl0K (статус: Посетитель), 1 декабря 2009, 21:24 [#14]:
Обрезков Евгений Евгенийович, ну раз не по немаете, тогда потрудитесь объяснить, как вы собираетесь обращаться допустим к второму созданному объекту в цикле?
После того как вы создадите таким методом объекты, они можно сказать будут "парить в воздухе".
--
Автору вопроса не рекомендую использовать ваш код.
--
Код который вы написали, я уже писал, только без цикла, дак стоит ли повторять это в ответе?
Относись к людям так, как хотел бы, чтобы они к тебе относились!
|
|
Жикльор (статус: 5-ый класс), 1 декабря 2009, 22:26 [#15]:
Да, я не понимаю!!! Один ты святой и магистр!!! В условии не говорилось о контроле этих полей, а говорилось о их создании (как их создать)! Очевидно, автор вопроса знает как это сделать, иначе он задал вопрос по другому!
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
|
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 (статус: Посетитель), 2 декабря 2009, 01:00 [#19]:
Пробел Maskedit и так не пропускает, потому что в маске стоят девятки, т.е. должны вносится только цифры, но когда в маске два места для цифр перед запятой и цифра вносится на первое место второе остается пустым, а дальше пошли десятичные знаки. В Паскале есть процедура, которая автоматически передвигает цифры к запятой,не оставляя пустых мест. Здесь пока так не получается
|
|
unl0K (статус: Посетитель), 2 декабря 2009, 08:27 [#20]:
Ну тут все просто, перед тем как использовать полученные данные из TMaskEdit, пропустите текст через цикл и в нем удалите все пробелы...
Относись к людям так, как хотел бы, чтобы они к тебе относились!
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|