С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 190
1

Параметр процедуры Variant, когда он строковый, то ветвление внутри процедуры не происходит

28.01.2024, 13:51. Показов 984. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Параметр процедуры Variant когда он строковый то ветвление внутри процедуры не происходит. Может подскажите почему это может быть?
Когда Value: Variant булевая, срабатывает, когда Integer сробавтывает, когда текстовая просто не заходит по ветвлению
end else if VarIsType(Value, varString) then begin
ShowMessage('varString');
Видно на скринах для текста 'ggg'-не заходит в if и другой скрин для Integer- тут заходит в соответвующий if.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//Вызов
SetControl(cbbPartMaterial, FieldByName('PartMaterial').AsString);
SetControl(cbbPartProgrammer, cbbPartProgrammerId.Items.IndexOf(FieldByName('ProgrammerId').AsString));
 
//реализация SetControl 
procedure SetControl(AObject: TObject; const Value: Variant);
begin
.......
 
 end else if AObject IS TComboBox then begin
    if VarIsType(Value, varBoolean) then begin
      if Value then begin
        var temp := TComboBox(AObject).OnChange;
        TComboBox(AObject).OnChange := nil;
        TComboBox(AObject).ItemIndex := 0;
        TComboBox(AObject).OnChange := temp;
      end else begin
        var temp := TComboBox(AObject).OnChange;
        TComboBox(AObject).OnChange := nil;
        TComboBox(AObject).ItemIndex := -1;
        TComboBox(AObject).Text := '';
        TComboBox(AObject).OnChange := temp;
      end;
    end else if VarIsType(Value, varString) then begin
      ShowMessage('varString');
      var temp := TComboBox(AObject).OnChange;
      TComboBox(AObject).OnChange := nil;
      TComboBox(AObject).Text := Value;
      TComboBox(AObject).OnChange := temp;
    end else if VarIsType(Value, varInteger) then begin
      var temp := TComboBox(AObject).OnChange;
      TComboBox(AObject).OnChange := nil;
      TComboBox(AObject).ItemIndex := Value;
      TComboBox(AObject).OnChange := temp;
    end;
  end else if AObject IS TComboBoxEx then begin
...........
end;
Миниатюры
Параметр процедуры Variant, когда он строковый, то ветвление внутри процедуры не происходит   Параметр процедуры Variant, когда он строковый, то ветвление внутри процедуры не происходит  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2024, 13:51
Ответы с готовыми решениями:

Передача даты внутри переменной во входной параметр хранимой процедуры
Добрый день! Есть хранимая процедура, которая на вход принимает 2 даты в формате SMALLDATETIME....

Вызов процедуры внутри процедуры
Здравствуйте, Как правильно это сделать? alter procedure . as BEGIN SELECT DateN FROM...

При вызове процедуры Refresh ошибка: could not convert variant of type n
Почему при вызове процедуры Refresh ошибка на строке DM.VidiQuery.Close; could not convert variant...

Сделать, чтобы в зависимости от выбранного значения внутри Radiogroup менялась функция внутри процедуры rasposn
Мне нужно чтоб в зависимости от выбранного значения внутри радио группа (rgTypeCis) менялась...

параметр, процедуры
Доброго времени суток, помогите с решением задач: Param8. Описать процедуру RemoveX(A, N, X),...

9
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 190
28.01.2024, 14:47  [ТС] 2
Даже так не хочет
Delphi
1
      SetControl(cbbPartMaterial, 'Привет мир');
И так тоже не срабатывает:
Delphi
1
2
3
4
5
6
7
procedure SetControl(AObject: TObject; const Value: Variant);
begin
  if not Assigned(AObject) then
    Exit;
 
    if VarIsType(Value, varString) then
      ShowMessage('Value-varString');
Миниатюры
Параметр процедуры Variant, когда он строковый, то ветвление внутри процедуры не происходит  
0
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
28.01.2024, 23:22 3
есть одна мысля) потому что это не varString )))

Delphi
1
showMessage(VarTypeAsText(Value));
0
Модератор
5103 / 3331 / 535
Регистрация: 01.06.2013
Сообщений: 6,990
Записей в блоге: 9
29.01.2024, 01:52 4
Может быть это varOleStr ?
0
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 190
29.01.2024, 17:36  [ТС] 5
varUString - как оказалось. Зачем в Delphi такое огромное количество типов? Почему все разнообразие строк нельзя приводить к некому типу внутренниму типу String и ShortString программы Delphi?

Философский вопрос...
Почему Delphi копит в себе доисторический мусор?
Мне кажется нужно раз в год выпускать версию. А раз в 5 лет поколение, которое может быть не совместимо с прошлым кодом на 20-30%.
Пример:
Какой смысл иметь функцию Pos и PosEx. ComboBox и ComboBoxEx. Целая куча функций работы со строками под разные кодировки и прочие. Брать лучшую реализацию под старым названием, мусор отбрасывать.

Почему нельзя просто оставить название Pos но реализацию воткнуть от PosEx, очевидно же что это более удобная функция.
0
Модератор
9628 / 6239 / 2422
Регистрация: 21.01.2014
Сообщений: 26,643
Записей в блоге: 3
29.01.2024, 17:51 6
Цитата Сообщение от S0563506 Посмотреть сообщение
очевидно же что это более удобная функция.
Зачастую она просто избыточна...
0
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
29.01.2024, 18:06 7
до сих пор выступают фанатики с криком - зачем сломали Делфи своим юникодом, у нас на заводе программы!!
а прошло уже 15 лет почти)))
0
Constcat
29.01.2024, 19:58
  #8

Не по теме:

Цитата Сообщение от S0563506 Посмотреть сообщение
Философский вопрос...
Почему Delphi копит в себе доисторический мусор?
Пусть берут пример с Apple.
Вот кому уж глубоко наплевать с высокой колокольни на обратную совместимость - так это Appl'у.
"Мы тут выпустили новую ОС. А это значит, что старые версии IDE на ней работать не будут. Скачайте последнюю версию. А с ней - обязательно последний SDK, потому что со старым новый IDE не работает. А в последнем SDK мы решили, что имена констант, которые были раньше, нам больше не нравятся и мы их поменяли. Ну и вы, девелоперы, меняйте их у себя по всему коду. А еще мы выкинули несколько компонентов, потому что мы решили, что не нужно ими пользоваться. Вот вам другой компонент, перепишите все с нуля под него. Спасибо, что вы выбрали MacOS".
И это - не прикол.

0
Модератор
3756 / 2260 / 783
Регистрация: 15.11.2015
Сообщений: 8,994
29.01.2024, 21:11 9
Цитата Сообщение от S0563506 Посмотреть сообщение
А раз в 5 лет поколение, которое может быть не совместимо с прошлым кодом на 20-30%.
Верный путь потерять и без того немногочисленных разработчиков/клиентов.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7795 / 4618 / 2830
Регистрация: 22.11.2013
Сообщений: 13,114
Записей в блоге: 1
30.01.2024, 19:24 10
Цитата Сообщение от S0563506 Посмотреть сообщение
Почему все разнообразие строк нельзя приводить
Почему нельзя? Можно. Разрешаю, приводите:
Delphi
1
  if VarIsType(Value, [varString, varArg, varUString, varUArg, varOleStr, ... ]) then ...
0
30.01.2024, 19:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2024, 19:24
Помогаю со студенческими работами здесь

OUT параметр без процедуры?
Имеется БД и интерфейс к ней. Поставлена задача написать операцию, которая будет брать pgplsql...

Передача EventHandler в параметр процедуры
Здравствуйте, сделал в новом классе (новый файл) процедуру, которая при определенных параметрах...

Параметр процедуры типа Date
Здравствуйте, использую MS VS и SQL Server. У меня есть таблица примерно такого вида: CREATE...

Выходной параметр хранимой процедуры
Здравствуйте, уважаемое сообщество! Мне необходимо выполнить хранимую процедуру и в качестве...

Как изменить параметр процедуры?
Вот такая примерно программа и процедура в ней Program test(input,output); procedure...

функция как параметр процедуры
Задача следующая. Составить программу для решения уравнения f(x)=0 на отрезке от А до В с точностью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru