|
Вопрос # 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]
|
Жикльор (статус: 5-ый класс), 2 декабря 2009, 20:49 [#21]:
Если будешь оставлять пустым место для ввода цифры, то это вызывает исключительную ошибку. Поэтому можно было бы просто сделать обычное поле, но в обработчике на нажатие кнопок описать все ситуации. Можешь написать какие маски должны быть? При каком количестве цифр где должен стоять дефис и т.д.?
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
|
sergey vasilev (статус: Посетитель), 3 декабря 2009, 12:43 [#22]:
Текстовая маска выглядит следующим образом 999,99;1;. Если при вводе двух или одной цифры не заполняются места возле запятой, то перевод в цифру часто сбоит. Можно ли добиться автоматического управления вводом, чтобы программа передвигала цифры на нужное место, не допуская пустых мест возле запятой. Я попытался вместо пустот ввести нули (маска выглядит так 999,99;1;0 , но все равно автоматического ввода не получается, нужно внимательно контролировать положение курсора. Посоветуйте, можно ли что-то придумать. Я в Паскале видел такую программу, но к сожалению исходника у меня не было.
|
|
Жикльор (статус: 5-ый класс), 3 декабря 2009, 15:43 [#23]:
А для чего вам нужны эти маски? Можете конкретно сказать условие, или задайте лучше новый вопрос. Это этого вопроса вообще не касается. Что вы считаете, зачем и т.д.?
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
Страницы: [« Предыдущая] [1] [2]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|