Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.058 c
2-1167949022
alll
2007-01-05 01:17
2007.01.21
Работа с компонентами Delphi


15-1166961630
Ученик чародея
2006-12-24 15:00
2007.01.21
Теория пяти процентов


8-1148115190
_fox
2006-05-20 12:53
2007.01.21
wglCreateContext возвращает ошибку


3-1162197950
Alexey123
2006-10-30 11:45
2007.01.21
Обработка ошибок MS SQL


2-1167906518
igor66613
2007-01-04 13:28
2007.01.21
Кнопка из ДЛЛ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский