Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  136

•  TDictionary Custom Sort  3 318

•  Fast Watermark Sources  3 065

•  3D Designer  4 826

•  Sik Screen Capture  3 321

•  Patch Maker  3 537

•  Айболит (remote control)  3 637

•  ListBox Drag & Drop  2 997

•  Доска для игры Реверси  81 580

•  Графические эффекты  3 927

•  Рисование по маске  3 233

•  Перетаскивание изображений  2 613

•  Canvas Drawing  2 735

•  Рисование Луны  2 562

•  Поворот изображения  2 167

•  Рисование стержней  2 161

•  Paint on Shape  1 564

•  Генератор кроссвордов  2 227

•  Головоломка Paletto  1 764

•  Теорема Монжа об окружностях  2 218

•  Пазл Numbrix  1 682

•  Заборы и коммивояжеры  2 052

•  Игра HIP  1 279

•  Игра Go (Го)  1 225

•  Симулятор лифта  1 471

•  Программа укладки плитки  1 214

•  Генератор лабиринта  1 542

•  Проверка числового ввода  1 353

•  HEX View  1 490

•  Физический маятник  1 355

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Вариантные типы



unit VariaF;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    ListBox1: TListBox;
    BtnCreate: TButton;
    BtnClear: TButton;
    BtnConvert: TButton;
    procedure BtnClearClick(Sender: TObject);
    procedure BtnConvertClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BtnCreateClick(Sender: TObject);
  private
    Variant1: Variant;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

uses
  ComObj;

function VarTypeToString(VType: Integer): string;
begin
  case VType of
    varEmpty: Result := 'varEmpty';
    varNull: Result := 'varNull';
    varSmallint: Result := 'varSmallint';
    varInteger: Result := 'varInteger';
    varSingle: Result := 'varSingle';
    varDouble: Result := 'varDouble';
    varCurrency: Result := 'varCurrency';
    varDate: Result := 'varDate';
    varOleStr: Result := 'varOleStr';
    varDispatch: Result := 'varDispatch';
    varError: Result := 'varError';
    varBoolean: Result := 'varBoolean';
    varVariant: Result := 'varVariant';
    varUnknown: Result := 'varUnknown';
    varByte: Result := 'varByte';
    varString: Result := 'varString';
    varTypeMask: Result := 'varTypeMask';
    varArray: Result := 'varArray';
    varByRef: Result := 'varByRef';
  else
    Result := 'Error: Undefined variant type';
  end;
end;

procedure ShowVariantInfo(V: Variant; Str: TStrings);
begin
  Str.Clear;
  Str.Add('Var type: ' +
    VarTypeToString(VarType(V)));
  if VarIsArray(V) then
    Str.Add('Is an array');
  if VarIsEmpty(V) then
    Str.Add('Empty variant');
  if VarIsNull(V) then
    Str.Add('Null variant');
  // protect conversion methods and show default strings
  try
    Str.Add('String value: ' + VarToStr(V));
  except
    on EVariantError do
      Str.Add('String value: <Undefined>');
  end;
  try
    Str.Add('Numeric value: ' + FloatToStr(V));
  except
    on EVariantError do
      Str.Add('Numeric value: <Undefined>');
  end;
end;

procedure TForm1.BtnClearClick(Sender: TObject);
begin
  VarClear(Variant1);
  ShowVariantInfo(Variant1, Memo1.Lines);
end;

procedure TForm1.BtnConvertClick(Sender: TObject);
var
  VType: Integer;
begin
  VType := Integer(
    ListBox1.Items.Objects[ListBox1.ItemIndex]);
  try
    Variant1 := VarAsType(Variant1, VType);
    ShowVariantInfo(Variant1, Memo1.Lines);
  except
    on EVariantError do
      ShowMessage('Conversion not supported');
  end;
end;

const
  VarList: array[1..10] of Integer =
  (varSmallint, varInteger, varSingle, varDouble,
    varCurrency, varDate, varOleStr, varDispatch,
    varBoolean, varString);

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  // fill the list with variant type constants
  // (their description and their value)
  for I := 1 to High(VarList) do
    ListBox1.Items.AddObject(
      VarTypeToString(VarList[I]),
      TObject(VarList[I]));
  // select the first item
  ListBox1.ItemIndex := 0;
  ShowVariantInfo(Variant1, Memo1.Lines);
end;

procedure TForm1.BtnCreateClick(Sender: TObject);
var
  VType: Integer;
begin
  VType := Integer(
    ListBox1.Items.Objects[ListBox1.ItemIndex]);
  case VType of
    varSmallint: Variant1 := VarAsType(
        10, varSmallint);
    varInteger: Variant1 := Integer(1000);
    varSingle: Variant1 :=
      VarAsType(1.1, varSingle);
    varDouble: Variant1 := Sqrt(1000.01);
    varCurrency: Variant1 := 100.01;
    varDate: Variant1 := Now;
    varOleStr: Variant1 :=
      VarAsType('Hello', VarOleStr);
    varDispatch: Variant1 :=
      CreateOleObject('Word.Basic');
    varBoolean: Variant1 := WordBool(True);
    varString: Variant1 := 'Delphi';
  end;
  ShowVariantInfo(Variant1, Memo1.Lines);
end;

end.







Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте