Я пытаюсь сделать приложение, чтобы показать некоторую информацию. Он создаст время выполнения Панелей и разместит на нем информацию, каждая панель будет плоской, как на картинке, также приложение будет использовать темы времени выполнения, поэтому я 'd не сможет изменить цвет панели bg при перемещении мыши, я попытался разместить информацию о TSpeedButton: v У этого есть замечательная функция подсветки, когда она плоская, в то время как приложение использует тему времени исполнения, но главная проблема заключается в том, что изображения и метки aren' т двигаться, когда я двигаться SpeedButton и мне нужно это много, они просто остаться там ..Выделите TPanel на перемещение мыши
Я пытался редактировать TCustomPanel.Paint, чтобы увидеть, если панель будет выглядеть подсвеченной кнопки, добавив код в конец:
PaintRect := ClientRect;
Details := StyleServices.GetElementDetails(ttbButtonHot);
StyleServices.DrawElement(Canvas.Handle, Details, PaintRect);
, но без успеха ..
также довольно трудно связать пользовательский код OnClick событие во время выполнения, например:
ShowMessage('custom message on each panel');
у меня нет ни малейшего представления о том, как это сделать, надеюсь, кто-то даст мне совет или показать мне пример ..
BTV, панель будет создана таким образом:
var
P: TPanel;
begin
P := TPanel.Create(Self);
P.Left := 20;
P.Top := 100;
P.Width := 60;
P.Height := 20;
P.Visible := True;
P.Parent := Self;
@P.OnClick := @Showmessageproc; // somehow this way..
end;
App ПИК:
Если я делаю так:
procedure TMyPanel.MouseMove(Shift: TShiftState; X, Y: Integer);
var
mEvnt: TTrackMouseEvent;
begin
inherited;
if not FMouseTracking then begin
mEvnt.cbSize := SizeOf(mEvnt);
mEvnt.dwFlags := TME_LEAVE;
mEvnt.hwndTrack := Handle;
TrackMouseEvent(mEvnt);
FMouseTracking := True;
showmessage('IN');
end;
end;
procedure TMyPanel.WMMouseLeave(var Msg: TMessage);
begin
if Msg.Msg = WM_MOUSELEAVE then showmessage('OUT');
Msg.Result := 0;
FMouseTracking := False;
if Assigned(FOnMouseLeave) then
FOnMouseLeave(Self);
end;
procedure G(Sender: TObject);
begin
showmessage('message');
end;
procedure TMainFrm.Button1Click(Sender: TObject);
var
P: TMyPanel;
begin
P := TMyPanel.Create(Self);
P.Left := 20;
I := I + 100;
P.Top := I;
P.Width := 200;
P.Height := 80;
P.Visible := True;
P.Parent := Self;
@P.OnClick := @g;
end;
при перемещении мыши на время выполнения создается панель, 2 MsgBox появляется, IN и OUT, "MouseMove" работает нормально, но "мышь оставить" плохо, также основной вопрос остается актуальным. проблема в том, что я не могу получить холст из созданной панели для рисования. в приведенном выше примере может быть достигнуто более простой способ:
@P.OnMouseLeave := @onmouseleaveproc;
@P.OnMouseMove := @onmousemoveproc;
но с Canvas, все гораздо сложнее, где-то я читал, что холст защищен в TCustomPanel.
Также есть еще один вопрос: возможно ли обрабатывать панель, называемую «OnMouseMove»? потому что, возможно, будет 30 из них (во время выполнения создается панелей)
Я пробовал так: (и он не работает)
type
TMyPanel = class(TPanel)
public
constructor Create(AOwner: TComponent); override;
private
// FMouseTracking: Boolean;
// FOnMouseLeave: TNotifyEvent;
procedure CMMouseEnter(var msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
protected
// procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
published
// property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;
constructor TMyPanel.Create(AOwner: TComponent);
begin
ControlStyle := ControlStyle - [csParentBackground] + [csOpaque];
inherited;
end;
procedure TMyPanel.CMMouseEnter(var msg: TMessage);
begin
inherited;
Color := clBlue;
{ Do Whatever }
end;
procedure TMyPanel.CMMouseLeave(var msg: TMessage);
begin
inherited;
Color := clRed;
{ Do Whatever }
end;
Просто, цвет не изменяется. (изменение цвета с темами OFF)
Великобритания не является гражданством. Вы имеете в виду «британский». –
Да, я был в спешке. Кстати, английский не мой родной язык. – user2200585
У вас все хорошо с вашим английским. :) – lurker