Используйте следующий код для обработки события
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
var
P: array [0..1023] of Char;
BS: TBlobStream;
S: string;
begin
if Field is TMemoField then
with (Sender as TDBGrid).Canvas do
begin
BS := TBlobStream.Create(Table1Notes, bmRead);
FillChar(P, SizeOf(P), #0);
BS.Read(P, SizeOf(P));
BS.Free;
S := StrPas(P);
while Pos(#13, S) > 0 do S[Pos(#13, S)] := ' ';
while Pos(#10, S) > 0 do S[Pos(#10, S)] := ' ';
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, S);
end;
end;
17. Не возникает событие TSpeedButton.OnDblClick.
Я создаю событие на
На самом деле работает, только в определенных ситуациях. Если вы помещаете на панель несколько кнопок, то по умолчанию они независимы и соответственно не фиксируются в нажатом состоянии. Поскольку одиночное нажатие мыши на кнопку отрабатывается немедленно, двойной щелчок мыши воспринимается как два нажатия и отпускания. Поэтому
Если же кнопки связаны в группу (
18. Как разделить обработку OnClick и OnDblClick? Ведь OnClick будет вызываться всегда, и перед DblClick.
Именно так и происходит в Windows — посылаются оба сообщения. Для того чтобы обработать только какое-то одно событие необходимо чуть "задержать" выполнение
procedure TForm1.ListBox1Click(Sender: TObject);
var
Msg: TMsg;
TargetTime: Longint;
begin
TargetTime := GetTickCount + GetDoubleClickTime;
while GetTickCount < TargetTime do
if PeekMessage(Msg, ListBox1.Handle, WM_LBUTTONDBLCLK, WM_LBUTTONDBLCLK, WM_NOREMOVE)
then Exit;
MessageDlg('Single clicked', mtInformation, [mbOK], 0);
end;
19. Как определить из обработчика события OnClick в Popup.MenuItem, для какого объекта это произошло?
Используйте свойство
procedure TForm1.PopupItem1Click(Sender: TObject);
begin
Label1.Caption := PopupMenu1.PopupComponent.Name;
end;
Свойство
20. Как использовать case, чтобы определить, какой объект вызвал процедуру?
Используйте свойство
case (Sender as TComponent).Tag of
Button1ID: SomeProcedure;
Button2ID: AnotherProcedure;
end;
Таким образом вы можете обрабатывать события как от однотипных компонент, так и от компонент разного типа.
21. Как обрабатывать события от множества однотипных компонентов.