![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как грамотно вынести процедуру в отдельный модуль?
Johnnnn © (2009-01-08 19:10:00)В общем, писал, писал и понял что постоянно копирую одно и тоже, есть некая процедура, которую использую во всех своих программках, для того чтобы она работала, на форме должен быть Edit, (то есть его невозможно заменить переменной, это должен быть именно эдит, неважно на какой форме он будет, то что написал до этого исправлю) дак вот вопрос! Как сделать модуль в котором содержалась бы форма, которую можно былобы вызывать из «основного» модуля и как это все потом соединять вместе?
То есть, есть вариант когда в проге уже есть форма и можно пользоваться кинутым на него эдитом, но приходится в модуль с процедурой в uses дописывать имя основного модуля, а это не выход, потому как все равно будет куча модулей с прописанными в uses разными прогами.
П.С. Объяснял старался как мог, если кто чето понял то посоветуйте что-то.
123-ий (2009-01-09 12:15:00) [1]
> Или.
надо форум переименовать в halturamaster.ru
MsGuns (2009-01-09 11:39:00) [2]>
procedure SetEditText(Edit: TEdit; Txt: string);
begin
Edit.Text := Txt;
end;
Если еще почитать про RTTI, то можно "что угодно" делать с достаточно большим семейством компонент, сделав процедуру куда универсальнее. Примеров огроменное множество в исходниках VCL
ЗЫ. Ремарка, естественно, для топикстартера :)
KilkennyCat (2009-01-09 03:18:00) [3]
> Уж по части халтуры, уверен мне нет тут равных! Или?
Или.
Johnnnn (2009-01-09 02:57:00) [4]Ладно всем ответившим и откликнувшимся спасибо! Время позднее пора спать уже.
Германн (2009-01-09 02:51:00) [5]
> Германн - у меня оправдание есть, я проги для себя делаю
> никому их не даю, имею право вообщем на халтуру если че.
> А так да конечно нада было:) Еще нада было не начинать
> курить и тогда в восьмом класе мы точно зря соседу окна
> разбили!
>
Оправдание, конечно слабое. Но если ты рад тем, что удовлетворился частному, то и бог с тобой.
P.S. Уж по части халтуры, уверен мне нет тут равных! Или?
Johnnnn (2009-01-09 02:44:00) [6]Юрий Зотов - Thanks!
Германн - у меня оправдание есть, я проги для себя делаю никому их не даю, имею право вообщем на халтуру если че. А так да конечно нада было:) Еще нада было не начинать курить и тогда в восьмом класе мы точно зря соседу окна разбили!
Германн (2009-01-09 02:31:00) [7]
> Johnnnn (09.01.09 02:20) [10]
И всё равно не верю! Надо было тот ответ "человека" понятьи тогда бы не было вопросов.
Юрий Зотов (2009-01-09 02:28:00) [8]> Johnnnn (09.01.09 02:00) [7]
Отвечу за Сергея.
procedure SetEditText(Edit: TEdit; Txt: string);
begin
Edit.Text := Txt;
end;
Смысл в том, что Edit передается в процедуру одним из параметров и внутри процедуры с этим Edit'ом можно делать что угодно. При этом абсолютно неважно, на какой форме он находится - поэтому процедура становится универсальной.
Johnnnn (2009-01-09 02:28:00) [9]О кстити ато чтото много букв и все бесполезные счас код напишу:)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, mshtml;
type
TForm1 = class(TForm)
Button1: TButton;
WebBrowser1: TWebBrowser;
Memo1: TMemo;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
doc:variant;
implementation
{$R *.dfm}
procedure pickpage(tagname:string);
var
i:integer;
begin
form1.edit2.text:=tagname;
for i:=0 to doc.all.tags(form1.Edit2.Text{tagname}).length-1 do form1.memo1.Lines.add(doc.all.tags(form1.Edit2.Text{tagname}).item(i).innertext) ;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
doc:=webbrowser1.Document as IHtmlDocument2;
pickpage('TD');
end;
end.
вот, вообщем как исходя из той ситуации что - ну очень облом все переписывать! Сделать отдельный модуль с процедурой pickpage в нем?
Johnnnn (2009-01-09 02:20:00) [10]Не верю!(с) Да и я неверил, я пока понял что без него никак (без едита) чуть монитор неразбил от злости, потом жадность победила и решил монитор нетрогать чтоб новый непокупать.
Johnnnn (2009-01-09 02:11:00) [11]Самое что смешное я уже спрашивал насчетэтого едита сдесь и человек все грамотно расписал, там через какойто массив было сделано вродибы, тогда можно было заменить все за пару часов посидеть поискать где писал, НЕТ БЛИН ПОЛЕНИЛСЯ, ну вот собственно и результат.
Германн (2009-01-09 02:10:00) [12]
> без едита работать небудет.
Не верю!
(с)
Johnnnn (2009-01-09 02:00:00) [13]Сергей М. - извините, можно немного больше какогонибудь кода для примера?
Johnnnn (2009-01-09 01:58:00) [14]doc:=webbrowser1.Document as IHtmlDocument2;
procedure pickpage(tagname:string);
begin
form1.edit2.text:=tagname;
for i:=0 to doc.all.tags(form1.Edit2.Text{tagname}).length do cheto sdelat
end;
без едита работать небудет.
sniknik (2009-01-08 23:54:00) [15]а может нужен свой компонент, наследник едита?
ты не стесняйся и вместо корявых описаний что тебе нужно (при признании что сам не знаешь) лучше напиши что делаешь, и что нужно (т.е. реально существующее, что можно не придумывать а описывать...). лучше проиллюстрировав кодом.
MsGuns (2009-01-08 22:25:00) [16]Все "повторяющиеся" процедуры (функции) унифицировать, заменив в коде обращение к внешним объектам на обращения к передаваемым параметрами ссылкам. Затем все их вынести в новый юнит, хранимый в папке общего доступа. Папку указать в окружении Delphi, а сам юнит (юниты) помещать в uses интерфейсной части рабочих модулей. В эти же юниты можно выносить объявления и реализации собственных классов, т.е. как бы расширить VCL.
И настанет всеобщее счастие :)
Сергей М. (2009-01-08 20:50:00) [17]procedure НекаяПроцедура(EditКоторыйНаходитсяГдеУгодноХотьНаЛуне: TEdit);
Медвежонок Пятачок (2009-01-08 20:06:00) [18]меняю эдиты на переменные в неограниченных количествах.
пенсионерам скидки.
Zeqfreed (2009-01-08 19:53:00) [19]Есть большая вероятность, что процедуру нужно переписать без использования эдита непосредственно. Было бы интересно узнать, что она вообще делает с ним.
На крайний случай — добавить параметр, в котором передавать тот эдит, с которым необходимо проводить манипуляции.