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

Вниз

Определить тип данных   Найти похожие ветки 

 
sniknik ©   (2014-03-25 13:20) [40]

+
Procedure Proc1(a: word); Begin {код}end;
и
Procedure Proc1(a, б: byte); Begin {код}end;
не отличаются в стиле передачи параметра, и там и там будет задействован регистр AX, т.е. если подменить формальное описание при работе с dll например, то можно задать для первого 2мя переменным а для второго наоборот одной... для компа без разницы.
просто это МЫ ПРИНИМАЕМ что в первом случае с ним работаем как с целым, а во втором как с двумя половинками... НАМ, людям, так удобнее.


 
sniknik ©   (2014-03-25 13:21) [41]

> sniknik, а мне нужно чтобы Int64 иммела свой ИД нужного диапазона и далее их использовать как метки т.е если
а мне нужен дворец на багамах и гарем из 365 наложниц... но реальность она несколько иная.


 
Ega23 ©   (2014-03-25 13:22) [42]

type

 TMyInt64 = record
   ID: Int64;
 end;

procedure Foo(Value: TMyInt64);
begin
 if Value.ID - размеченная then
   Proc1(Value.ID)
 else
   ShowMessage(неразмечаена переменная)
end;


И теперь сама Proc1 может принимать любые значения Int64, а вот Foo - уже только то, что ты туда осознанно передал.


 
Ega23 ©   (2014-03-25 13:24) [43]


> и гарем из 365 наложниц


Выходные только по високосным годам?


 
clickmaker ©   (2014-03-25 13:26) [44]

> Выходные только по високосным годам?

одна из наложниц по двойной ставке работает


 
Inovet ©   (2014-03-25 13:33) [45]

> [42] Ega23 ©   (25.03.14 13:22)
> TMyInt64 = record
>   ID: Int64;
> end;

Тогда уж класс MyID с конструкторами, сетерами и гетерами. Хм, 365 штук, да.


 
clickmaker ©   (2014-03-25 13:34) [46]

> Тогда уж класс MyID с конструкторами, сетерами и гетерами.
> Хм, 365 штук

с блэкджеком и шлюхами. 365 штук


 
Сергей   (2014-03-25 13:47) [47]

Ega23, ты знаешь мысль очень хорошая(!) сделать через  TmyInt64. Спасибо большое!
Вот только...
Например вот так у меня получится...
 TMyInt64 = record    ID: Int64;   end;
Procedure Proc1 (Value:: Variant)
begin
case VarType(Value) of
   TMyInt64   :  ShowMessage("Это переменная TmyInt64 проверить размеченность Value.ID  и т.д.");
   else      ShowMessage(“Обычное Числовое значение НЕ TmyInt64 ”);
 end;
ПРАВИЛЬНО ЛИ Я НАПИСАЛ? (еще не проверял)
Будут ли “хаваться” и определяться при:
Var   I64:TMyInt64;
Proc1( I64);
Proc1(56234);


 
clickmaker ©   (2014-03-25 13:54) [48]

> Будут ли “хаваться”

не будут. Потому что для Variant не определен TMyInt64.
Если TMyInt64 сделать классом, то можно юзать if (Value is TMyInt64)


 
Ega23 ©   (2014-03-25 13:59) [49]


> Сергей   (25.03.14 13:47) [47]
>
> Ega23, ты знаешь мысль очень хорошая(!) сделать через  TmyInt64.
>  Спасибо большое!
> Вот только...


Блин. Ну ты опять через задницу всё переиначил.

Давай с самого начала: какая стоит задача? Глобальная.


 
Сергей   (2014-03-25 14:07) [50]

Ega23,
Так... :-) Первый шаг сделан: TMyInt64 = record    ID: Int64;   end; размечаем глобально.
Нужно сделать процедуру Proc1 (а таких процедур будет не одна) которая будет “хавать” обычные числа и данные типа TmyInt64! внутри Proc1  чтобы можно было разобраться - это данные  типа TmyInt64 или это другие данные (числовые других переменных, (не особо важно))
Вот так теперь стоит вопрос.


 
Сергей   (2014-03-25 14:20) [51]

clickmaker, ну вот пробы сделал через  Class а не через record вот только число оно "хавать" не хочет

Type TlvLabel=Class ID:int64;end;
Var m1:TlvLabel;

Procedure Proc1(Value:TObject);
Begin
    if (Value is TlvLabel)  then Begin end;//  ShowMessage("Это переменная TmyInt64 проверить размеченность Value.ID  и т.д.");
   //else      ShowMessage(“Обычное Числовое значение”);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Proc1(m1);
Proc1(2333);
end;


 
brother ©   (2014-03-25 14:21) [52]

те с миру по нитке и накодишь?


 
Сергей   (2014-03-25 14:27) [53]

brother, ну раз так получается...    дак шож делать :-)


 
Jeer ©   (2014-03-25 14:35) [54]

>дак шож делать :-)

Брось дурью маяться - есть места на замену гастарбайтеров.
Адресок могу подсказать.


 
clickmaker ©   (2014-03-25 14:38) [55]

> только число оно "хавать" не хочет

ну сделай боксинг, если уж знаешь толк в извращениях
Proc1(TObject(2333));


 
MBo ©   (2014-03-25 14:39) [56]

Про проблему X-Y-Z уже вспоминали?


 
Inovet ©   (2014-03-25 14:41) [57]

> [56] MBo ©   (25.03.14 14:39)
> Про проблему X-Y-Z уже вспоминали?

А то. В самом начале ещё.


 
Сергей   (2014-03-25 14:43) [58]

Причем тут извращения...
Можно ли сделать чтобы процедура «хавала» данные (числовые) и типы мной созданные ? А внутри процедуры их отличать ?


 
brother ©   (2014-03-25 14:52) [59]

