Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.30;
Скачать: CL | DM;

Вниз

D6: TListBox   Найти похожие ветки 

 
Emigrant   (2002-12-17 02:25) [0]

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

Столкнулся с тем, что 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.


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

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


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

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

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

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


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

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

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


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

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


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

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


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

А на кой, собственно, Вам нужен 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)


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

Куда ты собираешься запихнуть 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;



Страницы: 1 вся ветка

Текущий архив: 2002.12.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
4-99401
Dok_3D
2002-11-14 13:26
2002.12.30
Как программно залогиниться в Win2000.


3-98960
Ежик
2002-12-09 12:43
2002.12.30
Передача в Excel


14-99301
Arkan
2002-12-09 23:02
2002.12.30
Про форум!


1-99106
Misha
2002-12-19 20:23
2002.12.30
Перегрузка операторов


3-98972
Kirill S.
2002-12-10 09:33
2002.12.30
сортировка DataSet