|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Подключение модуля
Есть некая программа. Весь код приводить не буду, вот часть:
Код:
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; Пытался использовать просто uses unit2, создавал unit2, но в упор не понимаю что там должно быть написано. Если брать только объявление и описание процедуры-ругается на us_struct, что не знает что это такое. Хотя вроде как объявлена структура глобальной. |
#2
|
||||
|
||||
В общем:
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
|
||||
|
||||
В созданном модуле надо объявить процедуру как глобальную (чтоб ее можно было использовать в др. модулях).
Код:
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
|
|||
|
|||
Спасибо, так гораздо лучше :)
Спасибо, почти получилось
Осталась последняя непонятка. Код модуля: Код:
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. Ругается на [Error] Unit4.pas(17): Undeclared identifier: 'ListBox1' и далее куча подобных ошибок с листбоксом. Что не так? |
#5
|
||||
|
||||
Form1.ListBox1 и тд?
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |