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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2011, 23:57   #1
Mushtandoit
Новичок
Джуниор
 
Регистрация: 01.06.2011
Сообщений: 5
По умолчанию Перенос юнита в делфи в другой проект

Здравствуйте, задача была такая. Сделать блок управления несколькими процессами. Были даны несколько программ, которые и нужно было связать блоком управления. Так вот при переносе (тупо копировании с изменением Unit1 и Form1 на Unit1 и Form1). Выскакивает ошибка.

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 0047ECE9' in module 'Project1.exe'. Read of address 00000000'. Process stopped. Use Step or Run to continue.

Сама по себе отдельно эта прога работает без ошибок. Только вставляю пятым юнитом в новый проект, как выскакивает ошибка. Помогите пожалуйста советом.
Mushtandoit вне форума Ответить с цитированием
Старый 01.06.2011, 23:59   #2
Mushtandoit
Новичок
Джуниор
 
Регистрация: 01.06.2011
Сообщений: 5
По умолчанию

Сам юнит Вот
Код:
unit Unit5;

interface

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

type
  TForm5 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Label3: TLabel;
        procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    Procedure OnClickButton( Sender : TObject );
    procedure FormCreate(Sender: TObject);
    procedure Button8Click(Sender: TObject);
      private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  LE:TLabeledEdit;
  Form5: TForm5;
  stack: TStringList;
  stack2: TStringList;
  OPNrez, izOPNrez: string;
  ind, lei, flag: integer;
  f:array[1..32000]of integer;
  procedure sozdLE(s:string);
implementation
{$R *.dfm}
function perem(s:string):integer;
var  i:integer;
comp: tcomponent;
begin
perem:=0;
for i:=1 to lei-1 do
begin
  comp:= form5.findcomponent('le'+inttostr(i)) as tlabelededit;
  if tlabelededit(comp).EditLabel.Caption=s then perem:=strtoint(tlabelededit(comp).Text);
 // if strtoint(tlabelededit(comp).Text)=0 then perem:=f[ind];
end;
end;

procedure sozdLE(s:string);
var i:integer;
begin
LE:=TLabeledEdit.Create(form5);
with LE do
begin
  Parent:=Form5;
  Top:=form5.button1.Top+lei*30; //i*30+50;
  Left:=form5.Width-140; //40+420;
  Visible:=true;
  EditLabel.Caption:=s;
  LabelPosition:=lpLeft;
  width:=50;
  try
    Name:=Format('le%d',[lei]);
  except
 //   Continue;
  end;
  text:='';
end;
inc(lei);
end;
function prior(s:string):integer;
begin
  if s='not' then prior:=6 else
  if s='and' then prior:=5 else
  if s='or' then prior:=4 else
  if s='xor' then prior:=3 else
 // if s=')' then prior:=2 else
  if s='(' then prior:=1 else
  prior:=0;
end;

function OPN(s:string):string;
var i,k: integer;
    m: array[1..255] of string;
    rez:string;
begin
k:=1;
if s[1]=' ' then delete(s,1,1);
for i:=1 to length(s) do
if (s[i]=' ')and(s[i+1]=' ')then delete(s,i,1);

for i:=1 to length(s) do
if s[i]<>' ' then m[k]:=m[k]+s[i]
else inc(k);


for i:=1 to k do begin
   
  if (m[i]<>'and')and(m[i]<>'or')and(m[i]<>'xor')and(m[i]<>'not')and(m[i]<>'(')and(m[i]<>')') then rez:=rez+m[i]+' '

  else begin
   
    if m[i]=')' then
    begin
      while (stack.Count>0)and(stack[stack.Count-1]<>'(') do
      begin
        rez:=rez+stack[stack.Count-1]+' ';
        stack.Delete(stack.Count-1);
      end;
      stack.Delete(stack.Count-1);
    end
    else begin
      if m[i]='(' then stack.Add(m[i])
      else begin
        while (stack.Count>0)and(prior(stack[stack.Count-1])>=prior(m[i])) do
        begin
          rez:=rez+stack[stack.Count-1]+' ';
          stack.Delete(stack.Count-1);
        end;
        if (stack.Count<=0)or(prior(stack[stack.Count-1])<prior(m[i])) then
        stack.Add(m[i]);
      end;
    end;
  end;
end;

