웹 페이지를 시뮬레이션 할 수있는 메인 (MDIParent) 폼에 피드백 버튼을 배치하고 싶습니다.웹 페이지 피드백 버튼 시뮬레이션
마우스가 올라갈 때 자 랍니다. 웹처럼. 질문이있는 양식과 데이터를 보내려면 정말 필요하지 않습니다. 단지 시각적 인 것입니다.
이러한 구성 요소가 있습니까? 나는 그것을하기가 어렵다고 생각하지 않지만, 이미 존재한다면 그것은 나에게도 어느 정도 시간이 걸릴 것이다.
감사
웹 페이지를 시뮬레이션 할 수있는 메인 (MDIParent) 폼에 피드백 버튼을 배치하고 싶습니다.웹 페이지 피드백 버튼 시뮬레이션
마우스가 올라갈 때 자 랍니다. 웹처럼. 질문이있는 양식과 데이터를 보내려면 정말 필요하지 않습니다. 단지 시각적 인 것입니다.
이러한 구성 요소가 있습니까? 나는 그것을하기가 어렵다고 생각하지 않지만, 이미 존재한다면 그것은 나에게도 어느 정도 시간이 걸릴 것이다.
감사
은 다음처럼 코드를 사용할 수있는 애니메이션 슬라이드 패널을 만들려면 :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FFeedbackBtn: TPanel;
FFeedbackPanel: TPanel;
procedure OnFeedbackBtnMouseEnter(Sender: TObject);
procedure OnFeedbackPanelMouseLeave(Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FFeedbackBtn := TPanel.Create(Self);
FFeedbackBtn.Parent := Self;
FFeedbackBtn.Anchors := [akLeft, akTop, akBottom];
FFeedbackBtn.Caption := '';
FFeedbackBtn.SetBounds(0, 0, 40, ClientHeight);
FFeedbackBtn.OnMouseEnter := OnFeedbackBtnMouseEnter;
FFeedbackPanel := TPanel.Create(Self);
FFeedbackPanel.Parent := Self;
FFeedbackPanel.Anchors := [akLeft, akTop, akBottom];
FFeedbackPanel.Caption := 'Feedback panel';
FFeedbackPanel.Visible := False;
FFeedbackPanel.SetBounds(0, 0, 250, ClientHeight);
FFeedbackPanel.OnMouseLeave := OnFeedbackPanelMouseLeave;
end;
procedure TForm1.OnFeedbackBtnMouseEnter(Sender: TObject);
begin
AnimateWindow(FFeedbackPanel.Handle, 150, AW_ACTIVATE or AW_SLIDE or
AW_HOR_POSITIVE);
end;
procedure TForm1.OnFeedbackPanelMouseLeave(Sender: TObject);
begin
AnimateWindow(FFeedbackPanel.Handle, 150, AW_HIDE or AW_SLIDE or
AW_HOR_NEGATIVE);
end;
end.
업데이트 : 여기
이와 지금, 위의 또 다른 버전입니다 일반적인 피드백 버튼과 같은 세로 텍스트는 에 펼쳐지는 페인트 상자에 렌더링됩니다. utton 패널 :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FFeedbackBtn: TPanel;
FFeedbackBtnOverlay: TPaintBox;
FFeedbackPanel: TPanel;
procedure OnFeedbackBtnMouseEnter(Sender: TObject);
procedure OnFeedbackPanelMouseLeave(Sender: TObject);
procedure OnFeedbackBtnOverlayPaint(Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FFeedbackBtn := TPanel.Create(Self);
FFeedbackBtn.Parent := Self;
FFeedbackBtn.Anchors := [akLeft, akTop, akBottom];
FFeedbackBtn.Caption := '';
FFeedbackBtn.Color := $0000B3FF;
FFeedbackBtn.ParentBackground := False;
FFeedbackBtn.SetBounds(0, 0, 40, ClientHeight);
FFeedbackBtnOverlay := TPaintBox.Create(Self);
FFeedbackBtnOverlay.Parent := FFeedbackBtn;
FFeedbackBtnOverlay.Align := alClient;
FFeedbackBtnOverlay.OnPaint := OnFeedbackBtnOverlayPaint;
FFeedbackBtnOverlay.OnMouseEnter := OnFeedbackBtnMouseEnter;
FFeedbackPanel := TPanel.Create(Self);
FFeedbackPanel.Parent := Self;
FFeedbackPanel.Anchors := [akLeft, akTop, akBottom];
FFeedbackPanel.Caption := 'Feedback panel';
FFeedbackPanel.Color := $0000F9FF;
FFeedbackPanel.ParentBackground := False;
FFeedbackPanel.Visible := False;
FFeedbackPanel.SetBounds(0, 0, 250, ClientHeight);
FFeedbackPanel.OnMouseLeave := OnFeedbackPanelMouseLeave;
end;
procedure TForm1.OnFeedbackBtnMouseEnter(Sender: TObject);
begin
AnimateWindow(FFeedbackPanel.Handle, 150, AW_ACTIVATE or AW_SLIDE or
AW_HOR_POSITIVE);
end;
procedure TForm1.OnFeedbackPanelMouseLeave(Sender: TObject);
begin
AnimateWindow(FFeedbackPanel.Handle, 150, AW_HIDE or AW_SLIDE or
AW_HOR_NEGATIVE);
end;
procedure TForm1.OnFeedbackBtnOverlayPaint(Sender: TObject);
var
S: string;
X, Y: Integer;
begin
S := 'Feedback...';
with FFeedbackBtnOverlay do
begin
Canvas.Brush.Color := $0000B3FF;
Canvas.FillRect(ClientRect);
Canvas.Font.Orientation := 900;
X := (ClientWidth - Canvas.TextHeight(S)) div 2;
Y := ClientHeight - (ClientHeight - Canvas.TextWidth(S)) div 2;
Canvas.TextOut(X, Y, S);
end;
end;
end.
그리고 결과 : 또한 실제로 필드를 작성합니다 피드백 패널을 숨길 수있는 사용자를 방지하기 위해 일부 로직을 구현해야
하지만 자연 약점이다 이러한 종류의 피드백 양식.
피드백 버튼이있는 페이지에 대한 링크를 게시 할 수 있습니까? 나는 당신이 무엇을 의미하는지 100 % 확실하지 않다. ... – TLama
@tlama 질문은 어떻게 생겼는지에 관한 것이 아니라, 마우스가 다른 요소 위로 이동할 때 부동 패널을 표시하는 방법에 관한 것이다. –
@Juan, 그럼 아마도 마우스를 움직이면 성장한 부분을 놓친 것입니다. 왜냐하면 그것은 나에게 어떤 종류의 애니메이션처럼 들리기 때문입니다. – TLama