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

Вниз

Как работать с неизвестным типом данных?   Найти похожие ветки 

 
jiurasic ©   (2004-04-24 18:18) [0]

Есть компонент, у которого одно из свойств может принимать фиксированные значения.Эти значения не согласуются ни с одним из типов данных дельфи. Как мне посмотреть равно ли данное значение чему-либо.

Cв-во имеет вид:

type TCellBorderStyle = (cbsNone,cbsThin,cbsMedium,cbsDashed,cbsDotted,cbsThick,
                        cbsDouble,cbsHair,cbsMediumDashed,cbsDashDot,cbsMediumDashDot,
                        cbsDashDotDot,cbsMediumDashDotDot,cbsSlantedDashDot);

Вот мне к примеру необходиму узнать имеет ли оно значение "cbsThin"
Это должно выглядеть примерно:
If CellBorderStyle="cbsThin" then ...

Как это реализовать?


 
jiurasic ©   (2004-04-24 18:18) [0]

Есть компонент, у которого одно из свойств может принимать фиксированные значения.Эти значения не согласуются ни с одним из типов данных дельфи. Как мне посмотреть равно ли данное значение чему-либо.

Cв-во имеет вид:

type TCellBorderStyle = (cbsNone,cbsThin,cbsMedium,cbsDashed,cbsDotted,cbsThick,
                        cbsDouble,cbsHair,cbsMediumDashed,cbsDashDot,cbsMediumDashDot,
                        cbsDashDotDot,cbsMediumDashDotDot,cbsSlantedDashDot);

Вот мне к примеру необходиму узнать имеет ли оно значение "cbsThin"
Это должно выглядеть примерно:
If CellBorderStyle="cbsThin" then ...

Как это реализовать?


 
Игорь Шевченко ©   (2004-04-24 18:22) [1]


> if CellBorderStyle="cbsThin"


var
 CellBorderStyle: TCellBorderStyle;
...
 if CellBorderStyle = cbsThin then
   ...


 
Игорь Шевченко ©   (2004-04-24 18:22) [1]


> if CellBorderStyle="cbsThin"


var
 CellBorderStyle: TCellBorderStyle;
...
 if CellBorderStyle = cbsThin then
   ...


 
jiurasic ©   (2004-04-24 18:37) [2]

Так не получается т.к. Delphi не знает что такое : TCellBorderStyle, так что таким образом переменную обьявить не удается


 
jiurasic ©   (2004-04-24 18:37) [2]

Так не получается т.к. Delphi не знает что такое : TCellBorderStyle, так что таким образом переменную обьявить не удается


 
DVM ©   (2004-04-24 18:39) [3]


> Так не получается т.к. Delphi не знает что такое : TCellBorderStyle

Объявите этот тип и все всё будут знать.


 
DVM ©   (2004-04-24 18:39) [3]


> Так не получается т.к. Delphi не знает что такое : TCellBorderStyle

Объявите этот тип и все всё будут знать.


 
jiurasic ©   (2004-04-24 18:47) [4]

Пробовал следующем образом:

private
   function ColToText(Col: integer): string;
 public
   { Public declarations }
 end;

type TCellBorderStyle = (cbsNone,cbsThin,cbsMedium,cbsDashed,cbsDotted,cbsThick,
                       cbsDouble,cbsHair,cbsMediumDashed,cbsDashDot,cbsMediumDashDot,
                       cbsDashDotDot,cbsMediumDashDotDot,cbsSlantedDashDot);


var
 frmMain: TfrmMain;

implementation

{$R *.dfm}

.....

aaa:TCellBorderStyle;

Begin
If ......BorderLeftStyle =aaa then

Delphi выдает ошибку:э
Main.pas(103): Incompatible types: "CellFormats.TCellBorderStyle" and "Main.TCellBorderStyle"

Видимо я что-то делаю не так. Что?


 
jiurasic ©   (2004-04-24 18:47) [4]

Пробовал следующем образом:

private
   function ColToText(Col: integer): string;
 public
   { Public declarations }
 end;

type TCellBorderStyle = (cbsNone,cbsThin,cbsMedium,cbsDashed,cbsDotted,cbsThick,
                       cbsDouble,cbsHair,cbsMediumDashed,cbsDashDot,cbsMediumDashDot,
                       cbsDashDotDot,cbsMediumDashDotDot,cbsSlantedDashDot);


var
 frmMain: TfrmMain;

implementation

{$R *.dfm}

.....

aaa:TCellBorderStyle;

Begin
If ......BorderLeftStyle =aaa then

Delphi выдает ошибку:э
Main.pas(103): Incompatible types: "CellFormats.TCellBorderStyle" and "Main.TCellBorderStyle"

Видимо я что-то делаю не так. Что?


 
Nikolay M. ©   (2004-04-24 18:53) [5]

Тип TCellBorderStyle объявлен два раза: в модуле Main и CellFormats. Подозреваю, что первое объявление - лишнее.


 
Nikolay M. ©   (2004-04-24 18:53) [5]

Тип TCellBorderStyle объявлен два раза: в модуле Main и CellFormats. Подозреваю, что первое объявление - лишнее.


 
jiurasic ©   (2004-04-24 19:01) [6]

нет, дело не вэтом


 
jiurasic ©   (2004-04-24 19:01) [6]

нет, дело не вэтом


 
Nikolay M. ©   (2004-04-24 19:30) [7]


> нет, дело не вэтом

Откуда уверенность?


 
Nikolay M. ©   (2004-04-24 19:30) [7]


> нет, дело не вэтом

Откуда уверенность?


 
DVM ©   (2004-04-24 21:27) [8]

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


 
DVM ©   (2004-04-24 21:27) [8]

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


 
Jack128 ©   (2004-04-24 22:03) [9]


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


> jiurasic ©  
uses Windows, ..., CellFormats;


 
Jack128 ©   (2004-04-24 22:03) [9]


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


> jiurasic ©  
uses Windows, ..., CellFormats;


 
Юрий Зотов ©   (2004-04-24 23:10) [10]

> DVM © (24.04.04 21:27) [8]
> Дело в параноидальности Делфи местами

Подобные утверждения звучали на этом форуме очень много раз. Но потом почему-то выяснялось, что дело вовсе не в Delphi, а в ее незнании.

Что касается сабжа, то это именно тот случай.

> jiurasic ©   (24.04.04 19:01) [6]
> нет, дело не в этом

Как раз в этом все дело и есть.


 
Юрий Зотов ©   (2004-04-24 23:10) [10]

> DVM © (24.04.04 21:27) [8]
> Дело в параноидальности Делфи местами

Подобные утверждения звучали на этом форуме очень много раз. Но потом почему-то выяснялось, что дело вовсе не в Delphi, а в ее незнании.

Что касается сабжа, то это именно тот случай.

> jiurasic ©   (24.04.04 19:01) [6]
> нет, дело не в этом

Как раз в этом все дело и есть.


 
evvcom ©   (2004-04-24 23:48) [11]


> TCellBorderStyle вынести наружу из того класса, где он сейчас
> находится.


Вообще-то типы внутри класса не объявляются.


 
evvcom ©   (2004-04-24 23:48) [11]


> TCellBorderStyle вынести наружу из того класса, где он сейчас
> находится.


Вообще-то типы внутри класса не объявляются.


 
DVM ©   (2004-04-25 00:01) [12]


> Вообще-то типы внутри класса не объявляются.

Сорри, я выразился некрасиво. Имелось ввиду вынести описание этого типа из того модуля в котором тот класс в отдельный модуль.


> Jack128 ©   (24.04.04 22:03) [9]
>
> > Дело в параноидальности Делфи местами. Иногда компилятор
>
> > считает разными абсолютно одинаковые типы.
> Пример, пожалуйста.

Пример:
var
 a:^integer;
 b:^integer;
....
a:=b; // несовместимость по типу. Странно ведь да. В C++ такого нет. Вот что я назвал параноидальностью - строгую (излишне?) типизацию.


 
DVM ©   (2004-04-25 00:01) [12]


> Вообще-то типы внутри класса не объявляются.

Сорри, я выразился некрасиво. Имелось ввиду вынести описание этого типа из того модуля в котором тот класс в отдельный модуль.


> Jack128 ©   (24.04.04 22:03) [9]
>
> > Дело в параноидальности Делфи местами. Иногда компилятор
>
> > считает разными абсолютно одинаковые типы.
> Пример, пожалуйста.

Пример:
var
 a:^integer;
 b:^integer;
....
a:=b; // несовместимость по типу. Странно ведь да. В C++ такого нет. Вот что я назвал параноидальностью - строгую (излишне?) типизацию.


 
DrPass ©   (2004-04-25 00:08) [13]


> Вот что я назвал параноидальностью - строгую (излишне?)
> типизацию.

Это не излишне строгая типизация, а всего лишь приучение к хорошему стилю программирования :)
Что касается сабжа, проблема решается всего лишь явным приведением типов


 
DrPass ©   (2004-04-25 00:08) [13]


> Вот что я назвал параноидальностью - строгую (излишне?)
> типизацию.

Это не излишне строгая типизация, а всего лишь приучение к хорошему стилю программирования :)
Что касается сабжа, проблема решается всего лишь явным приведением типов


 
evvcom ©   (2004-04-25 00:10) [14]

^integer и ^integer действительно считаются разными типами, но это не паранойя Дельфи. По-твоему, что компилятору только и делать, что сравнивать, а на что похож новый, только что объявленный тип?

Стандартно в Дельфи объявлен тип
type
 PInteger = ^Integer;

Поэтому не надо изобретать велосипед и попросту объявляй a и b переменными типа PInteger.


 
evvcom ©   (2004-04-25 00:10) [14]

^integer и ^integer действительно считаются разными типами, но это не паранойя Дельфи. По-твоему, что компилятору только и делать, что сравнивать, а на что похож новый, только что объявленный тип?

Стандартно в Дельфи объявлен тип
type
 PInteger = ^Integer;

Поэтому не надо изобретать велосипед и попросту объявляй a и b переменными типа PInteger.


 
Германн ©   (2004-04-25 02:19) [15]

По-моему (продолжаем телепировать), более всего прав Jack128 ©   (24.04.04 22:03) [9]
Всего лишь нужно в uses указать тот модуль, в котором описан сей тип!


 
Германн ©   (2004-04-25 02:19) [15]

По-моему (продолжаем телепировать), более всего прав Jack128 ©   (24.04.04 22:03) [9]
Всего лишь нужно в uses указать тот модуль, в котором описан сей тип!


 
Юрий Зотов ©   (2004-04-25 07:52) [16]

> DrPass ©   (25.04.04 00:08) [13]

> Вот что я назвал параноидальностью - строгую (излишне?)
> типизацию.

А я бы назвал это огромным достоинством. Если я хочу сделать типы A и B совместимыми, то никто не мешает мне объявить для них общий тип. А вот как быть, если я хочу сделать их как раз несовместимыми? В Паскале это делается запросто. Запросто можно работать и с несовместимыми типами, приведя их к общему в явном виде.

Строгая типизация - это не ограничение Ваших возможностей (их никто и не ограничивает), а страховка Вас же от ошибок. Молиться надо, что она есть. И это Вам скажет любой, кто не поспал недельку-другую в поисках неизвестно откуда взявшейся ошибки, вызванной неаккуратной работой с данными разных типов при их автоматическом приведении.


 
Юрий Зотов ©   (2004-04-25 07:52) [16]

> DrPass ©   (25.04.04 00:08) [13]

> Вот что я назвал параноидальностью - строгую (излишне?)
> типизацию.

А я бы назвал это огромным достоинством. Если я хочу сделать типы A и B совместимыми, то никто не мешает мне объявить для них общий тип. А вот как быть, если я хочу сделать их как раз несовместимыми? В Паскале это делается запросто. Запросто можно работать и с несовместимыми типами, приведя их к общему в явном виде.

Строгая типизация - это не ограничение Ваших возможностей (их никто и не ограничивает), а страховка Вас же от ошибок. Молиться надо, что она есть. И это Вам скажет любой, кто не поспал недельку-другую в поисках неизвестно откуда взявшейся ошибки, вызванной неаккуратной работой с данными разных типов при их автоматическом приведении.



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

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

Наверх




Память: 0.54 MB
Время: 0.035 c
1-1082027236
$tranger
2004-04-15 15:07
2004.05.09
Закладка "SERVICES"


14-1081675172
GanibalLector
2004-04-11 13:19
2004.05.09
Кличко


3-1081755726
Lika
2004-04-12 11:42
2004.05.09
SQL


3-1081882753
fatman
2004-04-13 22:59
2004.05.09
совместная работа с БД MS ACCESS двух приложений


14-1082047233
Detonator
2004-04-15 20:40
2004.05.09
Работа с POP3-сервером





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