while stack.Count>=1 do
begin
  rez:=rez+stack[stack.Count-1]+' ';
  stack.Delete(stack.Count-1);
end;
OPN:=rez;
stack.Clear;
end;

procedure izOPN(s:string);
var i,k,y1p,y2p: integer;
    m: array[1..255] of string;
    ident, y1, y2:string;
begin

k:=1;

for i:=1 to length(s) do
if (s[i]=' ')and(s[i+1]=' ')then delete(s,i,1);

for i:=1 to length(s) do
if s[i]<>' ' then m[k]:=m[k]+s[i]
else inc(k);


ind:=1;
for i:=1 to k do begin
  if (m[i]<>'and')and(m[i]<>'or')and(m[i]<>'xor')and(m[i]<>'not') then
  stack2.Add(m[i])
  else begin
    if m[i]='and' then
    begin
      y2:=stack2[stack2.Count-1];
      stack2.Delete(stack2.Count-1);
      y1:=stack2[stack2.Count-1];
      stack2.Delete(stack2.Count-1);
      ident:='F'+inttostr(ind);
      stack2.Add(ident);
      form5.label3.caption:=form5.label3.caption+ident+' = '+y1+' '+m[i]+' '+y2;
      if copy(y1,1,1)='F' then y1p:=f[strtoint(copy(y1,2,1))]
      else y1p:=perem(y1);
      if copy(y2,1,1)='F' then y2p:=f[strtoint(copy(y2,2,1))]
      else y2p:=perem(y2);
      f[ind]:=y1p and y2p;
      form5.label3.caption:=form5.label3.caption+' = '+inttostr(y1p)+' '+m[i]+' '+inttostr(y2p)+' = '+inttostr(y1p and y2p)+#13;
      inc(ind);
    end
Mushtandoit вне форума Ответить с цитированием
Старый 02.06.2011, 00:00   #3
Mushtandoit
Новичок
Джуниор
 
Регистрация: 01.06.2011
Сообщений: 5
По умолчанию

Продолжение
Код:
else
    if m[i]='or' then
    begin
      y2:=stack2[stack2.Count-1];
      stack2.Delete(stack2.Count-1);
      y1:=stack2[stack2.Count-1];
      stack2.Delete(stack2.Count-1);
      ident:='F'+inttostr(ind);
      stack2.Add(ident);
      form5.label3.caption:=form5.label3.caption+ident+' = '+y1+' '+m[i]+' '+y2;
      if copy(y1,1,1)='F' then y1p:=f[strtoint(copy(y1,2,1))]
      else y1p:=perem(y1);
      if copy(y2,1,1)='F' then y2p:=f[strtoint(copy(y2,2,1))]
      else y2p:=perem(y2);
      f[ind]:=y1p or y2p;
      form5.label3.caption:=form5.label3.caption+' = '+inttostr(y1p)+' '+m[i]+' '+inttostr(y2p)+' = '+inttostr(y1p or y2p)+#13;
      inc(ind);
    end else
    if m[i]='xor' then
    begin
      y2:=stack2[stack2.Count-1];
      stack2.Delete(stack2.Count-1);
      y1:=stack2[stack2.Count-1];
      stack2.Delete(stack2.Count-1);
      ident:='F'+inttostr(ind);
      stack2.Add(ident);
      form5.label3.caption:=form5.label3.caption+ident+' = '+y1+' '+m[i]+' '+y2;
      if copy(y1,1,1)='F' then y1p:=f[strtoint(copy(y1,2,1))]
      else y1p:=perem(y1);
      if copy(y2,1,1)='F' then y2p:=f[strtoint(copy(y2,2,1))]
      else y2p:=perem(y2);
      f[ind]:=y1p xor y2p;
      form5.label3.caption:=form5.label3.caption+' = '+inttostr(y1p)+' '+m[i]+' '+inttostr(y2p)+' = '+inttostr(y1p xor y2p)+#13;
      inc(ind);
    end else
    if m[i]='not' then
    begin
      y1:=stack2[stack2.Count-1];
      stack2.Delete(stack2.Count-1);
      ident:='F'+inttostr(ind);
      stack2.Add(ident);
      form5.label3.caption:=form5.label3.caption+ident+' = '+m[i]+'('+y1+')';
      if copy(y1,1,1)='F' then y1p:=f[strtoint(copy(y1,2,1))]
      else y1p:=perem(y1);
      f[ind]:=2+not y1p;
      form5.label3.caption:=form5.label3.caption+' = '+m[i]+'('+inttostr(y1p)+')'+' = '+inttostr(2+not y1p)+#13;
      inc(ind);
    end;
  end;
