Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.02.2011, 23:59
Gate007 Gate007 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 9
Репутация: 10
По умолчанию Подключение модуля

Есть некая программа. Весь код приводить не буду, вот часть:
Код:
unit Unit1;
interface

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

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    m_file: TMenuItem;
    ListBox1: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    Memo1: TMemo;
    Label3: TLabel;
    m_out: TMenuItem;
    m_save: TMenuItem;
    m_clear: TMenuItem;
    Memo2: TMemo;
    procedure m_outClick(Sender: TObject);
    procedure m_saveClick(Sender: TObject);
    procedure m_clearClick(Sender: TObject);
    procedure my_sort;
    procedure my_readfile;
    procedure my_out;
    function GetPlainText(AList : TStringList) : String;
  private
    { Private declarations }
  public
  end;
    us_struct = record // us_struct: структура данных одного участника
    sename: string; // фамилия
    name: string; // имя
    city: string; // город
    org: string; // организация
    end;
var
  Form1: TForm1;



  list: array of us_struct; // массив (структур) всех участников
  city: array of string; // массив городов

implementation

{$R *.dfm}

function TForm1.GetPlainText(AList: TStringList): String; // функция заменяет перенос строки на пробел
var
  I : Integer;
begin
  Result := AList[0]; // присваиваем переменной result значение первой строки списка
  For I := 1 To AList.Count-1 Do Result := Result + ' ' + AList[i]; // дописывем к первой строке по очереди содержимое остальных строк
end;

procedure TForm1.my_sort;
// сортировка учатников
var
  x: us_struct;
  i,j:integer;
begin
  for i:=0 to high(list)-1 do
    for j:=i+1 to high(list) do
      if list[i].sename>list[j].sename then
      begin
        x:=list[i];
        list[i]:=list[j];
        list[j]:=x;
      end;
end;
Задача: выделить процедуру my_sort в отдельный модуль (unit) и подключить его.
Пытался использовать просто uses unit2, создавал unit2, но в упор не понимаю что там должно быть написано. Если брать только объявление и описание процедуры-ругается на us_struct, что не знает что это такое. Хотя вроде как объявлена структура глобальной.
Ответить с цитированием
  #2  
Старый 17.02.2011, 00:12
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

В общем:
1. Создаём некий Unit2
2. Подключаем его (uses Windows, ....., Unit2)
3. В Unit2 копируем после implementation код процедуры.
4. В том же Unit2 копируем объявление процедуры в блок ДО implementation
5. P-R-O-F-I-T!
6. Если не профит - подключаем необходимые uses в Unit2.
7. см. п. 5.

P.S.
Возьми учебник, что ли... >> 3643447A354F44772F4344783565482F494F2F75494F507536 2B3769355334754C673D3D
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 17.02.2011, 00:12
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

В созданном модуле надо объявить процедуру как глобальную (чтоб ее можно было использовать в др. модулях).
Код:
unit Unit1;

interface

uses
  Windows, ..., Unit2;

...
procedure TForm1.Button1Click(Sender: TObject);
begin
  myproc;
end;

Теперь сам 2 модуль:
Код:
unit Unit2;

interface

procedure myproc();

implementation

procedure myproc();
begin
//...
end;

end.
Тоже самое в твоем случае. Только как-то так:
Код:
unit Unit2;

interface

procedure my_sort();

implementation

uses Unit1;

procedure my_sort;
// сортировка учатников
var
  x: us_struct;
  i,j:integer;
begin
  for i:=0 to high(list)-1 do
    for j:=i+1 to high(list) do
      if list[i].sename>list[j].sename then
      begin
        x:=list[i];
        list[i]:=list[j];
        list[j]:=x;
      end;
end;

Опять опоздал
__________________
Помогаю за Спасибо
Ответить с цитированием
  #4  
Старый 17.02.2011, 00:50
Gate007 Gate007 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 9
Репутация: 10
По умолчанию Спасибо, так гораздо лучше :)

Спасибо, почти получилось
Осталась последняя непонятка. Код модуля:
Код:
unit Unit4;

interface

procedure my_out;

implementation
Uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, Unit1;
procedure my_out;
var p,i,j,k:integer;
 s1, s2:string;
 F: Textfile;
 t: TStringList;
begin
  ListBox1.Items.Clear;
  for j:=0 to high(city) do
  begin
    ListBox1.Items.Add(city[j]);
    for i:=0 to high(list) do
    begin
      if city[j] = list[i].city then
        ListBox1.Items.Add(list[i].sename);
    end;
    ListBox1.Items.Add('');
  end;
AssignFile(f, 'file.txt');
   Append(f);
   Closefile(f);
  t:=TStringList.Create;
  t.LoadFromFile('file.txt');
  for k:=0 to (t.Count-1) do
  begin
  s2:=t.Strings[k];
  s1:=copy(s2,LastDelimiter(' ', s2),length(s2)); 
  Delete (s2,LastDelimiter(' ', s2),length(s2));
  Delete (s2,LastDelimiter(' ', s2),length(s2));
  s2:=s2+s1;
  t.Strings[k]:=s2;
  end;
  t.Sort;
  memo2.Lines.AddStrings(t);
end;
end.
Подключен к юниту1.
Ругается на [Error] Unit4.pas(17): Undeclared identifier: 'ListBox1' и далее куча подобных ошибок с листбоксом. Что не так?
Ответить с цитированием
  #5  
Старый 17.02.2011, 04:04
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Form1.ListBox1 и тд?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter