Вопросы по компонентам Delphi

Можно ли программно установить произвольную строку в первую позицию TListBox?

Для установки любой строки в произвольную позицию в окне TListBox можно послать сообщение:

SendMessage(ListBox1.Handle, lb_SetTopIndex, SpinEdit1.Value-1, 0);

где первым параметром передается указатель на компонент, вторым - сообщение, третьим - номер устанавливаемой строки и позиция в окне на которую перемещается указанная строка.

Строки нумеруются с нуля.

Пример:

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
 
 TRY
 
  SendMessage(ListBox1.Handle, lb_SetTopIndex, SpinEdit1.Value-1,0);
 
 FINALLY
 END;
 
end;

Как изменить цвет ячейки TDBGrid в зависимости от текущего значения?

Для изменения цвета некоторых ячеек таблицы TDBGrid необходимо определить реакцию на событие DBGrid1DrawDataCell и проверив необходимые условия, перерисовать ячейку вручную (если в этом есть необходимость).

Все необходимые данные для отрисовки передаются в параметрах процедуры.

Пример:

Отрисовка белых букв на красном фоне если, перерисовывается поле 'First_I', ячейка не в фокусе и значение поля меньше нуля.

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
begin
 
 WITH DBGrid1.Canvas DO
 
  IF (Field.FieldName = 'First_I') AND (NOT (gdFocused in State))
  AND (Field.AsInteger < 0) THEN BEGIN
 
   Brush.Color := clRed;
   Font.Color := clWhite;
   DBGrid1.DefaultDrawDataCell(Rect, Field, State);
 
  END;
 
end;

Как получить позицию курсора в компоненте TMemo?

В компоненте TMemo предусмотрено получение позиции курсора через механизм сообщений. Для получения позиции необходимо послать два сообщения. Первое -

LineNum := Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);

для получения номера строки в которой находится курсор. И второе -

CharNum := Memo1.Perform(EM_LINEINDEX, LineNum, 0);

для получения позиции курсора в заданной строке. Будте внимательны, так как номер строки и позиция в строке отсчитываются от нуля.

Пример:

{Получаем позицию курсора при щелчке мыши на компоненте}
procedure TForm1.Memo1Click(Sender: TObject); 
VAR 
 
 LineNum : LongInt; 
 CharNum : LongInt; 
 
begin 
 
 {Получаем номер строки}
 LineNum := Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0); 
 {Получаем позицию в строке}
 CharNum := Memo1.Perform(EM_LINEINDEX, LineNum, 0); 
 {Выводим позицию на экран}
 Label1.Caption := IntToStr(LineNum+1)+' : '+
 
 IntToStr((Memo1.SelStart-CharNum)+1); 
 
end;
 
............ 
 
{Получаем позицию курсора при отпускании клавиши на клавиатуре}
procedure TForm1.Memo1KeyUp(Sender: TObject; 
                             var Key: Word; Shift: TShiftState); 
begin 
 
 Memo1Click(Self); 
 
end;

В каких случаях и для чего нужно поле Tag?

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

Можно ли получить горизонтальную полосу прокрутки в компоненте ListBox?

Можно. Для этого компоненте ListBox в нужный момент посылается сообщение LB_SetHorizontalextent, указывающее на необходимость отобразить горизонтальную полосу прокрутки.

Пример:

ListBox1.Perform(LB_SetHorizontalextent, 400, Longint(0));

где:
400 - размер области прокручивания в пикселах,
Longint(0) - параметр не используется.

Последние комментарии

  • vitality ed pills cure for ed or natural ed medications treatment for erectile dysfunction or how to get amoxicillin can i buy amoxicillin over the counter or prednisone 20 mg tablets coupon prednisone 5mg coupon or vacuum pump for ed ed pills for sale
  • erectile dysfunction medication comparison of ed drugs ed cures that work otc ed pills https://canadianpharmacyvikky.com real viagra without a doctor prescription usa ed aids buy prescription drugs online without herbal remedies for ed
  • ed medications over the counter canadian pharmacy vikky best ed drugs new erectile dysfunction treatment https://canadianpharmacyvikky.com ed pills online

Счетчики