end;
stack2.Clear;
end;

Procedure TForm5.OnClickButton( Sender : TObject );
Begin
edit1.Text:=edit1.Text+TControl(Sender).Name;
End;

procedure TForm5.Button1Click(Sender: TObject);
var i,n,k:integer;
    MyEdit:TEdit;
    MyLabel:TLabel;
    MyButton:TButton;
    s:string;
    m: array[1..255] of string;
begin
lei:=1;
flag:=1;
s:=edit1.Text;
k:=1;

for i:=1 to length(s) do
if (s[i]=' ')and(s[i+1]=' ')then delete(s,i,1);

if s[length(s)]=' ' then delete(s,length(s),1);

for i:=1 to length(s) do
if s[i]<>' ' then m[k]:=m[k]+s[i]
else inc(k);

for i:=1 to k do
if (m[i]<>'and')and(m[i]<>'or')and(m[i]<>'xor')and(m[i]<>'not')and(m[i]<>'(')and(m[i]<>')')and(m[i]<>' ') then
sozdLE(m[i]);

end;

procedure TForm5.Button2Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+' not ';
end;

procedure TForm5.Button3Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+' or ';
end;

procedure TForm5.Button4Click(Sender: TObject);
var o:string;
begin
edit1.Text:=edit1.Text+' and ';
end;

procedure TForm5.Button7Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+' xor ';
end;

procedure TForm5.Button5Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+' ( ';
end;

procedure TForm5.Button6Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+' ) ';
end;

procedure TForm5.FormCreate(Sender: TObject);
begin
flag:=0;
stack:= TSTringList.Create;
stack2:= TSTringList.Create;
lei:=1;
end;

procedure TForm5.Button8Click(Sender: TObject);
begin
if flag=0 then showmessage('')
else begin
  label3.Caption:='';
  OPNrez:=OPN(edit1.Text);
  izOPN(OPNrez);
end;
end;




end.

end.
Mushtandoit вне форума Ответить с цитированием
Старый 02.06.2011, 00:01   #4
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

То что ты написал юнитом быть не может, потому что юнит так не выглядит.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 02.06.2011, 00:14   #5
Mushtandoit
Новичок
Джуниор
 
Регистрация: 01.06.2011
Сообщений: 5
По умолчанию

Ну у меня в делфе юнит выглядит именно так. А что в нем неправильного? Вроде 4 пожожих покатили нормально.
Mushtandoit вне форума Ответить с цитированием
Старый 02.06.2011, 00:23   #6
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Если у тебя есть кучка проектов, то и соединяй средствами Делфи Project -> Add to Project
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 02.06.2011, 00:43   #7
Mushtandoit
Новичок
Джуниор
 
Регистрация: 01.06.2011
Сообщений: 5
По умолчанию

Получается вставится только модуль (Unit) а форму придется опять самому заново делать? Не могли бы Вы тогда подробно описать процесс прикрепления готового модуля или проекта к новому.
Mushtandoit вне форума Ответить с цитированием
Старый 02.06.2011, 08:47   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Valio
то и соединяй средствами Делфи Project -> Add to Project
Золотые слова! +1

Цитата:
Получается вставится только модуль (Unit) а форму придется опять самому заново делать?
нет, всё будет хорошо. DFM Delphi подхватывает автоматом (ну, если в коде есть строчка {$R *.DFM}, разумеется! Но она по умолчанию есть (иначе у Вас и в старом проекте были бы проблемы!)

и учтите, что таким образом в разных проектах используется ОДИН и ТОТ ЖЕ модуль. Т.е. если Вы внесёте изменения на этой форме в одно проекте, то (после компиляции, конечно) в другом проекте появятся те же изменения!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос данных на другой лист Palomnik1096 Microsoft Office Excel 5 20.12.2010 15:12
Добавить другой проект Andrey85 Общие вопросы Delphi 1 01.10.2010 03:22
перенос разработки на другой пк Lokos БД в Delphi 2 22.09.2010 04:44
Перенос Delphi на другой ПК Myk Общие вопросы Delphi 4 22.02.2007 17:19
перенос БД на другой комп Detka БД в Delphi 1 24.12.2006 09:45