Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

D6: TListBox [D6, Win95/98]


Emigrant ©   (2002-12-17 02:25:00) 

Здравствуйте.

Столкнулся с тем, что TListBox не вписывает в себя более 7 объектов типа Вариант. Для желающих, ниже есть код для проверки моего утверждения.
Вопрос извечный: почему и как бороться?

Заранее спасибо.
Константин.

nit untDBViewer;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DBTables, Grids, DBGrids, Db, DBCtrls, ComCtrls;

type
TForm1 = class(TForm)
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Table1: TTable;
Button1: TButton;
DBListBox1: TDBListBox;
ListBox3: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
slFields : Tlist;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
d: variant;
i: integer;
begin
ListBox3.Items.Clear;
Table1.GetFieldNames(ListBox1.Items);
for i:=1 to 7 do
begin
d:= Table1.FieldDefs[i].DataType;
ListBox3.Items.Add(d);
end;
end;

end.


Alex Konshin   (2002-12-18 04:11:00) [1]

Куда ты собираешься запихнуть variant?
Variant это 16 байт, он никак в 4 байта не влезет.
Происходит неявное преобразование, но обратно ты свой variant не получишь.

Если нужны имена типов, то

uses TypInfo;
function getFieldTypeName( eType : TFieldType ) : String;
var pInfo : Pointer;
begin
pInfo := System.TypeInfo(TFieldType);
if pInfo=nil then Result := nil
else Result := GetEnumName(pInfo,Ord(eType));
end;


PKT   (2002-12-18 03:35:00) [2]

А на кой, собственно, Вам нужен Variant ?
Если Вы хотите в ListBox`е после списка полей получить
список номеров типов полей,
то
for i := 0 to Table1.FieldDefs.Count - 1 do
ListBox3.Items.Add(IntToStr(Ord(Table1.FieldDefs[i].DataType)))

если названия типов полей, то сначала определить
const
TypeNames: array[0..35] of string =
("ftUnknown", "ftString", "ftSmallint", и так далее
);

for i := 0 to Table1.FieldDefs.Count - 1 do
ListBox3.Items.Add(TypeNames[Ord(Table1.FieldDefs[i].DataType)])

Или цель запихать более семи вариантов в ListBox ?
Ну, тогда прав Моджахед (17.12.02 02:50)


Emigrant   (2002-12-18 00:11:00) [3]

Увы, это не помогает как и пляски с бубном.


PKT   (2002-12-17 04:35:00) [4]

А если
for i:=1 to 7 do
исправить на
for i := 0 to Table1.FieldDefs.Count - 1 ?


Emigrant   (2002-12-17 03:10:00) [5]

Юмор принимается. Сарказм нет.
Нефиг делать мне уважаемый что-ли, что по людям с вопросами тыкаться? В Д3...Д6 этот кусок кода проверен. Результат один - сообщение о превышении верхнего предела в 8 для ТЛистБокса.

Обращаться на Борланд тоже не посоветуете надеюсь...


Моджахед   (2002-12-17 02:50:00) [6]

Попробуй
for i:=1 to 7 do
поменять на
for i:=1 to 999997 do

и
ListBox3.Items.Add(d);
на
ListBox3.Items.Add("я не сплю");

Говорять, помогает


Моджахед   (2002-12-17 02:44:00) [7]

Бред какой-то


Наверх

Титульная страница Поиск, карта сайта Написать письмо