Форум: "Начинающим";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];
ВнизКомпонент в цикле Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.006 c