![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Бред какой-то