Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.03;
Скачать: CL | DM;

Вниз

Компонент в цикле   Найти похожие ветки 

 
Oleg1963 ©   (2009-11-11 14:05) [0]

Здравствуйте уважаемые коллеги. Я недавно практически столкнулся с Дельфи и тут возник вопрос:
В форме много кнопок, выполняющих однородные команды а также полей ввода. К примеру  
                    Bitbtn2.Visible:=False;
                    Edit2.Text:=FieldByName("NetPath").AsString.
Выполнить восемь раз.
Нельзя ли (копчиком чувствую что можно) привести указанный фрагмент
к виду:
            for N=1 to n do
                begin
                    Bitbtn[N].Visible:=False;
                    Edit[N].Text:=FieldByName("NetPath").AsString;
                end;
А то действий с гулькин хрен, а текста....
Как я потом это сено разбирать буду? -(((
Заранее благодарен.


 
Dennis I. Komarov ©   (2009-11-11 14:10) [1]

Можно и к такому: array of TAnyObject


 
Kolan ©   (2009-11-11 14:17) [2]

Если компоненты вроде Edit2 создаются не динамически, то я бы сделал загрузку в них строк руками. Другое дело, что может столько кнопок не нужно.

Если таки хочется автоматически, то см. совет Дениса.


 
Dennis I. Komarov ©   (2009-11-11 14:22) [3]


> Если компоненты вроде Edit2 создаются не динамически

О чем Вы говорите, если же нарисовано Edit2 - какой тут runtime...

З.Ы. Я просто ответил на конкретный заданный вопрос.


 
Игорь Шевченко ©   (2009-11-11 14:24) [4]

RTFM: FindComponent


 
Kolan ©   (2009-11-11 14:28) [5]

Денис, я не четко выразил мысль. Раз человеку хочется автоматом заполнять поля, то, возможно их лучше и создавать динамически.

А вот если их набор всегда один и тот же и каждое поле имеет (должно иметь в данном случае) осмысленное имя, то я за ручное заполнение.

NetPathEdit.Text:=FieldByName("NetPath").AsString.


 
Oleg1963 ©   (2009-11-11 14:56) [6]

Спасибо всем за дружеские советы!

Задача сама по себе выеденного яйца не стоит. Нужно указать восемь сетевых адресов с базами данных и скопировать их в указанный каталог.

Дифференциал кривизны прямого угла под стопочку! :-))))

Задача для первого курса ПТУ. Я на Паскаль 7.0 эту задачу за два часа нацарапаю. Другое дело, что по ходу написания я изучаю Дельфина, а за это мне платят. Просто мне хотелось добиться вида типа Строка_с_именем_компа, кнопочка, выбор пути в OpenDialog и пальцы веером.
А так... AdoConnect,ADOTABLE и DBGrid+пригоршня мелкой чепухи.

Всем СПАСИБО! Вопрос закрыт.


 
Kolan ©   (2009-11-11 15:00) [7]


> Просто мне хотелось добиться вида типа Строка_с_именем_компа,
>  кнопочка, выбор пути в OpenDialog и пальцы веером.


Не понятно что из этого не получилось.


 
Oleg1963 ©   (2009-11-11 15:09) [8]

Bitbtn2.Glyph.TransparentColor:=clGrayText;

        Edit2.Text:=FieldByName("Name").AsString;
         Edit21.Text:=FieldByName("NetPath").AsString;
        Next;
{----------------------------------------------- }
procedure TForm1.Edit21Change(Sender: TObject);
var S : String;
begin
    S:=Edit2.Text;
    ADOTable1.Locate("Name",S,[loCaseInsensitive]);
    ADOTable1.Edit;
    AdoTable1.FieldByName("NetPath").AsString:=Edit21.Text;
    ADOTable1.Post;
end;
{-----------------------------------------------------------------}
procedure TForm1.BitBtn4Click(Sender: TObject);        {Участок № 2}
begin
  OpenDialog1.FileName:= Edit21.Text;
  OpenDialog1.Filter:="Test_2|Test_2.mdb";
  if not OpenDialog1.Execute then
                                 OpenDialog1.FileName:="Test_2.mdb";
  Edit21.Text:=OpenDialog1.FileName;
end;
========================================================

И ВСЕ вышеуказанное ВОСЕМЬ РАЗ!  Ррррррррррр....


 
Kolan ©   (2009-11-11 15:19) [9]

Олег, ваше желание не делать этого 8 раз совершенно верное.

Вам нужно просто разобраться с функциями и процедурами.

Такой код:
procedure TForm1.BitBtn4Click(Sender: TObject);        {Участок № 2}
begin
 OpenDialog1.FileName:= Edit21.Text;
 OpenDialog1.Filter:="Test_2|Test_2.mdb";
 if not OpenDialog1.Execute then
                                OpenDialog1.FileName:="Test_2.mdb";
 Edit21.Text:=OpenDialog1.FileName;
end;


Нужно превратить в подобный:

funtion TForm1.GetPath(AFileName: string): string;       {Участок № 2}
begin
 OpenDialog1.FileName:= AFileName;
 OpenDialog1.Filter:="Test_2|Test_2.mdb";
 if not OpenDialog1.Execute then
   OpenDialog1.FileName:="Test_2.mdb";
 Result := OpenDialog1.FileName;
end;

procedure TForm1.BitBtn4Click(Sender: TObject);        {Участок № 2}
begin
 Edit21.Text := GetPath(Edit21.Text);
end;


Дальше сами...

Таким образом общие части будут вынесены и будут в программе только 1 раз, а конкретные параметры вы будете подставлять в нужных кнопках.


 
Oleg1963 ©   (2009-11-12 09:17) [10]

Здравствуйте Николай!
Спасибо огромное за прекрасное объяснение. Это именно то, что я искал.
Попутно еще один вопросик. Где можно найти описание подобных процедур и функций? В учебнике Дельфи 7.Подлинник(тора блин!) где-то между строк видел фразу "Подробное описание вы можете найти в описании фукций API" >:-(
Авторы сего предполагают, что я намереваюсь выводить картиночки на экран, попутно набрасывая на коленке сервер распределенных баз данных с возможностью управления космическими кораБЛЯми!
А на такую "мелочь" жалко тратить бумагу....


 
Sergey13 ©   (2009-11-12 09:40) [11]

> [0] Oleg1963 ©   (11.11.09 14:05)

А ты не перемудрил со всякими Edit-ами. Ты, я так понял, выводишь на экран что то из БД (FieldByName("NetPath").AsString). Так может стОит использовать компоненты с приставкой DB? Тот же ДБГрид например. Вывести свои 8 (или сколько там есть) адресов в грид и обработать редактирование поля через "выбор пути в OpenDialog" и вот тогда уже сделать "пальцы веером"?


 
Oleg1963 ©   (2009-11-12 09:59) [12]

DBGrid у меня подвешен на этапе разработки для контроля активности БД с сетевыми путями. Мне вообще очень нравится эта игрушка (дбгрид).

Но КАК ОНА РАБОТАЕТ????!!!!! Ведь путного описания нет! В книге говорится, что содержимое ГРИДа (то бишь строки) адресации не имеют. Но мне в это не верится.
Я вообще хотел бы вывести содержимое БД на экран в виде:

-Содержимое записи 1 (пути,бла бла бла, размер сапог и т.д)
-Пустая строчка---------------------------------------------
-Содержимое записи 2 (пути,бла бла бла)-
-Пустая строчка---------------------------------------------
Рамочки, фенечки,рюшечки и бантики вокруг (в пределах разумного конечно)
И чтобы редактировать их можно было бы как в ДБГриде. Ваще красота!

Вот только реально ли это сделать, причем малой кровью......


 
sniknik ©   (2009-11-12 10:18) [13]

> procedure TForm1.BitBtn4Click(Sender: TObject);        {Участок № 2}
> begin
>  Edit21.Text := GetPath(Edit21.Text);
> end;
логическое продолжение...
procedure TForm1.BitBtnClick(Sender: TObject);    
begin
 with TEdit(TBitBtn(Sender).Tag) do
   Text := GetPath(Text);
end;

и вешаем 1 обработчик всем батонам... (т.е. это будет единственный код на все однотипно работающие кнопки )
ну, и предваритетельная подготовка -
procedure TForm1.FormCreate(Sender: TObject);
begin
 BitBtn1.Tag:= Integer(Edit1);
 ...
 BitBtn21.Tag:= Integer(Edit21);
end;

что тоже можно было бы в цикле через поиск компонент (сократить количество написанного)... но, имхо, лишнее, и при правильном именовании компонент (значимом, не Edit1, а NetPathEdit и т.д.) будет не рабочим. не желательно закладываться на имена...


 
sniknik ©   (2009-11-12 10:19) [14]

p.s. и "пальцы веером", это уж совсем лишнее...


 
Sergey13 ©   (2009-11-12 10:19) [15]

> [12] Oleg1963 ©   (12.11.09 09:59)
> Ваще красота!

ИМХО, красота ("Рамочки, фенечки,рюшечки и бантики вокруг") - это проблема №95968678 для программы. Или вообще не проблема. Особенно на этапе изучения инструмента. С таким подходом у тебя скорее всего получится уродливый монстр - как снаружи так и изнутри. Потому, что красота - это тоже наука, ее тоже надо изучать, причем, возможно, дольше чем Делфи. А разработчики всяких гридов, помимо прочего, имели наверное представление и об эргономике и т.п.

> Ведь путного описания нет!
Какого описания тебе надо? Это средство визуализации датасета.


 
Andrewtitoff ©   (2009-11-12 10:29) [16]


> Sergey13 ©   (12.11.09 10:19) [15]
> > [12] Oleg1963 ©   (12.11.09 09:59)> Ваще красота!ИМХО,
>  красота ("Рамочки, фенечки,рюшечки и бантики вокруг") -
>  это проблема №95968678 для программы. Или вообще не проблема.
>  Особенно на этапе изучения инструмента. С таким подходом
> у тебя скорее всего получится уродливый монстр - как снаружи
> так и изнутри. Потому, что красота - это тоже наука, ее
> тоже надо изучать, причем, возможно, дольше чем Делфи. А
> разработчики всяких гридов, помимо прочего, имели наверное
> представление и об эргономике и т.п.


Это точно, помнб как одну из первых прог всю облепил текстурами, анимацией, звуками, разноцветными шрифтами, всякими кривыми формами с прозрачностями и.т.д..., запускаешь - такая красота!, все были в изумлении и писали кипятком, только когда люди начали реально работать с ней то через небольшой промежуток времени умоляли убрать это ве т.к. глаза болят, все отвлекает, ничего не понятно... =))))


 
Oleg1963 ©   (2009-11-12 10:41) [17]

Насчет красоты я абсолютно согласен. Я не имел ввиду разное украшательство продукта, задача вполне деловая. Но при этом она должна выглядеть достаточно аккуратно и эстетично. Можно конечно сделать форму с огромными кнопками "Выполнить" и "Выход", но так ведь тоже нехорошо.

(голос из угла: "так, открываю Тотал, где там эта машина черт бы ее забрал, файл, копирую.... Уф! Следующая....") :-)))


 
Kolan ©   (2009-11-12 11:20) [18]

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


 
Oleg1963 ©   (2009-11-12 11:31) [19]

Функция пользователя, ясно. Ваш совет прекрасно работает. Так что я вооружился ножницами и, высунув язык, кромсаю лишний код. Дышать стало намного легче :-)))


 
Григорьев Антон ©   (2009-11-12 12:50) [20]

http://www.delphikingdom.com/asp/answer.asp?IDAnswer=71458 - самый нижний ответ. Хотя для данного конкретного случая sniknik уже подсказал правильное решение, для общего развития всё равно полезно.



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

Текущий архив: 2010.01.03;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.015 c
15-1256942264
GDI+
2009-10-31 01:37
2010.01.03
Кстати, а почему люди до сих пор сидят на модемах?


15-1256130971
Кто б сомневался
2009-10-21 17:16
2010.01.03
РАО


1-1231767209
TStas
2009-01-12 16:33
2010.01.03
Как сделать из gif ов bmp?


2-1258016441
Иван
2009-11-12 12:00
2010.01.03
Как экспортировать ListView в Excel?


15-1250364331
Kerk
2009-08-15 23:25
2010.01.03
Попиарюсь маленько :)