Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить чему равна переменная с набором set, множества set 
:(
    Опции темы
codexby
  Дата 12.12.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 7.6.2008
Где: minsk

Репутация: нет
Всего: нет



приветствую!

в компоненте EWB функция SearchNextText возращает значение типа TSearchResults, где
TSearchResult = (srNotFound, srEndOf, srFound);
TSearchResults = set of TSearchResult;

как узнать какое значение вернула функция?

спасибо
PM MAIL   Вверх
Rrader
  Дата 12.12.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Есть такой оператор in

Код

type
  TSearchResult = (srNotFound, srEndOf, srFound);
  TSearchResults = set of TSearchResult;

implementation

function GetSearchResults: TSearchResults;
begin
  Result := [srEndOf, srFound];
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Res: TSearchResults;
begin
  Res := GetSearchResults;
  if srNotFound in Res then 
    ShowMessage('srNotFound');
  if srEndOf in Res then 
    ShowMessage('srEndOf');
  if srFound in Res then 
    ShowMessage('srFound');
end;


Добавлено через 43 секунды
Будут показаны два последних сообщения


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Akella
Дата 12.12.2008, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Rrader, может Case?
PM MAIL   Вверх
Rrader
  Дата 12.12.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Akella, мог бы и проверить smile 


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Christoph
Дата 12.12.2008, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 1
Всего: 11



А Case работает помоему только с целім типом, или я ошибаюсь?


--------------------
user posted image
PM MAIL ICQ   Вверх
Rrader
  Дата 13.12.2008, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Christoph, не только с целыми. С ординальными типами вообще:

Цитата(Lingvo)

Ordinal type

К таким типам относятся данные, у которых каждое значение, кроме первого, имеет уникального предшественника, а каждое значение, кроме последнего, имеет уникального преемника, в частности, этот тип может описывать и беззнаковые целые числа.

Т.е. помимо целых чисел, можно выбирать и из перечислений (Enum), и из символов (Char).

Это сообщение отредактировал(а) Rrader - 13.12.2008, 06:27


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Akella
Дата 13.12.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(Christoph @  12.12.2008,  23:49 Найти цитируемый пост)
А Case работает помоему только с целім типом, или я ошибаюсь? 

не совсем так, нужен перечислимый тип, так сказать
PM MAIL   Вверх
mutex
Дата 14.12.2008, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.10.2004

Репутация: нет
Всего: 3



Если EWB - компонент и есть опубликованное (published) свойство типа TSearchResults, можно использовать RTTI - инфо о типах времени выполнения. Достаточно одного вызова:
Label1.Caption := GetSetProp(EWB, GetPropInfo(EWB, 'SearchResults', [tkSet]), True);
И результат увидите в виде: [srEndOf,srFound].

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    Button1: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure CheckBoxClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

type
  TSearchResult = (srNotFound, srEndOf, srFound);
  TSearchResults = set of TSearchResult;

  TEWB = class(TComponent)
  private
    FSearchResults: TSearchResults;
  published
    property SearchResults: TSearchResults
      read FSearchResults write FSearchResults;
  end;

var
  EWB: TEWB;

implementation

{$R *.dfm}

uses
  TypInfo;
  
procedure TForm1.FormCreate(Sender: TObject);
begin
  EWB := TEWB.Create(nil);
  CheckBoxClick(CheckBox1);
  CheckBoxClick(CheckBox2);
  CheckBoxClick(CheckBox3);
  Button1Click(nil);
end;

procedure TForm1.CheckBoxClick(Sender: TObject);
begin
  with EWB do
    if TCheckBox(Sender).Checked then
      case TCheckBox(Sender).Tag of
        0: SearchResults := SearchResults + [srNotFound];
        1: SearchResults := SearchResults + [srEndOf];
        2: SearchResults := SearchResults + [srFound];
      end
    else
      case TCheckBox(Sender).Tag of
        0: SearchResults := SearchResults - [srNotFound];
        1: SearchResults := SearchResults - [srEndOf];
        2: SearchResults := SearchResults - [srFound];
      end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := GetSetProp(EWB,
    GetPropInfo(EWB, 'SearchResults', [tkSet]), True);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  EWB.Free;
end;

end.


Приложение: проект на 7-м Дельфи.
PS. Обработчик CheckBoxClick является общим для трех флажков.

Это сообщение отредактировал(а) mutex - 14.12.2008, 18:58

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  UseRTTI.zip 2,04 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0921 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.