Форум: "Основная";
Текущий архив: 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