Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Вниз

Разделение программы на модули   Найти похожие ветки 

 
DelPHist ©   (2004-06-15 00:18) [0]

Возникла такая проблема: программа должна находиться в одном окне (т.е. форма у неё - одна), но вот реализация обработчиков всех компонентов занимает очень уж много места - неудобно (всё, что можно было сделать в другом модуле, я сделал). Нельзя ли объявление какого-либл метода/обработчика и т.д. разместить в главном модуле, а его реализацию - в другом?


 
Fay ©   (2004-06-15 00:21) [1]

можно


 
DelPHist ©   (2004-06-16 00:37) [2]

Спасибо за толковый ответ. А если серьёзно, то как?


 
DrPass ©   (2004-06-16 01:19) [3]

Разбей модуль на несколько файлов. Аналог сишного #include выглядит так:
{$i my_realization.inc}


 
Ozone ©   (2004-06-16 05:18) [4]

New->Unit


 
DelPHist ©   (2004-06-17 00:20) [5]

Нет, вы не поняли - я не такой тормоз, каким, наверное, кажусь.
Вы сами-то пробовали, скажем, обработчик нажатия кнопки вынести в другой модуль (при этом этот обработчик ещё пол-формы изменяет). Он ведь поля класса из другого Unit не увидит :(


 
Andy BitOff ©   (2004-06-17 01:01) [6]

Помоему это ты не понял.

DrPass ©   (16.06.04 01:19) [3]

Это как раз то, что тебе надо. Надеюсь понятно, что с $i можно использовать любое имя нужного тебе файла.


 
Германн ©   (2004-06-17 03:09) [7]

И кстати
2 DelPHist ©   (17.06.04 00:20) [5]
> Он ведь поля класса из другого Unit не увидит :(

А это - смотря какие!


 
PVOzerski ©   (2004-06-17 12:27) [8]

IMHO, разбиение по модулям не слишком много удобств добавит. Так, в design-time назначить обработчик из другого модуля уже не выйдет. Вынести реализацию методов в include-файлами - мысль занятная (и работает, надо сказать), но уж больно неудобно в design-time "кликом" новые обработчики делать: стирать, переписывать (вставлять из буфера) в другом файле... И как-то нетрадиционно, что ли.

Вот примерчик с юнитами (работает в D3):

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation
uses
unit2;
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Button1.OnClick:=FakeForm.myHandler;
end;

end.

unit Unit2;

interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
tFakeForm=class(TForm)
public
 procedure MyHandler(AOwner:tObject);
end;
var
FakeForm:tFakeForm;
implementation
procedure tFakeForm.MyHandler(AOwner:tObject);
begin
 ShowMessage("Hello!");
end;
initialization
FakeForm:=tFakeForm.CreateNew(nil);
end.

program Project1;

uses
 Forms,
 Unit1 in "Unit1.pas" {Form1},
 Unit2 in "d:\pas\Borland\Delphi 3\Unit2.pas";

{$R *.RES}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

object Form1: TForm1
 Left = 200
 Top = 108
 Width = 544
 Height = 375
 Caption = "Form1"
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OnCreate = FormCreate
 PixelsPerInch = 96
 TextHeight = 13
 object Button1: TButton
   Left = 208
   Top = 112
   Width = 75
   Height = 25
   Caption = "Button1"
   TabOrder = 0
 end
end


 
Sandman25 ©   (2004-06-17 12:35) [9]

>реализация обработчиков всех компонентов занимает очень уж много места

Скорее всего, идет большая обработка данных. В таком случае следует вынести всю обработку в отдельную процедуру.

типа

Button1Click
begin
 Edit1.Text := GetAnalyzeResults(Edit2.Text);
end;



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

Форум: "Основная";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.031 c
1-1087399722
snake1977
2004-06-16 19:28
2004.07.04
Поиск по документам Word


1-1087456832
Virus
2004-06-17 11:20
2004.07.04
Скрытие окошка копирования


1-1087889155
Chery
2004-06-22 11:25
2004.07.04
Как узнать окончание файла?


8-1082345316
CyberStorm
2004-04-19 07:28
2004.07.04
Определение принадлежности точки к кривой Безье


1-1087385219
Gemini
2004-06-16 15:26
2004.07.04
Имееться DLL написанная неизвестно на чем. Можно ли узнать





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