end.
Включение ComboBox в TDBGrid
Вот основные шаги чтобы сделать это:
1. Создавайте и рисуйте TComboBox (CB) при получении ввода ячейки необходимой колонки табличной сетки
2. Получайте текущее значение поля (если имеется) и помещайте его в CB
3. После всех манипуляций, поместите новое значение обратно в поле
4. Избавляемся от CB
Предустановка DBLookupComboBox
Вы можете редактировать ваш источник данных. Говорят, вы хотите сохранить ваши lookuping-данные из таблицы customer в таблицу sales – 'Cust No'? Вы можете просто проинициализировать поля (задать значение по умолчанию), редактируя таблицу sales «Cust No»
withtbSales do begin
Edit;
FieldByName('Cust No').AsInteger := 1;
Post;
end;
Сортировка DBLookupComboBox по вторичному индексу
Одним из способов вывести выши данные в другом порядке сортировки является использование TQuery и включение в SQL-запрос ключевого слова «order by». После чего вы можете установить этот запрос как DataSource в вашем DBLookupComboBox.
ПРИМЕР:
Если у вас имеется таблица Customer, содержащая «Customer_No» и «Customer_Name», и индексированная по Customer_No, то ваш запрос должен содержать в редакторе списка строк (свойство SQL) для вашего TQuery следующую строку:
select Customer_No, Customer_Name from Customer
order by Customer_Name
Значение DBLookupComboBox
Я думаю что у меня есть то, что вы хотите. Если вы обратитесь к свойству LookUpValue, то вы получите поле, которое .... ищете.
Я надеюсь что помог вам.
unitclookup;
interface
uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, DBLookup;
type
TDBJustLookupCombo = class(TDBLookupCombo)
private
{ Private declarations }
protected
{ Protected declarations }
functionGetLValue: TField;
public
{ Public declarations }
propertyLookUpValue: TField readGetLValue;
published
{ Published declarations }
end;
TDBJustLookupList = class(TDBLookupList)
private
{ Private declarations }
protected
{ Protected declarations }
functionGetLValue: TField;
public
{ Public declarations }
propertyLookUpValue: TField readGetLValue;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Data Controls', [TDBJustLookupList, TDBJustLookupCombo]);
end;
functionTDBJustLookupCombo.GetLValue: TField;
begin
Result := LookupSource.DataSet.FieldByName(LookUpField);
end;
functionTDBJustLookupList.GetLValue: TField;
begin
Result := LookupSource.DataSet.FieldByName(LookUpField);
end;
end.
Копирование содержимого DBMemo в DBMemo другого поля
Попробуй:
DBMemo6.Lines:=DBMemo5.Lines.Assign;
Попробуйте так:
"Подключите" следующую процедуру к событию OnFind для FindDialog. Единственная проблема заключается в том, что в DBMemo я не могу получить выделенный текст, тем не менее в стандартном Memo такой проблемы нет.
procedureTMainForm.FindDialog1Find(Sender: TObject);
var
Buff, P, FT : PChar;
BuffLen : Word;
begin
WithSender asTFindDialog do begin
GetMem(FT, Length(FindText) + 1);
StrPCopy(FT, FindText);
BuffLen:= DBMemo1.GetTextLen + 1;
GetMem(Buff,BuffLen);
DBMemo1.GetTextBuf(Buff,BuffLen);
P:= Buff + DBMemo1.SelStart + DBMemo1.SelLength;
P:= StrPos(P, FT);
ifP = NIL thenMessageBeep(0)
else begin
DBMemo1.SelStart:= P – Buff;
DBMemo1.SelLength:= Length(FindText);
end;
FreeMem(FT, Length(FindText) + 1);
FreeMem(Buff,BuffLen);
end;
end;
Попробуйте так:
«Подключите» следующую процедуру к событию OnFind для FindDialog. Единственная проблема заключается в том, что в DBMemo я не могу получить выделенный текст, тем не менее в стандартном Memo такой проблемы нет.
begin
DBMemo1.SelStart:= P – Buff;
DBMemo1.SelLength:= Length(FindText);
end;
FreeMem(FT, Length(FindText) + 1);
FreeMem(Buff,BuffLen);
DBMemo1.SetFocus;
end;
Настройки всплывающих подсказок в DBNavigator во время выполнения приложения
Читать дальше