> процедура «хавала»

я думал разговор там про пипл... а тут (


 
Ega23 ©   (2014-03-25 15:04) [60]


> Ega23,
> Так... :-) Первый шаг сделан: TMyInt64 = record    ID: Int64;
>    end; размечаем глобально.
> Нужно сделать процедуру Proc1 (а таких процедур будет не
> одна) которая будет “хавать” обычные числа и данные типа
> TmyInt64! внутри Proc1  чтобы можно было разобраться - это
> данные  типа TmyInt64 или это другие данные (числовые других
> переменных, (не особо важно))
> Вот так теперь стоит вопрос.


Нет. Вопрос стоит не так. Это - твоё видение решения некой задачи. Следствие, так сказать.
Я же тебя спрашивал про задачу. Какова причина "размечания"?


 
RWolf ©   (2014-03-25 15:13) [61]


> [60]

я так понял топикстартера, что это банально переменная, которой никто ничего не присвоил. Решение в лоб — Variant.


 
Ega23 ©   (2014-03-25 15:16) [62]


> я так понял топикстартера, что это банально переменная,
> которой никто ничего не присвоил. Решение в лоб — Variant.


Было уже. Он чего-то другого хочет.


 
clickmaker ©   (2014-03-25 15:23) [63]

да уже практически всё было
- variant
- tobject
- max, min
Осталось предложить индусский народный метод: переводить число в строку и проверять длину


 
Сергей   (2014-03-25 17:26) [64]

Ega23, причина размечания в том, что каждая переменная должна быть как метка (на таблицу) и каждая из процедур Proc1, Proc2 и т.д. должна принимать числовое значение и метку,  а также "понимать", что  это числовое значение или метка. И вот если сделать Var a, b:int64; и забыть присвоить им уникальный ИД, (нужного диапазона) запустить в Proc1,Proc2 и т.д. то процедуры не будут видеть разницу между a и b и "0". Вот почему я изначально задал вопрос: Можно ли прицедуре понимать что это Int64, а не просто числовое значение.
Type TlvLabel=Class ID:int64;end; Var A:TlvLabel - идея хорошая! тем более,что случано не присвоишь A:=234; - Это очень даже к стати! Но теперь вопрос как добиться что-бы в процедуру можно было "заганять" TlvLabel и числовые значения ? а внутри процедур определять  мол это TlvLabel или просто число.


 
RWolf ©   (2014-03-25 17:35) [65]

в [2] ответ прозвучал уже.


 
Inovet ©   (2014-03-25 17:40) [66]

> [64] Сергей   (25.03.14 17:26)

Не надо разные сущности через одну дырку в процедуру пропускать а вней потом определять что там пришло.

Должны быть вместе ID : TMyID и Val : Int64 к нему привязанное - делай класс с двумя такими полями, может, и рекорд хватит. Его и передавай в процедуру. О чём тебе всю ветку с разных сторон пытаются объяснить. Всё, ничего постороннего в процедуру не попадёт, а непротиворечивость ID и Val отслеживай в самом классе. А может окажется, что и этой обсуждаемой процедуре самое место в этом самом классе.


 
Сергей   (2014-03-25 18:00) [67]

Всем спасибо за внимание и участие. Но это всё не ТО что нужно. У меня всё работает нормально и всё процедуры,а их более 200 построены на этом. Беда только в том что переменной забываешь делать GetID(Val) чтобы ей Val присваивался уникальный ИД в (нужном диапазоне) и получаешь "коварный удар", что процедуры её воспринимают как число, как ноль и нет разницы между переменными Val1 и Val2 если они равны нулю. Да и как я вас понял, понять, что это не ноль, а переменная тоже невозможно. Надоело получать такие "удары". Я думал может это как-то можно решить т.е. так как хотелося-бы.
Еще раз всем спасибо за внимание.


 
Sha ©   (2014-03-25 21:00) [68]

опиши задачу на уровень выше, что надо сделать, а не то как ты это делаешь


 
Сергей   (2014-03-25 22:35) [69]

Да всё уже! - Не нужно! Спасибо! Тема закрыта.
Я уже свои мысли перестроил! т. е. действительно верно было сказано, что разные типы данных нужно и «толкать» разным процедурам, а не в смесь в одну! тем более не так уж их и много процедур которые надо будет переделывать, да и не сложно . А с этим проблем нет.
В будущем понадобится разобраться с конструкторами если можно киньте ссылку на простейший пример. т. е. нужно будет Proc1 использовать как Proc1(a:int64); Proc1(a,b:int64); Proc1(a,b,c:int64);
т.е. Чтобы одну процедуру можно было использовать с разным количеством одинаковых параметров. Такое сложно сделать ? Через конструктор как-то ?


 
Sha ©   (2014-03-25 22:43) [70]

"Overload" F1 "Overloading procedures and functions"


 
Сергей   (2014-03-25 23:13) [71]

Sha, СПАСИБО!
Хм... неужели всё так просто, т.е. дописуй к процедуре overload; и всё будет в порядке!



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

Форум: "Начинающим";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.046 c
2-1395039984
Васька
2014-03-17 11:06
2015.09.10
автоподбор высоты ячейки в Excel


15-1419197402
Юрий
2014-12-22 00:30
2015.09.10
С днем рождения ! 22 декабря 2014 понедельник


15-1422271890
alexdn
2015-01-26 14:31
2015.09.10
Требуется модератор


2-1394781921
Alex_C
2014-03-14 11:25
2015.09.10
Своя отрисовка TMemo


2-1397650643
dima4202
2014-04-16 16:17
2015.09.10
Вход на сайт





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский