KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Валентин Озеров, "Советы по Delphi. Версия 1.4.3 от 1.1.2001" бесплатно, без регистрации.
Перейти на страницу:

begin

 Label1.Caption := TEdit(Sender).Name;

end;

end

Включение ComboBox в TDBGrid

Delphi 1 

Вот основные шаги чтобы сделать это:

1. Создавайте и рисуйте TComboBox (CB) при получении ввода ячейки необходимой колонки табличной сетки

2. Получайте текущее значение поля (если имеется) и помещайте его в CB

3. После всех манипуляций, поместите новое значение обратно в поле

4. Избавляемся от CB 

DBLookupComboBox 

Предустановка DBLookupComboBox

Delphi 1 

Вы можете редактировать ваш источник данных. Говорят, вы хотите сохранить ваши lookuping-данные из таблицы customer в таблицу sales – 'Cust No'? Вы можете просто проинициализировать поля (задать значение по умолчанию), редактируя таблицу sales «Cust No»

with tbSales do begin

 Edit;

 FieldByName('Cust No').AsInteger := 1;

 Post;

end

Сортировка DBLookupComboBox по вторичному индексу

Delphi 1 

Одним из способов вывести выши данные в другом порядке сортировки является использование 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, то вы получите поле, которое .... ищете.

Я надеюсь что помог вам.

unit clookup;

interface

uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, DBLookup;


type

 TDBJustLookupCombo = class(TDBLookupCombo)

 private

  { Private declarations }

 protected

  { Protected declarations }

  function GetLValue: TField;

 public

  { Public declarations }

  property LookUpValue: TField read GetLValue;

 published

  { Published declarations }

 end;


 TDBJustLookupList = class(TDBLookupList)

 private

  { Private declarations }

 protected

  { Protected declarations }

  function GetLValue: TField;

 public

  { Public declarations }

  property LookUpValue: TField read GetLValue;

 published

  { Published declarations }

 end;


procedure Register;


implementation


procedure Register;

begin

 RegisterComponents('Data Controls', [TDBJustLookupList, TDBJustLookupCombo]);

end;


function TDBJustLookupCombo.GetLValue: TField;

begin

 Result := LookupSource.DataSet.FieldByName(LookUpField);

end;


function TDBJustLookupList.GetLValue: TField;

begin

 Result := LookupSource.DataSet.FieldByName(LookUpField);

end;

end

DBMemo 

Копирование содержимого DBMemo в DBMemo другого поля

Delphi 1 

Попробуй:

DBMemo6.Lines:=DBMemo5.Lines.Assign;

Поиск текста в DBMemo

Delphi 1

Попробуйте так:

"Подключите" следующую процедуру к событию OnFind для FindDialog. Единственная проблема заключается в том, что в DBMemo я не могу получить выделенный текст, тем не менее в стандартном Memo такой проблемы нет.

procedure TMainForm.FindDialog1Find(Sender: TObject);

var

 Buff, P, FT : PChar;

 BuffLen     : Word;

begin

 With Sender as TFindDialog 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);

  if P = NIL then MessageBeep(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 

Настройки всплывающих подсказок в DBNavigator во время выполнения приложения

Возможно ли изменение свойства Hints компонента TDBNavigator во время выполнения программы?

Это должно работать:

procedure TForm1.Button1Click(Sender: TObject);

var ix : integer;

begin

 With DBNavigator1 do

  for ix := 0 to ControlCount - 1 do

   if Controls[ix] is TNavButton then

    with Controls[ix] as TNavButton do

     case index of

     nbFirst : Hint := 'Подсказка для кнопки First';

     nbPrior : Hint := 'Подсказка для кнопки Prior';

     nbNext : Hint := 'Подсказка для кнопки Next';

     nbLast : Hint := '';

     {……}

     end;

end;

– Freddy Hansson

Выключение кнопок в DBNavigator

Delphi 1

{ Расширение DBNavigator: позволяет разработчику включать и выключать

отдельные кнопки через методы EnableButton и DisableButton }

unit GNav;


interface


uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls;


type TMyNavigator = class(TDBNavigator)

public

 procedure EnableButton(Btn : TNavigateBtn);

 procedure DisableButton(Btn : TNavigateBtn);

end;


procedure Register;


implementation


procedure TMyNavigator.EnableButton(Btn : TNavigateBtn);

begin

 Buttons[Btn].Enabled := True;

end;


procedure TMyNavigator.DisableButton(Btn : TNavigateBtn);

begin

 Buttons[Btn].Enabled := False;

end;


procedure Register;

begin

 RegisterComponents('Samples', [TMyNavigator]);

end;

end

Работа в коде с кнопками DBNavigator

Delphi 1 

Я думаю вам поможет следующий пример (взят из электронной справки по DELPHI), показывающий код нажатой кнопки. Я видел пару вопросов о том, как изменять кнопки навигатора в зависимости от состояния редактируемой вами записи. Если вам необходимо подтверждение действий пользователя, то необходимо каким-то образом организовать дополнительный перехватчик. Как это сделать, я, честно говоря, еще не думал.

Прежде, чем вы сделаете любой постинг или изменение данных, убедитесь, что таблица находится в режиме редактирования. Посмотрите описание свойства state в электронной справке по DELPHI. Там подробно рассказано как работать с ним.

Следующий код определяет нажатую кнопку навигатора и выводит сообщение с ее именем.

procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);

var BtnName: string;

begin

 case Button of

 nbFirst  : BtnName := 'nbFirst';

 nbPrior  : BtnName := 'nbPrior';

 nbNext   : BtnName := 'nbNext';

 nbLast   : BtnName := 'nbLast';

 nbInsert : BtnName := 'nbInsert';

 nbDelete : BtnName := 'nbDelete';

 nbEdit   : BtnName := 'nbEdit';

 nbPost   : BtnName := 'nbPost';

 nbCancel : BtnName := 'nbCancel';

 nbRefresh: BtnName := 'nbRefresh';

 end;

 MessageDlg('Была нажата кнопка' + BtnName, mtInformation, [mbOK], 0);

end;

Edit 

Денежное поле редактирования

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*