Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Вниз

Вопрос относительно объектов   Найти похожие ветки 

 
Drone ©   (2008-08-23 16:41) [0]

Мне хотелось бы чтоб при нажатии на кнопку все обекты Edit, находящиеся на форме сдвинулись на 10 позиций влево и на 10 позиций вниз. То есть если я бы добавил еще Edit-ов на форму то мне не пришлось бы менять код. Как-бы процедура которая определяет если объект есть Edit то его нужно сдвинуть.

Спасибо большое
Drone


 
Германн ©   (2008-08-23 16:52) [1]

for i:=0 to ControlCount-1 do
 if Controls[i] is TEdit then ...


 
Vayrus   (2008-08-23 16:55) [2]

procedure TForm1.Button1Click(Sender: TObject);
var
 I: Integer;
begin
 for I := 0 to Form1.ComponentCount - 1 do
 begin
   if (Form1.Components[I] is TEdit) then
   begin
     (Form1.Components[I] as TEdit).Left := (Form1.Components[I] as TEdit).Left - 10;
     (Form1.Components[I] as TEdit).Top := (Form1.Components[I] as TEdit).Top + 10;
   end
 end;
end;


 
Drone ©   (2008-08-23 16:56) [3]

Спасибо большое Германн!!!. Это то что мне нужно!


 
Leonid Troyanovsky ©   (2008-08-23 16:57) [4]


> Drone ©   (23.08.08 16:41)  

> Мне хотелось бы чтоб при нажатии на кнопку все обекты Edit,

А использовать TStringGrid в голову не приходило?

--
Regards, LVT.


 
Drone ©   (2008-08-23 16:57) [5]

Спасибо и Вам Vayrus за более полный ответ!!!


 
Leonid Troyanovsky ©   (2008-08-23 17:02) [6]


> Vayrus   (23.08.08 16:55) [2]

> procedure TForm1.Button1Click(Sender: TObject);

>  for I := 0 to Form1.ComponentCount - 1 do

Form1 - в печь.

--
Regards, LVT.


 
Drone ©   (2008-08-23 17:03) [7]

^^ А зачем мне StringGrid?!

И пожалуйста если можно разъясните разницу между controls и components

Заранее благодарен


 
DVM ©   (2008-08-23 17:06) [8]


> И пожалуйста если можно разъясните разницу между controls
> и components

не все что компонент - это контрол

TControl = class(TComponent)


 
Германн ©   (2008-08-23 17:06) [9]


> И пожалуйста если можно разъясните разницу между controls
> и components

Каждый control есть component, но не каждый component есть control. Это если коротко.


 
Vayrus   (2008-08-23 17:07) [10]

Leonid Troyanovsky
> Form1 - в печь.


:-)


 
Leonid Troyanovsky ©   (2008-08-23 17:10) [11]


> Drone ©   (23.08.08 17:03) [7]

> ^^ А зачем мне StringGrid?!

Например, для показа и редактирования текстовых данных.
Один контрол удобней десяти.


> И пожалуйста если можно разъясните разницу между controls
> и components

А что в хелпе непонятно?

--
Regards, LVT.


 
Drone ©   (2008-08-23 17:15) [12]

@ DVM, Германн спасибо большое теперь я понял.

@ Leonid Troyanovsky мне скорее нужен был общий случай для управления объектами. Edit скорее был как пример, но спасибо за совет я запомню на будущее.

В help честно говоря не очень было понятно


 
Leonid Troyanovsky ©   (2008-08-23 17:15) [13]


> Германн ©   (23.08.08 17:06) [9]

> Это если коротко.

Я б добавил, что в x.Controls те, кому назначен Parent = x,
а в x.Components - у кого Owner = x;

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2008-08-23 17:27) [14]

> Drone  (23.08.2008 16:57:05)  [5]

и неверный ответ.


 
Anatoly Podgoretsky ©   (2008-08-23 17:29) [15]

> DVM  (23.08.2008 17:06:08)  [8]

Не все что находится в контейнере Components находится в контейнере Controls и vice versa


 
Ega23 ©   (2008-08-23 17:55) [16]

procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
for I := 0 to Form1.ComponentCount - 1 do
begin
  if (Form1.Components[I] is TEdit) then
  begin
    (Form1.Components[I] as TEdit).Left := (Form1.Components[I] as TEdit).Left - 10;
    (Form1.Components[I] as TEdit).Top := (Form1.Components[I] as TEdit).Top + 10;
  end
end;
end;


Ну про Form1 фтопку - уже сказали.
Ещё не мешает as убрать, достаточно TEdit(Components[I])


 
Германн ©   (2008-08-23 18:05) [17]


> Ega23 ©   (23.08.08 17:55) [16]

В связи с
> То есть если я бы добавил еще Edit-ов на форму
стоит обратить внимание на дополнение

> Leonid Troyanovsky ©   (23.08.08 17:15) [13]


 
Anatoly Podgoretsky ©   (2008-08-23 18:18) [18]

> Ega23  (23.08.2008 17:55:16)  [16]

Controls[]


 
Vayrus   (2008-08-23 18:24) [19]

procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
for I := 0 to ControlCount - 1 do
begin
 if (Controls[I] is TEdit) then
 begin
   TEdit(Controls[I]).Left := TEdit(Controls[I]).Left - 10;
   TEdit(Controls[I]).Top := TEdit(Controls[I]).Top + 10;
 end
end;
end;


 
Drone ©   (2008-08-23 18:32) [20]

Да я посмотрел свойства/методы components и controls различаются. Спасибо всем огромное за ваши ответы. Просто замечательные люди!

Окончательно я получил вот такой код:

procedure TForm1.Button1Click(Sender:TObject);
var i:Integer;
begin
for i:=0 to ControlCount-1 do
if Controls[I] is TEdit then
begin
TEdit(Controls[I]).Left:= TEdit(Controls[I]).Left-10;
TEdit(Controls[I]).Top:= TEdit(Controls[I]).Top+10 end end;


убрал пару скобок и ненужный begin с end-ом после оператора for do.

У меня возник еще вопрос. Когда я использовал ControlCount в Unit (хотел создать модуль) выдает ошибку что ControlCount незвестен. Что делать?


 
Тын-Дын ©   (2008-08-23 18:47) [21]


> убрал пару скобок и ненужный begin с end-ом после оператора
> for do.


В результате превратил код в нечитабельный.

procedure TForm1.Button1Click(Sender:TObject);
var
 i: Integer;
begin
  for i:=0 to ControlCount-1 do
  begin
    if Controls[I] is TEdit then
    begin
      TEdit(Controls[I]).Left := TEdit(Controls[I]).Left-10;
      TEdit(Controls[I]).Top:= TEdit(Controls[I]).Top+10;
    end;
  end;
end;


 
Германн ©   (2008-08-23 18:52) [22]


> У меня возник еще вопрос. Когда я использовал ControlCount
> в Unit (хотел создать модуль) выдает ошибку что ControlCount
> незвестен.

А чьё свойство ControlCount? Это ты прочитал в справке?


 
Drone ©   (2008-08-23 18:56) [23]

Ну к примеру я хочу чтобы была готовая процедура  по премещению эдитов.
Тоесть создать модуль с готовой процедурой. Подключая этот модуль к другим приложениям не пришлось бы писать снова есь код а просто вызвать эту процедуру из модуля. Это не сколько для определенной цели сколько для практики. Я хочу научиться как работать с модулями, процедурами, компонентами и т.д.

Спасибо


 
{RASkov} ©   (2008-08-23 19:01) [24]

> [20] Drone ©   (23.08.08 18:32)
> У меня возник еще вопрос. Когда я использовал ControlCount
> в Unit (хотел создать модуль) выдает ошибку что ControlCount
> незвестен. Что делать?

Например передавай в процедуру, где будешь использовать ControlCount объект, чьи контролы будешь перебирать....
Пример:

procedure ShiftAllControls(CtrlParent: TControl; X, Y: Integer);
var i: Integer;
begin
 for i:=0 to CtrlParent.ControlCount-1 do begin
  Controls[i].Left:=Controls[i].Left+X;
  Controls[i].Top:=Controls[i].Top+Y;
 end;
end;

Можно переделать и для конкретнного типа контролов, т.е. не все контролы сдвигать, а например Эдиты.... переделать не сложно...


 
Drone ©   (2008-08-23 19:03) [25]

Спасибо большое!


 
{RASkov} ©   (2008-08-23 19:08) [26]

>    if Controls[I] is TEdit then
>    begin
>      TEdit(Controls[I]).Left := TEdit(Controls[I]).Left-10;
>      TEdit(Controls[I]).Top:= TEdit(Controls[I]).Top+10;

Кстати, приведение тоже не обязательно, достаточно только проверки....
Т.е.
   if Controls[I] is TEdit then begin
     Controls[I].Left:=Controls[I].Left-10;
     Controls[I].Top:=Controls[I].Top+10;
.......
Но это именно в этом и подобных случаях.... где свойства, к которым обращаемся, "общие" т.е. в предке...


 
Германн ©   (2008-08-23 19:33) [27]


> {RASkov} ©   (23.08.08 19:01) [24]

Все равно будет ошибка :(


 
{RASkov} ©   (2008-08-23 22:09) [28]

> [27] Германн ©   (23.08.08 19:33)

Точно. Моя вина... Тогда так:
unit Unit2;
interface
uses Controls;

procedure ShiftControls(CtrlParent: TWinControl; X, Y: Integer); overload;
procedure ShiftControls(CtrlParent: TWinControl; ShftCtrls: TControlClass; X, Y: Integer); overload;

implementation

procedure ShiftControls(CtrlParent: TWinControl; X, Y: Integer);
var i: Integer;
begin
with CtrlParent do
 for i:=0 to ControlCount-1 do begin
  Controls[i].Left:=Controls[i].Left+X;
  Controls[i].Top:=Controls[i].Top+Y;
 end;
end;

procedure ShiftControls(CtrlParent: TWinControl; ShftCtrls: TControlClass; X, Y: Integer);
var i: Integer;
begin
with CtrlParent do
 for i:=0 to ControlCount-1 do
  if Controls[i] is ShftCtrls then begin
   Controls[i].Left:=Controls[i].Left+X;
   Controls[i].Top:=Controls[i].Top+Y;
  end;
end;

end.


Вызовы из метода формы, например:
ShiftControls(Self, 15, -15);
ShiftControls(Self, TEdit, -15, 15);

Теперь должно "прокатить" ...компоненты :)


 
Drone ©   (2008-08-24 18:26) [29]

{RASkov} Спасибо огромное. Это сработало отлично!!!

unit Unit2;

interface
uses Controls, StdCtrls;
procedure ShiftControls(CtrlParent:TWinControl; X:Integer); overload;

implementation

procedure ShiftControls(CtrlParent:TWinControl; X:Integer);
var i:Integer;
begin
with CtrlParent do
for i:=0 to ControlCount-1 do
if Controls[i] is Tedit then
Controls[i].Left:=Controls[i].Left+X end; end.


Таким образом вызывая процедуру ShiftControls с соответствующими ей параметрами например ShiftControls(Self,15) эдиты будут сдвигаться влево на 15 в основном модуле посредством этого вспомогательного модуля.

Я немного упростил код, но он работает превосходно и без ошибок. Спасибо еще раз.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.014 c
15-1218713820
cyborg
2008-08-14 15:37
2008.10.05
Алгоритм Ахо-Карасик


1-1199531227
ras122
2008-01-05 14:07
2008.10.05
помогите с работой с мышкой, пожалуйста


2-1219923158
Demo_nik
2008-08-28 15:32
2008.10.05
текстовый файл и Memo поле


1-1199266277
Виктор007
2008-01-02 12:31
2008.10.05
Загрузка flash из памяти а не с диска


2-1219298365
Matveih1
2008-08-21 09:59
2008.10.05
Как Item в ActionList сделать не доступной?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский