Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

Передача массива в процедуру   Найти похожие ветки 

 
RomanH ©   (2006-12-29 12:28) [0]

Всем доброго дня. Все таки я решил написать свой "навороченный DBGrid", наследовав  TRxDBGrid. И мне нужно знать как передать в процедуру массив типа integer;


 
Desdechado ©   (2006-12-29 12:31) [1]

type TIntArray = array of integer;


 
evvcom ©   (2006-12-29 12:35) [2]

Причем в D7 уже есть определение типа TIntegerDynArray.


 
RomanH ©   (2006-12-29 12:45) [3]

Мастера никак не пойму.
То есть я описываю метод:
TMyGrid.Resize(а здесь я должен вписать динамический массив )/

Что мне вписывать?


 
Elen ©   (2006-12-29 12:47) [4]

TMyGrid.Resize(a:array of variant)


 
evvcom ©   (2006-12-29 12:48) [5]

> [4] Elen ©   (29.12.06 12:47)

TMyGrid.Resize(a:TIntegerDynArray);


 
Рамиль ©   (2006-12-29 12:49) [6]

В [1] и [2] все сказано. Не знаешь как параметр передать в метод и что такое type?
Не в обиду, рано тебе писать компоненты.


 
Рамиль ©   (2006-12-29 12:50) [7]


> Elen ©   (29.12.06 12:47) [4]

Не надоело?


 
Игорь Шевченко ©   (2006-12-29 12:52) [8]

Elen ©   (29.12.06 12:47) [4]

Дай отдохнуть фонтану


 
Elen ©   (2006-12-29 12:52) [9]


> Не надоело?

что?


 
Рамиль ©   (2006-12-29 12:55) [10]


> Elen ©   (29.12.06 12:52) [9]

Фигню постить.


 
Elen ©   (2006-12-29 12:58) [11]


> Фигню постить.

Почему фигню? Чем это не так?


 
Игорь Шевченко ©   (2006-12-29 13:04) [12]

Elen ©   (29.12.06 12:58) [11]


> Почему фигню?


Кроме тебя на этот вопрос вряд ли кто-то может ответить


 
evvcom ©   (2006-12-29 13:07) [13]

> [11] Elen ©   (29.12.06 12:58)
> Чем это не так?

Напиши для своего случая рабочий пример, тогда поймешь.


 
Elen ©   (2006-12-29 13:21) [14]


> Напиши для своего случая рабочий пример, тогда поймешь.

Ну вот :

unit EPanel;

interface

uses
 Windows, Messages, SysUtils, Classes, Controls, ExtCtrls;

type
 TEPanel = class(TPanel)
 private
   { Private declarations }
 protected
   { Protected declarations }
 public
  function rz(a:array of integer):integer;
   { Public declarations }
 published
   { Published declarations }
 end;

procedure Register;

implementation

//********* PROCEDURE**********
function TEPanel.rz;
//const
Var i:integer;
begin
  for i:=Low(a) to High(a) do result:=a[i]+result;
end;
//********* END PROCEDURE*******

procedure Register;
begin
 RegisterComponents("Elen", [TEPanel]);
end;

end.


А вот вызов :
caption:=inttostr(EPanel1.rz([1,2,3]));

Уважаемые Господа Мастера, если я чего-то не знаю поделитесь.


 
evvcom ©   (2006-12-29 14:40) [15]

> [14] Elen ©   (29.12.06 13:21)
> EPanel1.rz([1,2,3])

т.е. ты всегда константы передаешь? Или все же чаще переменные? Переменную передай.


 
Elen ©   (2006-12-29 15:04) [16]


> evvcom

Ну вообще-то чаше константы.

Но если имеется ввиду так?

procedure TForm1.EPanel1Click(Sender: TObject);
var u:array of integer;
begin
setlength(u,3);
u[0]:=1;
u[1]:=2;
u[2]:=3;
caption:=inttostr(EPanel1.rz(u));
end;


...то это тоже работает.

Может проведете ликбез, а мастера, ато я себя не в своей тарелке с вашими вопросами чувствую...


 
Anatoly Podgoretsky ©   (2006-12-29 15:10) [17]

> Elen  (29.12.2006 15:04:16)  [16]

Да шутят они


 
Elen ©   (2006-12-29 15:18) [18]


> Да шутят они

А мне уже не до смеха. :( Не ну серьезно, зачем вот так... "Ребята давайте жить дружно" ((с) Леопольд)


 
Elen ©   (2006-12-29 15:19) [19]


> Anatoly Podgoretsky
  Да шутят они

В таком случае некоторым бы извиниться не мешало.


 
evvcom ©   (2006-12-29 15:25) [20]

Действительно с динамическими работает. И тем не менее имеем некоторые ограничения, в которые рано или поздно можем упереться. Потому лучше следовать принятым правилам. Аргументы описывать определенным типом, а не придумывать его на ходу.


 
Anatoly Podgoretsky ©   (2006-12-29 15:29) [21]

> evvcom  (29.12.2006 15:25:20)  [20]

Тебе привели пример, не надо много ума, чтобы заменить A: array of varint, на A: type


 
Elen ©   (2006-12-29 15:43) [22]


>  И тем не менее имеем некоторые ограничения,

Так. Поподробнее плиз...


 
evvcom ©   (2006-12-29 15:51) [23]

> [21] Anatoly Podgoretsky ©   (29.12.06 15:29)

угу, согласен

> [22] Elen ©   (29.12.06 15:43)
> Поподробнее плиз...

Контрнаступление? :)))

> function rz(a:array of integer):integer;

var b:array of integer;
begin
b := a; // [Error] Incompatible types
...
end;

Подобные ошибки будут не только с массивами. Это я к тому, если появится желание сказать, что пример надуманный, и на практике вряд ли когда пригодится. :)
Ладно, мир. Я особо и не пытался наезжать вроде?


 
Elen ©   (2006-12-29 16:00) [24]


> Ладно, мир.

Мир конечно ;) (с наступаюшим, кстати!), а с присваиваниями я стараюсь быть особо осторожнее и b := a;, где оба операнда массивы вообше не приемлю, лучше уж цикл или move.

Пример [23] кстати не надуманный, а очень даже правильно предупредительно описанный во многих книгах-мануалах по паскалю. Все авторы, мне попавшиеся предупреждали о таких приколах.


 
Anatoly Podgoretsky ©   (2006-12-29 16:11) [25]

> evvcom  (29.12.2006 15:51:23)  [23]

Так типы разные, ты же не кричишь, что Boolean := string, а здесь почему то наоборот.


 
evvcom ©   (2006-12-29 16:23) [26]

> [24] Elen ©   (29.12.06 16:00)
> с наступаюшим, кстати!

и тебя с наступающим

> где оба операнда массивы вообше не приемлю, лучше уж цикл
> или move.

Смотря для чего они нужны. Если нужна копия данных, то move, если копия указателя, то b := a. Я если не знаю как себя ведет компилятор в каком-то случае, ставлю бряк и Ctrl+Alt+C - это лучший критерий истины :)


 
Anatoly Podgoretsky ©   (2006-12-29 16:30) [27]

> evvcom  (29.12.2006 16:23:26)  [26]

b := a не означает копию указателя


 
evvcom ©   (2006-12-29 16:32) [28]

> [25] Anatoly Podgoretsky ©   (29.12.06 16:11)
> Так типы разные

Именно. Только без знания сего это не очевидно, тогда как с Boolean и string - эта разница очевидна.
Да я и ввязался в этот спор только потому, что интуитивно подумал, что для функций эти типы тоже окажутся разными, что [16] вызовет ошибку компиляции. Ошибочка вышла, потому как сам никогда не пользуюсь такой конструкцией, а определяю сложные типы специальными идентификаторами.



Страницы: 1 вся ветка

Текущий архив: 2007.01.21;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.065 c
3-1162509855
as77
2006-11-03 02:24
2007.01.21
Ошибка в запросе.Дата и параметры


2-1167996534
Neket
2007-01-05 14:28
2007.01.21
Query


15-1167137146
Petr V. Abramov
2006-12-26 15:45
2007.01.21
А не устроить ли предновогоднее ММР


2-1167105483
delphim
2006-12-26 06:58
2007.01.21
использование ehlib в режиме TreeView


2-1167185450
harusha
2006-12-27 05:10
2007.01.21
DLL