Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2008, 15:08   #1
jungle
Пользователь
 
Аватар для jungle
 
Регистрация: 22.11.2008
Сообщений: 65
По умолчанию одинаковый код в процедурах

Допустим, что следующий одинаковый код присутствует в двадцати процедурах:

Код:
Edit1.Text:='Привет!';
. . . . . . . . . . . ;
Edit15.Text:='Привет!'
Видимо, нужно написать отдельную процедуру, а потом вызвать ее в каждой из двадцати процедур? И как это сделать?

Код:
Procedure PRIVET;
begin
. . . 
end;
В учебниках этого нет, в интернете тоже нигде нет - ищу целый день. Чувствую, что это просто, но просто не знаю как! Кучу форумов просмотрел, DRKB, диск у меня есть с учебниками по Delphi. Вот нигде подробно не написано как самому написать процедуру и вызвать. Помогите!

Последний раз редактировалось jungle; 22.11.2008 в 15:34.
jungle вне форума Ответить с цитированием
Старый 22.11.2008, 15:57   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

выбирай
1вариант
function privet: string;
begin
result:='ПРИВЕТВСЕМ';
end;

edit1.text:=privet;

2 вариант( пожалуй оптимальный)
const privet='ПРИВЕТ ОТ МАРТЫШКи';

edit15.text:=privet;

3 вариант
procedure privet(edit: TEdit);
begin
edit.Text:='ВСЕМ ПРИВЕТ';
end;

privet(edit7);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 22.11.2008, 17:28   #3
jungle
Пользователь
 
Аватар для jungle
 
Регистрация: 22.11.2008
Сообщений: 65
По умолчанию

Большое спасибо, все получилось!

Код:
procedure Samp(
  AMan1, BMan1, CMan1, DMan1, EMan1, FMan1, GMan1, HMan1, IMan1,
  AMan2, BMan2, CMan2, DMan2, EMan2, FMan2, GMan2, HMan2, IMan2,
  AMan3, BMan3, CMan3, DMan3, EMan3, FMan3, GMan3, HMan3, IMan3,
  AMan4, BMan4, CMan4, DMan4, EMan4, FMan4, GMan4, HMan4, IMan4,
  AMan5, BMan5, CMan5, DMan5, EMan5, FMan5, GMan5, HMan5, IMan5,
  AMan6, BMan6, CMan6, DMan6, EMan6, FMan6, GMan6, HMan6, IMan6,
  Man1, Man2, Man3, Man4, Man5, Man6,
  ANBL, BNBL, CNBL, DNBL, ENBL, FNBL, GNBL, HNBL, INBL,
  AUO, BUO, CUO, DUO, EUO, FUO, GUO, HUO, IUO,
  NBL, UO, Renn
 : TEdit);
var
. . . . . . . . . . .
begin	
  if Length(AMan1.Text)=0 then am1:=0 else am1:= StrToFloat(AMan1.Text);
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
Вызов процедуры:

Код:
Samp(
  AMan1, BMan1, CMan1, DMan1, EMan1, FMan1, GMan1, HMan1, IMan1,
  AMan2, BMan2, CMan2, DMan2, EMan2, FMan2, GMan2, HMan2, IMan2,
  AMan3, BMan3, CMan3, DMan3, EMan3, FMan3, GMan3, HMan3, IMan3,
  AMan4, BMan4, CMan4, DMan4, EMan4, FMan4, GMan4, HMan4, IMan4,
  AMan5, BMan5, CMan5, DMan5, EMan5, FMan5, GMan5, HMan5, IMan5,
  AMan6, BMan6, CMan6, DMan6, EMan6, FMan6, GMan6, HMan6, IMan6,
  Man1, Man2, Man3, Man4, Man5, Man6,
  ANBL, BNBL, CNBL, DNBL, ENBL, FNBL, GNBL, HNBL, INBL,
  AUO, BUO, CUO, DUO, EUO, FUO, GUO, HUO, IUO,
  NBL, UO, Renn);
По-любому еще куча народу будет такую инфу искать!!!

Последний раз редактировалось jungle; 22.11.2008 в 17:33.
jungle вне форума Ответить с цитированием
Старый 22.11.2008, 19:21   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Все процедуры (вернее, одна общая для всех) имеют вид
procedure TForm1.Privet(Sender: TObject);
begin
(Sender as TEdit).Text:='Привет!';
end;

Передаете в качестве параметра нужный эдит и все...
mihali4 вне форума Ответить с цитированием
Старый 23.11.2008, 08:36   #5
jungle
Пользователь
 
Аватар для jungle
 
Регистрация: 22.11.2008
Сообщений: 65
По умолчанию

Eсли так, то получится:
Код:
procedure TForm1.Privet(Sender: TObject);
begin
edit1.Text:='ВСЕМ ПРИВЕТ';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
privet(edit1);
end;
А в моем случае так не выйдет.
jungle вне форума Ответить с цитированием
Старый 26.11.2008, 16:01   #6
jungle
Пользователь
 
Аватар для jungle
 
Регистрация: 22.11.2008
Сообщений: 65
По умолчанию

Если кому потом надо будет, вот та же самая процедура вынесенная в DLL:

Код:
library MyDLL;

uses
  StdCtrls;

{$R *.RES}

procedure privet (Edit1: TEdit); stdcall
begin
  edit1.Text:='ВСЕМ ПРИВЕТ'
end;

exports 
  privet;  // по этому имени будем вызывать процедуру

begin
end.
Модуль самой проги:

Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

procedure privet (edit1: TEdit); stdcall; external 'MyDLL.dll';

implementation

{$R *.dfm}

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

end.

Последний раз редактировалось jungle; 26.11.2008 в 17:09.
jungle вне форума Ответить с цитированием
Старый 26.11.2008, 17:08   #7
jungle
Пользователь
 
Аватар для jungle
 
Регистрация: 22.11.2008
Сообщений: 65
По умолчанию

А кто знает, как загрузить DLL динамически? Ниже пишу код, который компилируется, но прога не работает, и непонятно почему.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var 
  DLLHandle: THandle;
  privet: procedure(Edit1: TEdit);
begin
  DLLHandle:= loadLibrary('MyDLL.dll');
  @privet:= getProcAddress(DLLHandle, 'privet');
  privet(edit1)
end;
jungle вне форума Ответить с цитированием
Старый 26.11.2008, 22:45   #8
jungle
Пользователь
 
Аватар для jungle
 
Регистрация: 22.11.2008
Сообщений: 65
По умолчанию

А теперь получилось...

Плагин:
Код:
Library MyDLL;

uses
  StdCtrls;

{$R *.RES}

procedure Privet(Edit1: TEdit);
begin
  Edit1.Text:='ВСЕМ ПРИВЕТ!!!'
end;

exports
  Privet;

begin
end.
Прога:

Код:
unit DLLUnit;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var 
  DLLHandle: THandle;
  Privet: procedure(Edit1: TEdit);
begin
  DLLHandle:= loadLibrary('MyDLL.dll');
  @Privet:= getProcAddress(DLLHandle, 'Privet');
  Privet(Edit1)
end;

end.
Я застрелюсь.
jungle вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Код на C++ Иллидан Общие вопросы Delphi 1 08.10.2008 14:02
MySQL - рекурсия в хранимых процедурах Банзай SQL, базы данных 0 12.08.2008 19:04
Как правильно использовать переменные в процедурах nikolai_P Microsoft Office Excel 22 15.05.2008 13:15
Код Html prizrak1390 Общие вопросы Delphi 4 13.04.2008 21:15
Материал о процедурах Jondeer Помощь студентам 18 04.12.2007 21:22