Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 28.04.2013
Сообщений: 65

Разработка программы-эмулятора электронных схемотехнических компонентов

30.04.2013, 14:59. Показов 2474. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
* Выходные данные: Программа-эмулятор будет использоваться для изучения принципов работы цифровых элементарных и комбинаторных элементов. Разработанная программа должна обеспечить выполнение следующих функций: выбор элемента из библиотеки элементов для эмуляции его работы, возможность конфигурации входных сигналов и наблюдения за изменением выходных сигналов, исследования выбранного элемента и составления его таблице истинности.

Делфи 7

надеюсь на помощь в виде кусков програмного кода , советов с какими компонентами работать, с помощью каких функций делфи можно ето реализовать и примерное графическое представление всего етого
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.04.2013, 14:59
Ответы с готовыми решениями:

Разработка приложения конвертации файлов из формата электронных документов в формат электронных книг
Доброго времени суток. У меня появилась идея для улучшения программы конвертации файлов из формата в формат, но у меня возникла проблема с...

СГФ (физика электронных компонентов)
Здравствуйте. Помогите, пожалуйста, разобраться. Нам дали ИДЗ по специальным главам физики, вот с такими заданиями. Не понимаю как их...

Стандарт базы данных электронных компонентов
Доброго времени суток! Пишу софтину для создания/моделирования электронных схем. При этом нужно использовать какой то набор электронных ...

18
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
30.04.2013, 15:51
Лучший ответ Сообщение было отмечено как решение

Решение

...в вашем случае лучше будет воспользоваться базисом от Константина Полякова - TkpLogElement и TkpLogScheme http://kpolyakov.narod.ru/delphi/logic.htm
3
1 / 1 / 0
Регистрация: 28.04.2013
Сообщений: 65
04.06.2013, 19:20  [ТС]
я вот почти разобрался в предложенном варианте но тяжело пока разобраться в чужой программе и возникают ошибки


Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, kpLogElement, StdCtrls, kpLogScheme, kpPipeline;
 
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Label2: TLabel;
    AnimCB: TCheckBox;
    s1CB: TCheckBox;
    s2CB: TCheckBox;
    s3CB: TCheckBox;
    s4CB: TCheckBox;
    t2CB: TCheckBox;
    t1CB: TCheckBox;
    Memo1: TMemo;
    Button1: TButton;
    s5CB: TCheckBox;
    t3CB: TCheckBox;
    t4CB: TCheckBox;
    t5CB: TCheckBox;
    t6CB: TCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure s1CBClick(Sender: TObject);
    procedure kpLogScheme1Change(Sender: TObject);
    procedure AnimCBClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.DFM}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
   Memo1.Lines.Assign(kpLogScheme1.Scheme);
end;
 
procedure TForm1.s1CBClick(Sender: TObject);
var Name: string;
begin
   Name := 's' + IntToStr(TControl(Sender).Tag);
   kpLogScheme1.SourceStateByName[Name] := TCheckBox(Sender).Checked;
end;
 
procedure TForm1.kpLogScheme1Change(Sender: TObject);
begin
try
   t1CB.Checked := kpLogScheme1.TerminalStateByName['t1'];
   t2CB.Checked := kpLogScheme1.TerminalStateByName['t2'];
   t3CB.Checked := kpLogScheme1.TerminalStateByName['t3'];
   t4CB.Checked := kpLogScheme1.TerminalStateByName['t4'];
   t5CB.Checked := kpLogScheme1.TerminalStateByName['t5'];
   t6CB.Checked := kpLogScheme1.TerminalStateByName['t6'];
except end;
end;
 
procedure TForm1.AnimCBClick(Sender: TObject);
begin
   kpLogScheme1.Animate := AnimCB.Checked;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  kpLogScheme1.Scheme := Memo1.Lines;
end;
 
end.




ошибка
Кликните здесь для просмотра всего текста
[Error] Unit1.pas(47): Undeclared identifier: 'kpLogScheme1'
[Error] Unit1.pas(47): ')' expected but identifier 'Scheme' found
[Error] Unit1.pas(54): Undeclared identifier: 'kpLogScheme1'
[Error] Unit1.pas(54): Missing operator or semicolon
[Error] Unit1.pas(60): Undeclared identifier: 'kpLogScheme1'
[Error] Unit1.pas(60): Missing operator or semicolon
[Error] Unit1.pas(61): Missing operator or semicolon
[Error] Unit1.pas(62): Missing operator or semicolon
[Error] Unit1.pas(63): Missing operator or semicolon
[Error] Unit1.pas(64): Missing operator or semicolon
[Error] Unit1.pas(65): Missing operator or semicolon
[Error] Unit1.pas(71): Undeclared identifier: 'kpLogScheme1'
[Error] Unit1.pas(71): Missing operator or semicolon
[Error] Unit1.pas(76): Undeclared identifier: 'kpLogScheme1'
[Error] Unit1.pas(76): Missing operator or semicolon
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

подключаемый модуль
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
unit kpLogScheme;
{
     TkpLogScheme - ëîãè÷åñêàÿ ñõåìà
 
     âåðñèÿ 1.0
     (c) Ê. Ïîëÿêîâ, 2003
 
     FIDO:   2:5030/542.251
     e-mail: [email]kpolyakov@mail.ru[/email]
     Web:    [url]http://kpolyakov.narod.ru[/url]
             [url]http://kpolyakov.newmail.ru[/url]
 
     Ñîäåðæèò òðóáîïðîâîä (TkpPipeline) è ëîãè÷åñêèå ýëåìåíòû (TkpLogElement)
 
     Îïèñàíèå ñõåìû ïðåäñòàâëÿåò ñîáîé íàáîð ñèìâîëüíûõ
     ñòðîê. Êàæäàÿ ñòðîêà îïèñûâàåò îäèí ýëåìåíò:
        s x y èìÿ_âõîäà    âõîä â òî÷êå (x,y)
        l äëèíà            çâåíî âëåâî
        ã äëèíà            çâåíî âïðàâî
        u äëèíà            çâåíî ââåðõ
        d äëèíà            çâåíî âíèç
        j èìÿ_óçëà         íîâûé óçåë â òåêóùåé ïîçèöèè êóðñîðà
        t èìÿ_âûõîäà       âûõîä â òåêóùåé ïîçèöèè êóðñîðà
        g èìÿ_óçëà         ïåðåéòè â óçåë
        @ èìÿ_ýëåìåíòà òèï_ýëåìåíòà íîìåð_âõîäà øèðèíà âûñîòà ÷èñëî_âõîäîâ ÷èñëî_âûõîäîâ
                           ñîçäàòü íîâûé ëîãè÷åñêèé ýëåìåíò è ïðèñîåäèíèòü
                           òåêóùóþ ëèíèþ ñâÿçè ê óêàçàííîìó âõîäó (ïî óìîë÷àíèþ -
                           êî âõîäó 1)
                           ìîæíî èñïîëüçîâàòü ñëåäóþùèå òèïû ýëåìåíòîâ:
                              not       ýëåìåíòü ÍÅ
                              and       ýëåìåíò È
                              or        ýëåìåíò ÈËÈ
                              xor       ýëåìåíò èñêëþ÷àþùåå ÈËÈ
                              imp       ýëåìåíò "èìïëèêàöèÿ"
                              eq        ýëåìåíò "ýêâèâàëåíòíîñòü"
                              hsum      ýëåìåíò ïîëóñóììàòîð
                              sum       ýëåìåíò ñóììàòîð
                              trig      ýëåìåíò RS-òðèããåð
                           øèðèíó è âûñîòó ìîæíî íå óêàçûâàòü, îíà áóäåò âçÿòà èç
                           ñâîéñòâ LogElWidth/LogElHeight
                           ÷èñëî âûõîäîâ è âûõîäîâ íàäî óêàçûâàòü òîëüêî äëÿ
                           íåñòàíäàðòíûõ ýëåìåíòîâ
        # èìÿ_ýëåìåíòà íîìåð_âõîäà
                           ïðîâåñòè ëèíèþ ñâÿçè êî âõîäó ëîãè÷åñêîãî ýëåìåíòà
                           (óãëîì, ñíà÷àëà ïî y, ïîòîì - ïî x)
        $ èìÿ_ýëåìåíòà íîìåð_âûõîäà
                           ïåðåéòè ê âûõîäó ëîãè÷åñêîãî ýëåìåíòà (ïî óìîë÷àíèþ
                           - ê âûõîäó 1)
 
     Äîïîëíèòåëüíûå ñâîéñòâà è ìåòîäû:
 
        Scheme: TStrings       îïèñàíèå ëîãè÷åñêîé ñõåìû
        LogElColor: TColor     öâåò ëîãè÷åñêîãî ýëåìåíòà
        LogElWidth: integer    øèðèíà ëîãè÷åñêîãî ýëåìåíòà
        LogElHeight: integer   âûñîòà ëîãè÷åñêîãî ýëåìåíòà
        LogElPicture: TPicture èçîáðàæåíèå ëîãè÷åñêîãî ýëåìåíòà
 
     Óíàñëåäîâàííûå îò TkpPipeline:
     
        Animate: Boolean     èñïîëüçîâàòü àíèìàöèþ èëè íåò
        Color: TColor        öâåò âîäû
        AltColor: TColor     öâåò ïðîìåæóòêîâ
        BkColor: TColor      öâåò ôîíà
        BkBitmap: TBitmap    ôîíîâûé ðèñóíîê
        JointColor: TColor   öâåò êîíòóðà óçëîâ
        TickLength: integer  äëèíà îòðåçêà ïðè àíèìàöèè
        PipeWidth: integer   øèðèíà òðóáû
        MapList: TStrings    îïèñàíèå òðóáîïðîâîäà
        Period: integer      èíòåðâàë äëÿ àíèìàöèè
        MoveStep: integer    øàã äâèæåíèÿ ïîòîêà çà 1 èíòåðâàë ïðè àíèìàöèè
        HasLabels: Boolean   ñòàâèòü ëè ìåòêè âõîäîâ è âûõîäîâ
        SourceState[Index: integer]: Boolean       ñîñòîÿíèå âõîäà (äà/íåò)
        TerminalState[Index: integer]: Boolean     ñîñòîÿíèå âûõîäà (äà/íåò)
        SourceStateByName[Name: string]: Boolean   ñîñòîÿíèå âõîäà ïî èìåíè
        TerminalStateByName[Name: string]: Boolean ñîñòîÿíèå âûõîäà ïî èìåíè
        SourceNames: TStrings   èìåíà âõîäîâ
        TerminalNames: TStrings èìåíà âûõîäîâ
        JointNames: TStrings    èìåíà óçëîâ
 
     Ñîáûòèÿ:
        OnChange: TNotifyEvent  èçìåíèëîñü ñîñòîÿíèå âõîäîâ, ìîãëî
                                (íî íå îáÿçàòåëüíî!) èçìåíèòüñÿ è ñîñòîÿíèå âûõîäîâ
                                
        OnProcessLine: TLineNotifyEvent
                                ñîáûòèå ïðè îáðàáîòêå ñòðîêè ñõåìû ñ óêàçàííûì íîìåðîì,
                                ìîæíî èñïîëüçîâàòü äëÿ ëîêàëèçàöèè îøèáîê
 
        OnCustomOp: TCustomOpEvent
                                íåîáõîäèìî ðàññ÷èòàòü ñîñòîÿíèÿ âûõîäîâ íåñòàíäàðòíîãî ýëåìåíòà
                                Ïàðàìåòðû
                                     sOldState - ñèìâîëüíàÿ öåïî÷êà íóëåé (#48) è åäèíèö (#49),
                                               îïðåäåëÿþùèõ ïðîøëîå ñîñòîÿíèå âûõîäîâ
                                     sInVal    - òàêàÿ æå öåïî÷êà, îïðåäåëÿþùàÿ
                                               òåêóùåå ñîñòîÿíèå âõîäîâ
                                 var sOutVal   - òàêàÿ æå öåïî÷êà äëÿ âûõîäîâ, êîòîðóþ
                                               äîëæíà ñîñòàâèòü ïðîöåäóðà.
}
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, kpPipeline, kpLogElement;
 
type
  ELogSchemeError = class(Exception) end;
 
  TkpLogScheme = class(TkpPipeLine)
  private
    { Private declarations }
    FScheme: TStrings;
    FLogUnits: TStringList;
    FLogElPicture: TPicture;
    FLogElWidth, FLogElHeight: integer;
    FLogElColor: TColor;
    FOnProcessLine: TLineNotifyEvent;
    FOnCustomOp: TCustomOpEvent;
  protected
    { Protected declarations }
     procedure SetLogElWidth(NewWidth: integer);
     procedure SetLogElHeight(NewHeight: integer);
     procedure SetScheme ( NewScheme: TStrings );
     procedure SetLogElPicture(NewPicture: TPicture);
     function  GetBevelInner: TPanelBevel;
     procedure SetBevelInner(Value: TPanelBevel);
     function  GetBevelOuter: TPanelBevel;
     procedure SetBevelOuter(Value: TPanelBevel);
     function  GetBevelWidth: integer;
     procedure SetBevelWidth(Value: integer);
     function  GetBorderWidth: integer;
     procedure SetBorderWidth(Value: integer);
     procedure SetOnCustomOp(Value: TCustomOpEvent);
     procedure SetLogElColor(Value: TColor);
     procedure ClearLogUnitList;
     procedure BuildScheme;
     procedure Loaded; override;
     procedure RedrawAll; override;
     procedure HookProcessLine(Sender: TObject; LineNo: integer);
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;
  published
    { Published declarations }
    property BevelInner: TPanelBevel read GetBevelInner write SetBevelInner;
    property BevelOuter: TPanelBevel read GetBevelOuter write SetBevelOuter;
    property BevelWidth: integer read GetBevelWidth write SetBevelWidth;
    property BorderWidth: integer read GetBorderWidth write SetBorderWidth;
    property LogElColor: TColor read FLogElCOlor write SetLogElColor;
    property LogElWidth: integer read FLogElWidth write SetLogElWidth;
    property LogElHeight: integer read FLogElHeight write SetLogElHeight;
    property LogElPicture: TPicture read FLogElPicture write SetLogElPicture;
    property Scheme: TStrings read FScheme write SetScheme;
    property OnProcessLine: TLineNotifyEvent read FOnProcessLine write FOnProcessLine;
    property OnCustomOp: TCustomOpEvent read FOnCustomOp write SetOnCustomOp;
  end;
 
procedure Register;
 
implementation
 
uses DesignIntf;
 
//----------- constructor -----------
constructor TkpLogScheme.Create(AOwner: TComponent);
begin
   inherited;
   inherited OnProcessLine := HookProcessLine;
   FLogUnits := TStringList.Create;
   FScheme := TStringList.Create;
   FLogElColor := clWhite;
   FLogElWidth := 40;
   FLogElHeight := 50;
   FLogElPicture := TPicture.Create;
end;
 
//----------- destructor -----------
destructor TkpLogScheme.Destroy;
begin
  ClearLogUnitList;
  FLogUnits.Free;
  FScheme.Free;
  FLogElPicture.Free;
  inherited;
end;
 
//----------- HookProcessLine -----------
procedure TkpLogScheme.HookProcessLine(Sender: TObject; LineNo: integer);
begin
   LineNo := integer(MapList.Objects[LineNo]);
   if Assigned(FOnProcessLine) then FOnProcessLine(Self, LineNo);
end;
 
//----------- Loaded -----------
procedure TkpLogScheme.Loaded;
begin
   inherited;  
   BuildScheme;
   RedrawAll;
end;
 
//----------- SetScheme -----------
procedure TkpLogScheme.SetScheme ( NewScheme: TStrings );
begin
   if not Assigned(NewScheme) then
        FScheme.Clear
   else FScheme.Assign(NewScheme);
   BuildScheme;
   RedrawAll;
end;
 
//-------------- RedrawAll ------------------
procedure TkpLogScheme.RedrawAll;
var i: integer;
    LE: TkpLogElement;
begin
   inherited;
   for i:=0 to ControlCount-1 do
     if Controls[i] is TkpLogElement then begin
        LE := TkpLogElement(Controls[i]);
        LE.Paint;
     end;
end;
 
//----------- BuildScheme -----------
procedure TkpLogScheme.BuildScheme;
var i, x, y, nSource, nTerminal: integer;
    NeedSource, AfterUnit: Boolean;
    Joints: TStringList;
    s: string;
    Dir: char;
  //---------- GetWord ------------------------
  function GetWord(var s: string): string;
  var p: integer;
  begin
    s := Trim(s);
    p := Pos(' ', s);
    if p = 0 then begin Result := s; s := ''; end
    else begin          Result := Copy(s, 1, p-1); s := Copy(s, p+1, 999); end;
  end;
  //---------- Unpack New Unit ------------------------
  procedure UnPackNewUnit(s: string);
  var ElName, sKind: string;
      nIn, xWidth, xHeight, InCount, OutCount: integer;
      Obj: TkpLogElement;
  begin
    ElName := AnsiLowerCase(GetWord(s));
    if ElName = '' then
       raise ELogSchemeError.Create('Íå çàäàíî èìÿ ëîãè÷åñêîãî ýëåìåíòà');
    if FLogUnits.IndexOf(ElName) >= 0 then
       raise ELogSchemeError.CreateFmt('Ëîãè÷åñêèé ýëåìåíò ñ èìåíåì ''%s'' óæå åñòü', [ElName]);
    sKind := AnsiLowerCase(GetWord(s));
{    if (sKind <> 'not') and  (sKind <> 'and') and  (sKind <> 'or') and
       (sKind <> 'xor') and  (sKind <> 'imp') and  (sKind <> 'eq') and
       (sKind <> 'hsum') and  (sKind <> 'sum') and  (sKind <> 'trig') then
       raise ELogSchemeError.CreateFmt('Íåèçâåñòíûé òèï ýëåìåíòà ''%s''', [sKind]); }
    nIn := StrToIntDef(GetWord(s), 1);
    xWidth := StrToIntDef(GetWord(s), 0);
    xHeight := StrToIntDef(GetWord(s), 0);
    InCount := StrToIntDef(GetWord(s), 2);
    OutCount := StrToIntDef(GetWord(s), 1);
    Obj := TkpLogElement.Create(nil);
    with Obj do begin
       Locked := True;
       if sKind = 'not'  then Kind := leNot  else
       if sKind = 'and'  then Kind := leAnd  else
       if sKind = 'or'   then Kind := leOr   else
       if sKind = 'xor'  then Kind := leXor  else
       if sKind = 'imp'  then Kind := leImp  else
       if sKind = 'eq'   then Kind := leEq   else
       if sKind = 'hsum' then Kind := leHSum else
       if sKind = 'sum'  then Kind := leSum  else
       if sKind = 'trig' then Kind := leTrig else Kind := leCustom;
       if Kind = leCustom then begin
          Caption := ElName;
          InputCount := InCount;
          OutputCount := OutCount;
       end;
       InsertControl(Obj);
       if xWidth > 0 then  Width := xWidth   else Width := FLogElWidth;
       if xHeight > 0 then Height := xHeight else Height := FLogElHeight;
       Left := x + Margin - 1;
       Top := y - Obj.InputCoord[nIn] + Margin;
       Color := Self.LogElColor;
       BkColor := Self.BkColor;
       BkBitmap := Self.BkBitmap;
       InPipes := Self;
       OutPipes := Self;
       Picture := FLogElPicture;
       OnCustomOp := FOnCustomOp;
       s := StringOfChar('0', InputCount);
       s[nIn] := Char(nTerminal+1 + Ord('0')); // nterminal will be increased later!
       InIndices := s;
       OutIndices := StringOfChar('0', OutputCount);
       Locked := False;
    end;
    FLogUnits.AddObject(ElName, Obj);
    x := x + FLogElWidth;
    y := Obj.Top + Obj.OutputCoord[1] - Margin;
  end;
  //---------- GoToUnitInput ------------------------
  procedure GoToUnitInput(s: string);
  var ElName: string;
      j, n, nIn, x0, y0: integer;
      Obj: TkpLogElement;
  begin
    ElName := AnsiLowerCase(GetWord(s));
    n := FLogUnits.IndexOf(ElName);
    if n < 0 then
       raise ELogSchemeError.CreateFmt('Íå íàéäåí ýëåìåíò ñ èìåíåì ''%s''', [ElName]);
    Obj := TkpLogElement(FLogUnits.Objects[n]);
    Obj.Locked := True;
    nIn := StrToIntDef(GetWord(s), 1);
    if (nIn < 1) or (nIn > Obj.InputCount) then
       raise ELogSchemeError.CreateFmt('Íå íàéäåí âõîä íîìåð %d', [nIn]);
    x0 := Obj.Left - Margin;
    y0 := Obj.Top + Obj.InputCoord[nIn] - Margin;
    j := i+1;
    if y0 < y then begin MapList.Insert(j, Format('u %d', [y-y0])); Inc(j); end;
    if y0 > y then begin MapList.Insert(j, Format('d %d', [y0-y])); Inc(j); end;
    if x0 < x then begin MapList.Insert(j, Format('l %d', [x-x0])); Inc(j); end;
    if x0 > x then begin MapList.Insert(j, Format('r %d', [x0-x])); Inc(j); end;
    MapList.Insert(j, 't');
    s := Obj.InIndices;
    s[nIn] := Char(nTerminal+1 + Ord('0'));
    Obj.InIndices := s;
    Obj.Locked := False;
  end;
  //---------- StartFromUnitOutput ------------------------
  procedure StartFromUnitOutput(s: string);
  var ElName: string;
      n, nOut: integer;
      Obj: TkpLogElement;
  begin
    ElName := AnsiLowerCase(GetWord(s));
    n := FLogUnits.IndexOf(ElName);
    if n < 0 then
       raise ELogSchemeError.CreateFmt('Íå íàéäåí ýëåìåíò ñ èìåíåì ''%s''', [ElName]);
    Obj := TkpLogElement(FLogUnits.Objects[n]);
    Obj.Locked := True;
    nOut := StrToIntDef(GetWord(s), 1);
    if (nOut < 1) or (nOut > Obj.OutputCount) then
       raise ELogSchemeError.CreateFmt('Íå íàéäåí âûõîä íîìåð %d', [nOut]);
    x := Obj.Left + Obj.Width - Margin;
    y := Obj.Top + Obj.OutputCoord[nOut] - Margin;
    s := Obj.OutIndices;
    s[nOut] := Char(nSource+1 + Ord('0'));
    Obj.OutIndices := s;
    Obj.Locked := False;
  end;
  //------------- MOVE POINT ---------------------------------------
  procedure MovePoint ( Dir: char; s: string );
  var p, n1, n2: integer;
  begin
    s := Trim(s);
    p := Pos(' ', s); if p = 0 then p := Length(s)+1;
    n1 := StrToIntDef(Copy(s,1,p-1), 0);
    Delete(s, 1, p);
    p := Pos(' ', s); if p = 0 then p := Length(s)+1;
    n2 := StrToIntDef(Copy(s,1,p-1), 0);
    case Dir of
       's': begin
            if not NeedSource then
               raise ELogSchemeError.Create('Èñòî÷íèê â íåîæèäàííîì ìåñòå!');
            x := n1; y := n2;
            Inc(nSource);
            end;
       'u': begin y := y - n1; end;
       'd': begin y := y + n1; end;
       'l': begin x := x - n1; end;
       'r': begin x := x + n1; end;
    end;
  end;
  //------------- GoToJoint -----------------------------
  procedure GoToJoint ( s: string );
  var n, xy: integer;
  begin
    if not NeedSource then raise ELogSchemeError.Create('Ïåðåõîä â íåîæèäàííîì ìåñòå!');
    n := Joints.IndexOf ( s );
    if n < 0 then raise ELogSchemeError.CreateFmt('Íåèçâåñòíûé óçåë ''%s''', [s]);
    xy := integer(Joints.Objects[n]);
    x := xy div 10000;
    y := xy mod 10000;
  end;
  //----------------------------------------------------
begin
   Joints := TStringList.Create;
 
   MapList.Assign(FScheme);
   for i:=0 to MapList.Count-1 do
       MapList.Objects[i] := TObject(i);
 
try
   ClearLogUnitList;
   NeedSource := True;
   i := 0; x := -1; y := -1;
   nSource := - 1;
   nTerminal := - 1;
   AfterUnit := False;
 
   while i < MapList.Count do begin
 
     s := Trim(MapList[i]);
     if s = '' then begin
        MapList.Delete(i);
        continue;
     end;
 
     Dir := s[1];
     Delete(s, 1, 1);
     s := AnsiLowerCase(Trim(s));
 
     case Dir of
        's', 'u', 'd', 'l', 'r':
             begin
             if NeedSource and (Dir <> 's') then begin
               MapList.Insert(i, Format('s %d %d', [x,y]));
               Dec(i);
               if AfterUnit then
                  StartFromUnitOutput(FLogUnits[FLogUnits.Count-1]);
             end
             else begin
               MovePoint ( Dir, s );
               NeedSource := False;
             end;
             AfterUnit := False;
             end;
        'j': begin
             Joints.AddObject(s, TObject(x*10000+y));
             NeedSource := False;
             AfterUnit := False;
             end;
        'g': begin
             GoToJoint(s);
             NeedSource := False;
             AfterUnit := False;
             end;
        't': begin
             NeedSource := True;
             Inc(nTerminal);
             end;
        '@': begin
             UnPackNewUnit ( s );
             MapList.Delete(i);
             MapList.Insert(i, 't');
             NeedSource := False;
             AfterUnit := True;
             Dec(i);
             end;
        '#': begin
             GoToUnitInput ( s );
             MapList.Delete(i);
             NeedSource := False;
             AfterUnit := False;
             Dec(i);
             end;
        '$': begin
             StartFromUnitOutput ( s );
             MapList.Delete(i);
             MapList.Insert(i, Format('s %d %d', [x,y]));
             NeedSource := True;
             AfterUnit := False;
             Dec(i);
             end;
     end;
     Inc(i);
   end;
 
   BuildPipeline;
 
finally
   Joints.Free;
end;
 
end;
 
//----------- ClearLogUnitList -----------
procedure TkpLogScheme.ClearLogUnitList;
var Obj: TkpLogElement;
begin
  while FLogUnits.Count > 0 do begin
     Obj := TkpLogElement(FLogUnits.Objects[0]);
     RemoveControl(Obj);
     Notification(Obj, opRemove);
     Obj.Free;
     FLogUnits.Delete(0);
  end;
end;
 
//-------------- SetLogElPicture ------------------
procedure TkpLogScheme.SetLogElPicture(NewPicture: TPicture);
begin
   FLogElPicture.Assign(NewPicture);
   BuildScheme;
   RedrawAll;
end;
 
//-------------- SetLogElWidth ------------------
procedure TkpLogScheme.SetLogElWidth(NewWidth: integer);
begin
   if NewWidth < 1 then NewWidth := 1;
   if NewWidth > 400 then NewWidth := 400;
   if FLogElWidth = NewWidth then Exit;
   FLogElWidth := NewWidth;
   BuildScheme;
   RedrawAll;
end;
 
//-------------- SetLogElHeight ------------------
procedure TkpLogScheme.SetLogElHeight(NewHeight: integer);
begin
   if NewHeight < 1 then NewHeight := 1;
   if NewHeight > 400 then NewHeight := 400;
   if FLogElHeight = NewHeight then Exit;
   FLogElHeight := NewHeight;
   BuildScheme;
   RedrawAll;
end;
 
//-------------- BevelInner -------------------------
function  TkpLogScheme.GetBevelInner: TPanelBevel;
begin Result := inherited BevelInner; end;
procedure TkpLogScheme.SetBevelInner(Value: TPanelBevel);
begin
   if inherited BevelInner <> Value then begin
      inherited BevelInner := Value;
      BuildScheme;
      RedrawAll;
   end;
end;
 
//-------------- BevelOuter -------------------------
function  TkpLogScheme.GetBevelOuter: TPanelBevel;
begin Result := inherited BevelOuter; end;
procedure TkpLogScheme.SetBevelOuter(Value: TPanelBevel);
begin
   if inherited BevelOuter <> Value then begin
      inherited BevelOuter := Value;
      BuildScheme;
      RedrawAll;
   end;
end;
 
//-------------- BevelWidth -------------------------
function  TkpLogScheme.GetBevelWidth: integer;
begin Result := inherited BevelWidth; end;
procedure TkpLogScheme.SetBevelWidth(Value: integer);
begin
   if inherited BevelWidth <> Value then begin
      inherited BevelWidth := Value;
      BuildScheme;
      RedrawAll;
   end;
end;
 
//-------------- BorderWidth -------------------------
function  TkpLogScheme.GetBorderWidth: integer;
begin Result := inherited BorderWidth; end;
procedure TkpLogScheme.SetBorderWidth(Value: integer);
begin
   if inherited BorderWidth <> Value then begin
      inherited BorderWidth := Value;
      BuildScheme;
      RedrawAll;
   end;
end;
 
//-------------- SetOnCustomOp -----------------------
procedure TkpLogScheme.SetOnCustomOp(Value: TCustomOpEvent);
var i: integer;
    LE: TkpLogElement;
begin
   FOnCustomOp := Value;
   for i:=0 to ControlCount-1 do
     if Controls[i] is TkpLogElement then begin
        LE := TkpLogElement(Controls[i]);
        LE.OnCustomOp := Value;
     end;
end;
 
//---------------- SetLogElCOlor ---------------
procedure TkpLogScheme.SetLogElColor(Value: TColor);
var i: integer;
    LE: TkpLogElement;
begin
   if FLogElColor = Value then Exit;
   FLogElColor := Value;
   for i:=0 to ControlCount-1 do
     if Controls[i] is TkpLogElement then begin
        LE := TkpLogElement(Controls[i]);
        LE.Color := Value;
     end;
end;
 
//---------------- REGISTER ---------------------------
procedure Register;
begin
  RegisterComponents('KP', [TkpLogScheme]);
  RegisterPropertyEditor(TypeInfo(TStrings), TkpLogScheme, 'MapList', nil);
end;
 
end.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
04.06.2013, 19:49
...дело не в чужой программе, а вашей неосвоенности работы со средой компиляции, справкой и прилагаемым описанием.

Компоненты необходимо установить, прописать пути или использовать их динамически в проекте. Все нормально компилируется и работает.

0
1 / 1 / 0
Регистрация: 28.04.2013
Сообщений: 65
04.06.2013, 20:12  [ТС]
хаха да наверно не разобрался со всем
подскажите в чем моя недороботка
буду благодарен
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
04.06.2013, 20:35
Да хоть хи-хи, приведенные ошибки пишут вам явно, что не объявлен соответствующий идентификатор. Вы уж, если и берете чужой проект, то не удаляйте из исходного кода то, что там было.

Сравним? Вот что у автора:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Label2: TLabel;
    kpLogScheme1: TkpLogScheme;
    AnimCB: TCheckBox;
    s1CB: TCheckBox;
    s2CB: TCheckBox;
    s3CB: TCheckBox;
    s4CB: TCheckBox;
    t2CB: TCheckBox;
    t1CB: TCheckBox;
    Memo1: TMemo;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure s1CBClick(Sender: TObject);
    procedure kpLogScheme1Change(Sender: TObject);
    procedure AnimCBClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
...
А вот, что у вас:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, kpLogElement, StdCtrls, kpLogScheme, kpPipeline;
 
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Label2: TLabel;
    AnimCB: TCheckBox;
    s1CB: TCheckBox;
    s2CB: TCheckBox;
    s3CB: TCheckBox;
    s4CB: TCheckBox;
    t2CB: TCheckBox;
    t1CB: TCheckBox;
    Memo1: TMemo;
    Button1: TButton;
    s5CB: TCheckBox;
    t3CB: TCheckBox;
    t4CB: TCheckBox;
    t5CB: TCheckBox;
    t6CB: TCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure s1CBClick(Sender: TObject);
    procedure kpLogScheme1Change(Sender: TObject);
    procedure AnimCBClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
...
В остальном полагается приводить в теме проект полностью и рассказывать чего делали, как ставили или не ставили. Ферштеен?
0
1 / 1 / 0
Регистрация: 28.04.2013
Сообщений: 65
04.06.2013, 21:50  [ТС]
да все понял спасибо

Добавлено через 1 час 9 минут
в чем суть ошибки
http://gyazo.com/efcbd5b854b5769fe0dbf5800def21e1
http://gyazo.com/ceb2739674831d8ce1ffedd28c8c3fd9
0
04.06.2013, 22:12
 Комментарий модератора 
Правила форума:

4.12. Картинки и любые другие файлы загружайте на форум, во избежание их удаления или потери на сторонних ресурсах.
0
1 / 1 / 0
Регистрация: 28.04.2013
Сообщений: 65
05.06.2013, 08:00  [ТС]
исправил
Миниатюры
Разработка программы-эмулятора электронных схемотехнических компонентов   Разработка программы-эмулятора электронных схемотехнических компонентов  
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
05.06.2013, 09:47
...вы открыли проект автора или копируете в свой?
0
1 / 1 / 0
Регистрация: 28.04.2013
Сообщений: 65
06.06.2013, 09:58  [ТС]
проект автора...
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
06.06.2013, 10:08
...если вы корректно установили компоненты (в одном из модулей нужно удалить из секции uses устаревший модуль designintf) и прописали пути и ничего не меняли в проекте, то проект должен работать.
0
1 / 1 / 0
Регистрация: 28.04.2013
Сообщений: 65
06.06.2013, 21:58  [ТС]
ну я удалял етот модуль и закачал его для делфи7 но проблема осталась
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
06.06.2013, 23:18
...мда. Перевел один из прожектов на динамическое использование модулей (удалите у себя эти компоненты, должно работать без установки):
Вложения
Тип файла: zip Example_dynamic.zip (252.9 Кб, 21 просмотров)
0
1 / 1 / 0
Регистрация: 28.04.2013
Сообщений: 65
07.06.2013, 17:55  [ТС]
хмм теперь работает...
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
07.06.2013, 18:35
Это говорит о том, что ранее вы некорректно устанавливали компоненты.
0
1 / 1 / 0
Регистрация: 28.04.2013
Сообщений: 65
16.06.2013, 12:18  [ТС]
я тут подумал немного упростить(как мне кажется) задание

в комбобоксе выбираем лог.елемент , вставляется картинка и вызывается процедура, но вот с процедурой както застрял

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
if combobox1.Text='І-НЕ' then   noand;
 
end;
 
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 
IF CheckBox1.Checked  Then Edit1.Text := '1' else Edit1.Text := '0';
 
end;
 
 
 
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
 
IF CheckBox2.Checked  Then Edit2.Text := '1' else Edit2.Text := '0';
end;
 
Procedure  tform1.noand ();
 begin
   image1.picture.LoadFromFile('1.bmp')    ;
  
 if (Edit1.Text = '1')  and (Edit2.Text = '1') then Edit3.Text := '0'  else Edit3.Text := '1';
 if Edit3.Text = '1'  then  checkbox3.Checked else checkbox3.Checked:=false;
 
   end;
end.
хотелось бы что б когда было две 1 на входе стал 0 на выходе в строке и в чекбоксе
или хотяб както объясните логику роботы с чекбоксамы
Миниатюры
Разработка программы-эмулятора электронных схемотехнических компонентов  
0
1 / 1 / 0
Регистрация: 28.04.2013
Сообщений: 65
17.06.2013, 10:06  [ТС]
есть соображения ? а то я никак

Добавлено через 2 часа 11 минут
доделал

Добавлено через 12 часов 27 минут
почти все работает
осталось сделать форму входа
и чтото о5 застрял
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.FormShow(Sender: TObject);
begin
 if FPSW.ShowModal <> mrOk
then Close
else
    if FPSW.Edit1.Text  <> '1111'
then Close;
FPSW. Free;
 
end;
етот код работал в лабораторной что я недавно делал
а теперь кнопка не реагирует.... вроде все также
0
1 / 1 / 0
Регистрация: 28.04.2013
Сообщений: 65
25.06.2013, 09:03  [ТС]
ладно всем спасибо
тему можно закрыть
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.06.2013, 09:03
Помогаю со студенческими работами здесь

Разработка приложений с использованием стандартных и дополнительных компонентов. Динамическое создание компонентов.
Здравствуйте! Помогите мне, пожалуйста. Условие задачи состоит в следующем: из списка выбираю фигуру(например, круг). Далее открывается...

Разработка эмулятора вычислительной машины в классической архитектуре Фон Неймана
Написать эмулятор вычислительной машины в классической архитектуре фон Неймана, которая реализует небольшой набор команд. Список команд...

Разработка протоколов электронных платежей для АСУ безопасностью предприятия
нужна простая программа протоколов электронных платежей для автоматизированной системы управления безопасностью предприятия помогите...

Алгоритм написания программы для электронных весов
Никогда не писал программ больше 100 строк, поэтому не понимаю как написать, что в какой последовательности должно работать. Необходимо...

Не запускаются программы для чтения электронных книг
Запускаю Акробат ридер он моргнул и все... Ни дну эл книгу не могу открыть((( В чем дело? И DJVU Reader тоже ошибки пишет при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru