Форум: "Прочее";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];
ВнизМного кода Найти похожие ветки
← →
Igor23 (2008-02-15 21:07) [0]Привет всем!
Не писал раньше много кодинга, теперь пришлось написать очень много и всё в Unit1. Код в основном для обработчиков событий некоторых компонентов Form1 соотв в Unit1. Что то править в коде очень тяжело пока добирёшся до нужного места забудишь что хотел))). Пробовал создать Unit2 без формы чтобы както разделить код по юнитам и не соображу как заставить видеть Unit2 обработчик события Unit1 не допонимаю. Как всё скомпоновать разделить как надо. Кто как делает? Поделитесь знаниями и опытом.
← →
Palladin © (2008-02-15 21:11) [1]вот они... жертвы "типа ООП" программирования... если все начнут с тобой делиться и тем и тем, то бось получится текст в несколько десятков романов войны и мира(на время обеда)...
так шта...
http://delphimaster.net/view/15-1202456414/&web=1
← →
БарЛог © (2008-02-15 21:17) [2]...и нарочно не придумаешь :)
← →
Michael5 (2008-02-15 21:18) [3]
> Кто как делает? Поделитесь знаниями и опытом.
Тоже мечтаю научиться: сколько ни пытался - не получается (в отличие от Си, там все просто и удобно бьется по модулям). Вопрос насущный, я считаю. Достоин не отсылки человека в библиотеку, а примера в факе.
А мы (я, по крайней мере) будем вам очень благодарны! :)
← →
Palladin © (2008-02-15 21:22) [4]
> Вопрос насущный, я считаю. Достоин не отсылки человека
> в библиотеку, а примера в факе.
да я как бы ссылку дал... если шта... а непонятливым лучше идти вставать в очередь за метлами...
← →
Igor23 (2008-02-15 21:23) [5]а самый умный будет грузить чугуниум!!! Ребя дайте пример кода посмореть а!?
← →
Michael5 (2008-02-15 21:25) [6]
> да я как бы ссылку дал... если шта... а непонятливым лучше
> идти вставать в очередь за метлами...
Мда, малиновые штаны...
← →
Palladin © (2008-02-15 21:36) [7]удачи вам таварищи :) да покажутся вам метлы - манной небесной, избавительной от тяжкого труда мозгового! :)
← →
@!!ex © (2008-02-15 21:56) [8]у меня начальник так пишет....
один проект... тыщ на 15 строк... и все в одном юните... причем названным Unit1.pas...
и ни намека на ООП(кроме формы и компонентов)... боже, убей всех таких программистов....
Уж насколько уродский код я пишу(как тут остроумно заметили, использую паттерн Паблик Морозов. :) ), но и то ощущаю себя гуру программирования разбирая "это".
← →
easy © (2008-02-15 21:56) [9]http://dfc.com.ru/download.php?d=multiunit (4кб)
это то, о чем я думаю?..
← →
Правильный_Вася (2008-02-15 22:24) [10]тебе смотреть исходники какой-нибудь халявной опенсорцовой программы на дельфи
sourceforge.net довольно богат ими
← →
Michael5 (2008-02-15 22:24) [11]
> это то, о чем я думаю?..
У меня не получается использовать в основном модуле процедуры, которые я вынес во вспомогательный. Если можно, я попробую пояснить на примере.
Основной модуль:unit frmMainU;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TfrmMain = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
uses unit1;//здесь я объявляю дополнительный модуль юнит1, в котором размещаются мои процедуры
{$R *.dfm}
procedure TfrmMain.Button1Click(Sender: TObject);
begin
unit1.ss();//здесь я пытаюсь эти процедуры вызывать. Естественно, неправильно...
end;
end.
Код Unit1:unit Unit1;
interface
implementation
procedure ss();
begin
end;
end.
Как правильно объявить процедуру ss в юните1, юнит1 - в юните основном frmMainU, и запустить ее?
← →
Igor23 (2008-02-15 22:32) [12]
> unit1.ss();//здесь я пытаюсь эти процедуры вызывать. Естественно,
> неправильно...
тож не пойму или наоборот как в unit2: Form1.Edit1.text:=" "; - тоже не работает ((
← →
vrem_ (2008-02-15 22:37) [13]> unit1.ss()
а прросто ss() пробовал?
← →
Michael5 (2008-02-15 22:50) [14]
> а прросто ss() пробовал?
>
андекларед индифинир... Да и правильно в принципе: она ж нигде не объявлена!
← →
Циркуль (2008-02-15 22:52) [15]Код Unit1:
unit Unit1;
interface
procedure ss();
implementation
procedure ss();
begin
end;
← →
Правильный-Вася (2008-02-15 22:59) [16]если в модуль, не связаный с основным, помещать процедуры, то лучше загонять данные в процедуры параметрами, а не пытаться обратиться к свойствам формы и компонентов на ней
← →
Michael5 (2008-02-15 23:01) [17]
> procedure ss();
ОК!!! А еще вопрос: на основную форму я добавил Edit1. Как мне к нему обратиться из дополнительного модуля?unit Unit1;
interface
procedure ss();
implementation
procedure ss();
begin
<?>.edit1.text:="jsdkjfhsk";
end;
end.
← →
Michael5 (2008-02-15 23:04) [18]
> если в модуль, не связаный с основным, помещать процедуры,
> то лучше загонять данные в процедуры параметрами, а не
> пытаться обратиться к свойствам формы и компонентов на ней
Ну, это наверно справедливо вообще для процедур, не только для вынесенных в другой модуль? Или для этих особенно чревато чем-то?
← →
Игорь Шевченко © (2008-02-15 23:12) [19]
> ОК!!! А еще вопрос: на основную форму я добавил Edit1. Как
> мне к нему обратиться из дополнительного модуля?
А по хорошему никак. Да и незачем. Либо передавать ту самую форму параметром в процедуру. Но и это незачем, со своими Edit-ами форма должна разбираться сама.
← →
Michael5 (2008-02-15 23:19) [20]
> А по хорошему никак. Да и незачем. Либо передавать ту самую
> форму параметром в процедуру. Но и это незачем, со своими
> Edit-ами форма должна разбираться сама.
>
Ок, нет так нет. Я просто думал, что у них там все общее... :)
Спасибо, что помогли разобраться, мелочь, а приятно. Хоть код можно раскидать теперь!
← →
main (2008-02-16 01:04) [21]
> Michael5 (15.02.08 23:01) [17]
>
> > procedure ss();
>
> ОК!!! А еще вопрос: на основную форму я добавил Edit1. Как
> мне к нему обратиться из дополнительного модуля?
>
> unit Unit1;
>
> interface
> procedure ss();
> implementation
>
> procedure ss();
> begin
> <?>.edit1.text:="jsdkjfhsk";
> end;
>
> end.
unit Unit1;
interface
procedure ss();
implementation
uses frmMainU;
procedure ss();
begin
frmMain.edit1.text:="jsdkjfhsk";
end;
end.
P.S. Но я бы нерекомендовал!
Послушай:
> Игорь Шевченко © (15.02.08 23:12) [19]
← →
Kostafey © (2008-02-16 01:33) [22]> [0] Igor23 (15.02.08 21:07)
Мдя, попробуй понять что такое MVC.
Обработчики событий формы и должны быть зашиты
в юните ответственном за эту форму.
Какие-то сервисные функции, конечно следует вынести.
Да и боятся особого разрастания юнита не стоит:
есть инспектор объектов, дерево кода (или как оно там в Delphi называется),
красивое структурированное оформление юнита + комментарии,
но конечно всему должен быть предел.
← →
Германн © (2008-02-16 01:49) [23]Ну можно ещё вспомнить директиву компилятора $I. Это конечно в данном случае атавизм, но если приспичило, то сойдет на первый раз.
← →
KilkennyCat © (2008-02-16 02:07) [24]Странно... я уже давненько не писал многомодульное и в делфях (Си# мне сейчас интересней, а времени хватает лишь на маленькие утилитки), но помнится мне, что если средствами Делфи делать мнгоформенное приложение, то сразу все становится ясно, особенно когда среда начинат предупреждать о взаимоиспользовании. То есть, для понимания как работать с модулями, мне было достаточно грамотно (средствами Делфи) сделать проект с двумя формами.
← →
Германн © (2008-02-16 02:14) [25]
> KilkennyCat © (16.02.08 02:07) [24]
>
> Странно... я уже давненько не писал многомодульное и в делфях
> (Си# мне сейчас интересней, а времени хватает лишь на маленькие
> утилитки), но помнится мне, что если средствами Делфи делать
> мнгоформенное приложение, то сразу все становится ясно,
А автора интересовало нечто другое:
> Пробовал создать Unit2 без формы чтобы...
← →
KilkennyCat © (2008-02-16 02:18) [26]> [25] Германн © (16.02.08 02:14)
Да, тогда понятно. Различные пути - другие вопросы.
← →
Галинка (2008-02-16 23:24) [27]обычно обработка элементов осуществляется в модуле формы. В отдельный модуль выносится логика, напрямую не связанная с обработкой контролов на форме. Т.е. в случае автора, я бы сделала функцию, которая возвращает это самое "jsdkjfhsk", и присвоила бы ее Edit1.Text.
function GetTextForEdit1 () : string
begin
Result = "jsdkjfhsk";
end;
Edit1.Text = GetTextForEdit1();
Если надо подобным образом инициализировать несколько объектов, то возвращать надо массив строк (или любых соответствующих данных).
Что-то типа того.
← →
DiamondShark © (2008-02-16 23:36) [28]
> в отличие от Си, там все просто и удобно бьется по модулям
Это как в анекдоте.
Вернулся мужик из отпуска и рассказывает:
- Как только приехал в Кисловодск, сразу пошёл на море и искупался.
- Так в Кисловодске же нет моря!
- Ну, я же сначала не знал, что в Кисловодске нет моря. Пошёл, и искупался.
← →
Дмитрий Белькевич © (2008-02-21 13:34) [29]> в отличие от Си, там все просто и удобно бьется по модулям
Просто и удобно???? Нэймспейсы уже отменили?
В Делфи всё бьётся совершенно без проблем.
>В отдельный модуль выносится логика, напрямую не связанная с обработкой контролов на форме.
У меня код, составляющий костяк логики вынесен в отдельные модули и "натягивается" на уже 4 интерфейса. При этом, в зависимости от того, с каким интерфейсом приходится работать, "дёргаются" разные подключенные контролы, либо вообще ничего, если такие контролы не предусмортены. Работает без проблем. Всякое, знаете, бывает...
← →
uw © (2008-02-21 14:14) [30]Если форма сложная, то использую фреймы. Как правило, в юните фрейма завожу глобальную переменную типа frMyFrame. Инициализирую ее в конструкторе фрейма:
constructor TMyFrame(Owner: TComponent);
begin
inherited;
frMyFrame := Self;
end;
Все вызовы открытых методов и свойств фрейма делаю непосредственно из других фреймов (иногда бывает нужно).
Бизнес-логику делаю в отдельных юнитах.
← →
Skier © (2008-02-21 18:25) [31]вот это
frMyFrame := Self;
зачем ?
можно подробнее ?
← →
Черный Шаман (2008-02-21 19:13) [32]
> Michael5 (15.02.08 21:25) [6]
>
>
> > да я как бы ссылку дал... если шта... а непонятливым лучше
> > идти вставать в очередь за метлами...
> Мда, малиновые штаны...
Почитай исходники VCL, лучший пример.
← →
uw © (2008-02-22 00:43) [33]Skier © (21.02.08 18:25) [31]
можно подробнее ?
Поподробнее так:type
TfrMyFrame = class(TFrame)
...
constructor Create(AOwner: TComponent); override;
end;
...
var
frMyFrame: TfrMyFrame;
implementation
constructor TfrMyFrame.Create(AOwner: TComponent);
begin
inherited;
frMyFrame := Self;
end;
А на вопрос "зачем" примерно так: чтобы ссылка на экземпляр фрейма создавалась автоматически в самом юните и была видна из других юнитов.
← →
Ega23 © (2008-02-22 00:57) [34]
> в отличие от Си, там все просто и удобно бьется по модулям
И эти люди ещё такое говорят...
← →
uw © (2008-02-22 01:42) [35]Ega23 © (22.02.08 00:57) [34]
И эти люди ещё такое говорят...
В С и в самом деле все просто разносится по модулям, если не допускать циклических инклудов в заголовочных файлах. Человек, который это написал, просто не в курсе, что и в Delphi все так же просто, если не допускать циклических ссылок на юниты в разделах interface :-)
← →
Германн © (2008-02-22 02:11) [36]
> Ega23 © (22.02.08 00:57) [34]
>
>
> > в отличие от Си, там все просто и удобно бьется по модулям
>
>
> И эти люди ещё такое говорят...
>
В классике это - " И эти люди запрещают мне ковырять в носу"! :)
← →
Skier © (2008-02-22 10:59) [37]>uw © (22.02.08 00:43) [33]
Это не синглтон?
← →
Игорь Шевченко © (2008-02-22 11:38) [38]
> А на вопрос "зачем" примерно так: чтобы ссылка на экземпляр
> фрейма создавалась автоматически в самом юните и была видна
> из других юнитов.
Я сильно извиняюсь, а нафига ? А почему бы не создать ссылки на Edit"ы, Label"ы и т.д.
← →
uw © (2008-02-22 13:33) [39]Skier © (22.02.08 10:59) [37]
Это не синглтон?
Нет. Если я положу на форму два одинаковых фрейма, то вторая инициализация забьет первую (в глобальной переменной). Но если унаследоваться от первого, то все будет в порядке.
Игорь Шевченко © (22.02.08 11:38) [38]
Я сильно извиняюсь, а нафига ? А почему бы не создать ссылки на Edit"ы, Label"ы и т.д.
Никто не мешает.
← →
Дмитрий С (2008-02-22 13:37) [40]А как насчет простого {$i inline.pas} ?
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.006 c