2013-01-10 6 views
3

저는 개인 프로젝트를 진행 중이며 최근에 많은 질문을 낳았습니다.하지만 이봐, 바로 그게 옳은 것입니까? ;)델파이 패널 및 맞춤 구성 요소 Z 주문 문제

어쨌든 나는 custom component를 만들어 투명 TPanel을 만들려고했다. 메신저 응용 프로그램은 워크 래프트의 세계에 관한 것이고 나는 공식 웹 사이트에서와 같은 재능 계산기를 만들었지 만 Windows 응용 프로그램에서 만들었습니다. 재능은 주문/기술이며 각 재능에는 툴팁으로 표시되는 정보가 있습니다.

그래서 나는 정보와 도구 설명,

나는 재능 그리드를 가지고 있고 나는 재능에 마우스를 가져 가면 나는 정보를 표시 할 수 있습니다. 그 외에도 정보가 커서 위치 근처에 표시되기를 원합니다.

거의 작동합니다. 위치 조정이 작동하지만 올바른 정보를 표시하지만 그러나! 여기에 문제가있다. Talent screen

검은 반투명 패널이 내 툴팁입니다. 어두운 회색 패널에있는 재능 (그 작은 4x6 격자)은 pnlTalents 입니다.이 패널의 부모는 전체 양식이 Panel1 인 밝은 회색 패널입니다. TooltipTalent이라는 툴팁에도 Panel1이라는 부모가 있습니다. pnlTalents을 뒷면에 보내려고 TooltipTalent을 앞에 놓았지만 전혀 차이가 없었습니다. 심지어 위치가 변경되는 순간에 TooltipTalent.BringToFront;을 시도했습니다. 화면 상단의 속도가 느린 회색 패널 위에 도구 설명이 아무런 문제가 없는지 확인하십시오. 필자는 양쪽 패널 (맨 위 패널과 재능 패널 중 하나)을 비교하여 특성에 차이가 없음을 발견했습니다. 나는 심각하게 아이디어가 부족합니다. 나는 그것을 일으키는 원인이 무엇인지, 어떻게이 문제를 해결할 수 있는지 전혀 모른다.

최후의 수단으로 전체 양식을 덮는 다른 투명 패널을 놓아 두어 보았지만 문제가 여전히 지속되었다고 생각했습니다.

내 맞춤 구성 요소의 코드를 게시 할 수도 있지만 그 정도면 충분합니다. 코드를보고 싶으면 알려주는 방법을 찾아야합니다. :)

아무도 도와 줄 수 있습니까? 종류 내가

enter image description here

그냥 예로는, 이미지 1이 반투명 PNG를 포함하고이 결과를 얻을 Quickhackcode으로

+1

'TToolWindow'와'THintWindow'는'TWinControl'을 상속 받았으며 잘 보여야합니다. 툴팁은'TControl/TGraphicControl'에서 내려 오는 커스텀 컨트롤입니까? 이 경우 그리드는 항상 맨 위에 표시됩니다. – NGLN

+0

이 모든 블렌딩을 사용하여 VCL 대신 FireMonkey (FMX) 라이브러리를 기반으로 프로그램을 만들려고하십니까? –

+0

@NGLN 그리드는 TPanels로 만들어졌고 사용자 정의 컨트롤은 TPanel을 기반으로합니다. –

답변

3
procedure TMyPanel.CreateParams(var params: TCreateParams); 
begin 
    params.ExStyle := params.ExStyle or WS_EX_TRANSPARENT or WS_EX_TOPMOST ; 
    inherited CreateParams(params);  
end; 

에 관하여 :

unit Unit4; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, ExtCtrls, StdCtrls, dxGDIPlusClasses; 

type 

    TMyPanel=Class(TPanel) 
    procedure CreateParams(var params: TCreateParams); override; 
    procedure WMEraseBkGnd(var msg: TWMEraseBkGnd); message WM_ERASEBKGND; 
    End; 


    TForm4 = class(TForm) 
    Panel1: TPanel; 
    Button1: TButton; 
    Image1: TImage; 
    Button2: TButton; 
    CheckBox1: TCheckBox; 
    Panel2: TPanel; 
    Button3: TButton; 
    Label1: TLabel; 
    procedure Button1Click(Sender: TObject); 
    procedure Button3Click(Sender: TObject); 
    private 
    { Private-Deklarationen } 

    Fmp:TMyPanel; 
    fisInPaint:Boolean; 
    public 
    { Public-Deklarationen } 
    end; 

var 
    Form4: TForm4; 

implementation 

{$R *.dfm} 

{ TMyPanel } 

procedure TMyPanel.CreateParams(var params: TCreateParams); 
begin 
    params.ExStyle := params.ExStyle or WS_EX_TRANSPARENT or WS_EX_TOPMOST ; 
    inherited CreateParams(params); 
end; 



procedure TMyPanel.WMEraseBkGnd(var msg: TWMEraseBkGnd); 
begin 
    SetBkMode (msg.DC, TRANSPARENT); 
    msg.result := 1; 
end; 

procedure TForm4.Button1Click(Sender: TObject); 
begin 

    Fmp := TMyPanel.Create(self); 
    With Fmp do 
    begin 
     Parent := self; 
     left:= Panel1.Left -100; 
     top:= Panel1.top -100; 
     width := 300; 
     Height := 300; 
    end; 
    image1.Parent := Fmp; 
    Image1.Align := alClient; 
    Image1.Stretch := true; 
    Fmp.BringToFront; 
    Label1.Parent := FMP; 
    label1.Transparent := true; 
    Label1.Left := 100; 
    Label1.Left := 100; 
end; 

procedure TForm4.Button3Click(Sender: TObject); 
begin 
    Fmp.Left := fmp.Left + 10; 
end; 

end. 

XP와 함께 문제를 재현 할 수 없습니다 어느 하나 :

enter image description here

+0

이런 종류의 트릭을했습니다. 그것은 상단에있을 것입니다 그러나 투명성을 잃었습니다 –

+0

그것의 이상한 디자인보기에서 투명하지만 런타임 동안 그것을 보여줍니다 –

+0

아마 다른 Windows Windows 또는 아마 다른 플래그 (확인), 또는 어쩌면 다른 플래그 델파이 exe와 exe에서 다른 XP MAINFESTs. –