if(Controls[I] ISTEdit) then
(Controls[I] ASTEdit).{Вашпараметр} := {Ваше значение};
end;
В контексте примера, Edit1, Edit2 и т.д. есть то же самое, что и Edit[1], Edit[2]. Если вы хотите иметь доступ к серии элементов управления как к элементам массива, поместите их в TList.
MyArr := TList.Create;
MyArr.Add(Edit1);
MyArr.Add(Edit2);
…
For i := 0 ToMyArr.count - 1 Do
(MyArr.items[i] AsTEdit).Enabled := False;
MyArr.Free;
procedureTForm1.FormCreate(Sender: TObject);
varI: Integer;
begin
forI := 0 toComponentCount -1 do
ifComponents[I] isTEdit then
TEdit(Components[I]).Whatever := 10;
end;
Для получения доступа используйте:
TButton(mylist.items[i]).property := sumpin;
или
TButton(mylist.items[i]).method;
Это хорошее решение для пакетной обработки компонентов или для получения доступа при линейном способе. Для решения вашей проблемы есть еще более легкое решение, которое требует предварительной работы в режиме проектирования. Установите свойство tag и получите преимущество в том, что все компоненты являются производными от TComponent и имеют это свойство.
ProcedureTMyForm.MyButtonHandler(Sender: TObject);
Begin
Case(Sender AsTComponent).Tag Of
1 : { что-то делаем }
2 : { делаем что-то еще }
.
.
End;
End;
Просто укажите в событии OnClick на MyButtonHandler для тех кнопок, в которых вы хотите использовать общий обработчик события.
Мне надо добавить много строк в TListbox или в TCombobox или в TMemo или в TRichEdit, при этом сам объект постоянно мигает, перерисовываясь. Как избавиться от этого?
Nomadicскупо отвечает:
A: BeginUpdate/EndUpdate.
Как мне создать компонент типа TField?
Наверное вы хотели создать класс, а не компонент? Класс является программируемым устройством, а не частью формы. Если вы поместили класс в модуль (скажем, myclass.pas) и вставили в вашу программу строку «uses myclass;», то воспользоваться им можно следующим образом:
typeaninstance: tMyclass;
begin
new (aninstance);
{эквивалент aninstance := tMyclass.create; }
…
{ здесь используем aninstance }
…
dispose(aninstance);
{ эквивалент aninstance.free; }
end;
Инкрементация строкового поля
Свойства text элемента управления является строкой, в свою очередь являющейся массивом символом. Вы не можете осуществить преобразование символа в строку. Тем не менее, вы можете получить доступ ко всем символам строки через их индекс.
Попробуйте это:
vars : string;
begin
s := RevField.text;
s[1] := chr(ord(s[1]) + 1);
RevField.text := s;
end;
Здесь кроются 2 проблемы:
1. Для увеличения значения вам необходимо извлекать символы из строки.
2. Хотя вы можете получить доступ к отдельным символам через выделение подстроки, данный метод не срабатывает у некоторых свойств, таких как, например, свойство TStringField Text.
Лучшим решением, по-видимому, будет написание специфической функции. Например, в случае, если revision-символ всегда является конечным символом строки, функция могла бы выглядеть следующим образом:
functionIncrementTrailingVersionLetter(Str: string): string;
begin
Str[Length(Str)] := Char(Ord(Str[Length(Str)]) + 1);
IncrementTrailingVersionLetter := Str;
end;
и использовать ее следующим образом:
withRevField doText := IncrementTrailingVersionLetter(Text);
Тема: fsStayOnTop ~не наверху~
От: Philip Kapusta 74170,3550
Почему, если присвоить свойству FormStyle значение fsStayOnTop, форма так и не остается на самом верху?
Просто добавьте application.RestoreTopMosts в обработчик события формы OnPaint. Это ошибка.
Могли бы вы рассказать об этом чуть-чуть поподробнее? Delphi где-то в неправильном месте осуществляет вызов NormalizeTopMosts?
Borland говорит что это Windows, но это случается когда StayonTop-форма НЕ является главной формой. (Некоторые английские программисты чтобы получить эту отговорку потратили несколько сотен долларов, звоня в американскую службу помощи по телефону 1-800).
Читать дальше