|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.10.2007, 11:53 | #11 | ||
Форумчанин
Регистрация: 15.10.2007
Сообщений: 147
|
Цитата:
Цитата:
Код:
TROXEVASIN, ждём-с уточнений. (а именно: какую имеено ошибку получаешь {это для начала} ) |
||
22.10.2007, 21:15 | #12 |
Регистрация: 20.10.2007
Сообщений: 6
|
Вот DLL(она еще не дописана):
library Classy; uses SysUtils, Classes; {$R *.res} type PRabota=^TRabota; PSsylka=^TSsylka; PStek=^TStek; TRabota = class Imya: String; no: integer; PredshRab: String; a: integer; b: integer; m: integer; SredProd: real; D: real; SKO: real; Color: byte; next: PRabota; StekSledRab: PStek; end; TSsylka = class AdrRab:PRabota; next:PSsylka; end; TStek = class Home: PSsylka; Position: PSsylka; end; TList = class Home: PRabota; end; procedure RabotaADD(Imyae,PredshRabe:string;n oe,ae,be,me:integer;List:TList); stdcall; Var Rab:PRabota; St:Pstek; begin if List.Home=nil then //Свежесозданный и будет Началом begin New(Rab); Rab^:=TRabota.Create; Rab.Color:=0; Rab.Imya:=Imyae; Rab.no:=noe; Rab.PredshRab:=PredshRabe; Rab.a:=ae; Rab.b:=be; Rab.m:=me; Rab.SredProd:=(ae+4*me+be)/6; Rab.SKO:=(be-ae)/6; Rab.D:=Sqr(Rab.SKO); New(St); St^:=TStek.Create; St.Home:=nil; St.Position:=nil; Rab.StekSledRab:=St; List.Home:=Rab; List.Home.next:=nil; end else //Свежесозданный встает в конец очереди begin Rab:=List.Home; while Rab.next<>nil do Rab := Rab.next; New(Rab.next); Rab.next^ := TRabota.Create; Rab.next.next:=nil; Rab.next.Color:=0; Rab.next.Imya:=Imyae; Rab.next.no:=noe; Rab.next.PredshRab:=PredshRabe; Rab.next.a:=ae; Rab.next.b:=be; Rab.next.m:=me; Rab.next.SredProd:=(ae+4*me+be)/6; Rab.next.SKO:=(be-ae)/6; Rab.next.D:=Sqr(Rab.next.SKO); end; end; procedure SsylkaADD(Rab:PRabota;RabAdr:PRabot a); stdcall; Var Ssylka:PSsylka; begin if Rab<>nil then begin if Rab.StekSledRab.Home=nil then //Свежесозданный и будет Началом begin New(Ssylka); Ssylka^:=TSsylka.Create; Ssylka.AdrRab:=RabAdr; Rab.StekSledRab.Home:=Ssylka; Rab.StekSledRab.Home.next:=nil; end else //Свежесозданный встает в конец очереди begin Ssylka:=Rab.StekSledRab.Home; while Ssylka.next<>nil do Ssylka := Ssylka.next; New(Ssylka.next); Ssylka.next^ := TSsylka.Create; Ssylka.AdrRab:=RabAdr; Ssylka.next.next:=nil; end; end; end; exports RabotaADD, SsylkaADD; begin end. А вот содержимое файла из которого программа читает: A;1; 0;2;5;8 B;2; 1;6;9;12 C;3; 1;6;7;8 D;4;2,3;1;4;7 E;5; 1;8;8;8 F;6;4,5;5;14;17 G;7; 3;3;12;21 H;8;6,7;3;6;9 I;9; 8;5;8;11 |
22.10.2007, 21:18 | #13 |
Регистрация: 20.10.2007
Сообщений: 6
|
Вот текст самой программы(начало):
unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ImgList, ComCtrls, ToolWin, Grids, ExtCtrls, StdCtrls, TeEngine, Series, TeeProcs, Chart; type PRabota=^TRabota; PSsylka=^TSsylka; PStek=^TStek; TRabota = class Imya: String; no: integer; PredshRab: String; a: integer; b: integer; m: integer; SredProd: real; D: real; SKO: real; Color: byte; next: PRabota; StekSledRab: PStek; end; TSsylka = class AdrRab:PRabota; next:PSsylka; end; TStek = class Home: PSsylka; Position: PSsylka; end; TList = class Home: PRabota; end; DLLprocA = procedure(Imyae,PredshRabe:string;n oe,ae,be,me:integer;List:TList); stdcall; DLLprocB = procedure(Rab:PRabota;RabAdr:PRabot a); stdcall; TfmMain = class(TForm) ToolBar1: TToolBar; tbOpen: TToolButton; tbClose2: TToolButton; ImageList1: TImageList; Panel1: TPanel; sgTablica: TStringGrid; PageControl1: TPageControl; tsOboznacheniya: TTabSheet; tsRaspredelenie: TTabSheet; OpenDialog: TOpenDialog; tbRaschet: TToolButton; tsGraf: TTabSheet; lbOboznacheniya: TLabel; Chart1: TChart; Series1: TLineSeries; Panel2: TPanel; Panel3: TPanel; Image1: TImage; Label1: TLabel; ToolButton1: TToolButton; procedure FormCreate(Sender: TObject); procedure tbOpenClick(Sender: TObject); procedure Open; procedure RabotaPoNomeru(nomer:integer);//:PRabota; procedure tbClose2Click(Sender: TObject); procedure tbRaschetClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private DLLHandle: THandle; RabotaADD: DLLprocA; SsylkaADD: DLLprocB; public { Public declarations } end; var fmMain: TfmMain; List: Tlist; z: integer; CurPoisk:PRabota; |
22.10.2007, 21:19 | #14 |
Регистрация: 20.10.2007
Сообщений: 6
|
(продолжение):
implementation {$R *.dfm} procedure TfmMain.RabotaPoNomeru(nomer:intege r);//:PRabota; begin CurPoisk:=List.Home; if nomer=0 then CurPoisk:=nil//result:= nil else begin while CurPoisk.no<>nomer do CurPoisk:=CurPoisk.next; // result:=CurPoisk; end; // end; procedure TfmMain.Open; var f:textFile; i,t,d,k,l,n: integer; S: string; begin OpenDialog.InitialDir:=ExtractFileP ath(Application.exename); if OpenDialog.Execute and FileExists(OpenDialog.FileName) then begin AssignFile(f,OpenDialog.FileName); Reset(f); n:=0; repeat inc(n); t:=1; d:=0; k:=0; Readln(f,s); l:=length(s); for i:=t to l do begin inc(d); if s[i]=';' then begin sgTablica.Cells[k,n]:=Copy(s,t,d-1); inc(k); d:=0; t:=i+1; end; if i=l then sgTablica.Cells[k,n]:=Copy(s,t,d); end; sgTablica.RowCount:=sgTablica.RowCo unt+1; until EOF(f); sgTablica.RowCount:=sgTablica.RowCo unt-1; CloseFile(f); end; end; procedure TfmMain.FormCreate(Sender: TObject); begin fmMain.Caption:= 'ПЕРТ'; tsOboznacheniya.Caption:='Обозначен ия'; tsGraf.Caption:='Граф'; tsRaspredelenie.Caption:='Распредел ение'; Panel3.Caption:=''; OpenDialog.Filter:='Файлы проекта(*.prt)|*.prt'; lbOboznacheniya.Caption:='НР Название работы'+#13+ '№ Индекс работы'+#13+ 'ООП Оптимистическая оценка продолжительности'+#13+ 'НВОП Наиболее вероятная оценка продолжительности'+#13+ 'ПОП Пессимистическая оценка продолжительности'+#13+ 'СП Средняя продолжительность'+#13+ 'СКО Среднеквадратическое отклонение'+#13+ 'Д Дисперсия'; sgTablica.Cells[0,0]:='НР'; sgTablica.Cells[1,0]:='№'; sgTablica.Cells[2,0]:='ПР'; sgTablica.Cells[3,0]:='ООП'; sgTablica.Cells[4,0]:='НВОП'; sgTablica.Cells[5,0]:='ПОП'; sgTablica.Cells[6,0]:='СП'; sgTablica.Cells[7,0]:='СКО'; sgTablica.Cells[8,0]:='Д'; Label1.Caption:= 'Критические работы'+#13+'Ожидаемая продолжительность проекта'; List:=Tlist.Create; end; procedure TfmMain.tbOpenClick(Sender: TObject); begin Open; end; procedure TfmMain.tbClose2Click(Sender: TObject); begin Close; end; procedure TfmMain.tbRaschetClick(Sender: TObject); var t,d,l,i,a,b,m, nomer: integer; S,Im, PRab: string; Cur: PRabota; begin for i:=1 to sgTablica.RowCount-1 do begin Im:=sgTablica.Cells[0,i]; nomer:=StrToInt(sgTablica.Cells[1,i]); PRab:=sgTablica.Cells[2,i]; a:=StrToInt(sgTablica.Cells[3,i]); m:=StrToInt(sgTablica.Cells[4,i]); b:=StrToInt(sgTablica.Cells[5,i]); RabotaADD(Im,PRab,nomer,a,b,m,List) ; end; Cur:=List.Home; for i:=1 to sgTablica.RowCount-1 do begin sgTablica.Cells[6,i]:=FloatToStr(Round(Cur.SredProd*100 0)/1000); sgTablica.Cells[7,i]:=FloatToStr(Round(Cur.SKO*1000)/1000); sgTablica.Cells[8,i]:=FloatToStr(Round(Cur.D*1000)/1000); Cur:=Cur.next; end; Cur:=List.Home; // repeat z:=0; t:=1; d:=0; S:=Cur.PredshRab; l:=length(S); for i:=t to l do begin inc(d); if s[i]=',' then begin z:=StrToInt(Copy(s,t,d-1)); d:=0; t:=i+1; //SsylkaADD(RabotaPoNomeru(z),Cur); RabotaPoNomeru(z); SsylkaADD(CurPoisk,Cur); // end; if i=l then begin z:=StrToInt(Copy(s,t,d)); //SsylkaADD(RabotaPoNomeru(z),Cur); RabotaPoNomeru(z); SsylkaADD(CurPoisk,Cur); // end; end; // Cur:=Cur.next; until (Cur=nil); // List.Destroy; List:= TList.Create; end; procedure TfmMain.FormShow(Sender: TObject); begin DLLHandle:= LoadLibrary('Classy'); if (DLLHandle>32) then begin @RabotaADD:= GetProcAddress(DLLHandle,'RabotaADD '); @SsylkaADD:= GetProcAddress(DLLHandle,'SsylkaADD '); end else begin ShowMessage('Библиотека отсутствует!!!'); Close; end; end; procedure TfmMain.FormClose(Sender: TObject; var Action: TCloseAction); begin List.Destroy; FreeLibrary(DLLHandle); end; end. ОШИБКУ нашел Последний раз редактировалось TROXEVASIN; 22.10.2007 в 21:52. |
22.10.2007, 23:56 | #15 |
Форумчанин
Регистрация: 15.10.2007
Сообщений: 147
|
Я несколько занят. Точнее - по уши =)))
TROXEVASIN, если что-то нужно - напиши ещё пост: "хочу вот так, но не пашет. Ругается:[текст ошибки]" Хранить объявление+описание классов в dll нельзя. Последний раз редактировалось Maslan; 23.10.2007 в 01:06. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
необходимо сделать несколько документов: акт, счет и т.п. | Kisunya2104 | Microsoft Office Excel | 5 | 17.05.2009 18:35 |
про СТЕК | anco | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 06.07.2008 22:29 |
Стек | Еленка | Помощь студентам | 2 | 06.06.2008 18:58 |
Стек | Foky | Паскаль, Turbo Pascal, PascalABC.NET | 8 | 13.05.2008 18:39 |
Стек | Dr.zlo | Работа с сетью в Delphi | 6 | 09.07.2007 07:59 |