Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.007 c
2-1205082854
New_09
2008-03-09 20:14
2008.04.06
Как выполнить одно действие над одинаковыми компонентами?


3-1195200086
opoloXAI
2007-11-16 11:01
2008.04.06
Microsoft.Jet.OLEDB.4.0 : ошибка в строке "Sum()"


11-1186587889
BMouradov
2007-08-08 19:44
2008.04.06
PBitmap: запись и считывание из потока


15-1203707949
easy
2008-02-22 22:19
2008.04.06
В чате роботы


15-1203539159
Petr V. Abramov
2008-02-20 23:25
2008.04.06
так рождаются легенды...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский