Elementaren vapros

7 отговора 273 прегледа
#1

Elementaren vapros

Как да извикам функция която се намира в друг Unit?
Програмата ми има 3 Units. Не мога да извикам функция от друг Unit. Може би бъркам в синтаксиса, но незнам къде е причината.

Отговор
в отговор на PeteRHR #2

Елементарен отговор

По следния начин:

unit_name.function (...)

За да може обаче да се ползва unit, той трябва да се опише в клаузата uses в секцията interface, демек :

interface

uses unit;

Забавно става обаче, когато имаме например 2 юнита, и те се извикват един друг, например:

{ unit 1 }

interface

uses unit2;

тогава uses в unit 2 трябва да бъде в секцията implementation:

{ unit 2 }

interface

...


implementation

uses unit1;

чети и дишай по-леко
Отговор
в отговор на Pechenia #3

Re: Елементарен отговор

Мерси за отговора. Пробвах го и стана.

Имам и един допълнителен въпрос.

Имам Unit1 - основна програма
Unit 3 - Form3 - Допълнителен прозорец

Искам от Unit1 да извикам функция в Unit3 и да използвам полета от Unit3(например RadioButton).
Как е възможно да стане това?

Отговор
в отговор на PeteRHR #4

Re: Елементарен отговор


unit Unit1;

interface
....
implementation
uses
Unit3;

....
procedure TForm1.Button1Click( Sender : TObject );
begin
if Form3.RadioButton1.Checked then
// do something
end;
....


Но две забелжки:
1. Form3 трябва да е auto-create
2. Това е изключително лош стил на програмиране под Delphi.

А защо според мен това е лош стил:
1. Autocreate формите заемат много памет.
2. По принцип използването на глобални променливи (Form3) е лош стил.
3. А и да не говорим, ако смениш името на Form3 или на RadioButton1
4. И въобще, като видя програма с идентификатори от сорта Form1, Form2, Button1, както е казал Гьобелс, се хващам за кобура.

Последно: Delphi-то е мощна RAD среда, но не трябва да се забравят такива неща, като стил и елегантност например.

---
Не е важно да си добър, важното е да си ман-и-як!

Редактирано от ess на

Отговор
в отговор на ess #5

Re: Елементарен отговор

Хмх, само че ако ми кажат, че нещото е с лош стил, но не ми кажат какъв е добрия стил, това няма да ме накара да си сменя подхода, нали?

Btw, хубаво е първото нещо, което да направиш PeteRHR е да смениш името на RadioGroup1 към rGroupColors (напирмер), защото като станат 5 радио групи ще започнеш да губиш ориентация и време. И едно малко пояснение:

ако обявиш Uses Unit3 в интерфейсната част на Unit1 (под interface), тогава всички юнити ползващи Unit1 ще ползват и Unit3, докато ако обявяването е в имплементационната част (под implementation) това няма да е така. За това и е грешно Unit1 да ползва Unit3 в interface и Unit3 да ползва Unit1 също в interface - така излиза, че Unit1 се нуждае от Unit3 за да работи, но в Unit3 е опоменато, че всички негови ползватели ползват и Юнит1 => юнит1 ползва самия себе си........ така до безкрай.

-------------
Искам да знам какво мисли Бог - останалото са подробности. (Einstein)
Отговор
в отговор на PeteRHR #6

Re: Elementaren vapros

Мерси за съветите. Аз тепърва започвам да се уча на Delphi и програмите са ми малки и засега не съм се забъркал :))). Сигурно и това ще стане.

Кажете как да сменя цвета само на една клетка в StringGrid

Отговор
в отговор на PeteRHR #7

Re: Elementaren vapros

Ето един хубав линк...
[линк]

чети и дишай по-леко
Отговор
в отговор на Pechenia #8

Re: Елементарен отговор

IMHO в секцията interface - само по изключение. Нормалното е в implementation.

Отговор