2013-09-20 7 views
6

देखो:डेल्फी: सामने से TImage लाओ नीचे दी गई छवि पर

enter image description here

आप देख सकते हैं मैं बटन वापस करने के लिए नहीं भेज सकते। यह केवल लेबल के लिए काम करता है।

तो मैं को पर अपनी पारदर्शिता के साथ कैसे भेज सकता हूं।

जिस तरह से मैंने This related question पढ़ा है लेकिन मेरी मदद नहीं की। क्योंकि आप एंड्रियास रेजब्रांड के कोड को चलाने के बाद बटन पर भी क्लिक नहीं कर सकते हैं। इतना ही नहीं बटन, सब कुछ (इस छवि में स्क्रॉलबार की तरह)

संपादित करें: मैं बटन पहुंच योग्य बनाने के लिए के बाद मुझे लगता है कि वापस छवि को भेज नहीं करना चाहती। बस सब कुछ के सामने TImage लाने के लिए चाहते हैं।

धन्यवाद।

+0

तो अपने प्रश्न "* है कि कैसे मैं एक TWinControl के सामने एक TImage ला सकता है और साथ ही क्लिक के माध्यम से क्लिक करें? "* (जैसा कि आप जानते हैं कि आप एक छवि पर क्लिक कर सकते हैं।) –

+5

चूंकि TGraphicControl (जैसे TLabel, TImage, TSpeedbutton) से प्राप्त घटकों को उनके माता-पिता डीसी पर चित्रित किया गया है, वहां लाने का कोई तरीका नहीं है ए अपने स्वयं के डीसी के साथ एक TWincontrol के सामने TGraphicControl। – bummi

+3

जैसा कि बुम्मी कहते हैं। आपका 'आगे बढ़ना लेबल के लिए काम करना है' दावा गलत है। –

उत्तर

8

आप नहीं चाहते हैं कि छवि सामने लाई जाए (जिस तरह से खिड़की वाले नियंत्रण पर असंभव है), क्योंकि आप बटन भी पहुंच सकते हैं।

हालांकि आपका प्रश्न स्वयं विरोधाभासी है, और यह बिल्कुल स्पष्ट नहीं है कि आप वास्तव में क्या हासिल करना चाहते हैं, मुझे लगता है कि आपके पास छवि पर एक पारदर्शी बटन होना है।

यदि ऐसा है, तो TSpeedButton का उपयोग करें, और Transparent और Flat संपत्ति को सत्य पर सेट करें।

यहाँ तीन बटन राज्यों के साथ एक उदाहरण: सामान्य, hovered, दबाया:

enter image description here

4

आप समाधान आप अपने प्रश्न में जुड़े हुए उपयोग कर सकते हैं। उन नियंत्रणों के लिए जिन्हें आप क्लिक करना चाहते हैं - उन्हें अक्षम करें। चूंकि आप एक पैनल पर छवि डाल रहे हैं, पैनल और छवि दोनों को अक्षम करने से बटन को क्लिक करने दिया जाएगा।

10

लक्ष्य के नजदीक एक तरीका जो आप TWINcontrols के लिए इंटरपोजर कक्षाओं का उपयोग करना होगा और टीसींट्रोल कन्ववास और "हुकिंग" WM_PAINT का उपयोग करके पहले से चित्रित किए जाने के बाद छवि को उनके ऊपर ले जाया जाएगा।
कोड एक semitransparent पीएनजी छवि का उपयोग कर कच्चे मसौदे दिखा रहा है और बढ़ाया जा सकता है।

enter image description here

unit Unit2; 

interface 

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

type 
    TButton=Class (StdCtrls.TButton) 
     Procedure WMPaint(var MSG:TMessage);Message WM_Paint; 
    End; 
    TEdit=Class (StdCtrls.TEdit) 
     Procedure WMPaint(var MSG:TMessage);Message WM_Paint; 
    End; 

    TForm2 = class(TForm) 
    Image1: TImage; 
    SpeedButton1: TSpeedButton; 
    Button1: TButton; 
    Edit1: TEdit; 
    Edit2: TEdit; 
    private 
    { Private-Deklarationen } 
    public 
    { Public-Deklarationen } 
    end; 

var 
    Form2: TForm2; 

implementation 

{$R *.dfm} 

{ TButton } 

procedure TButton.WMPaint(var MSG: TMessage); 
var 
    cc:TControlCanvas; 
begin 
    inherited; 
    CC:=TControlCanvas.Create; 
    CC.Control := TControl(Self); 
    CC.Draw(-Left,-Top,Form2.Image1.Picture.Graphic); 
    CC.Free; 
end; 

procedure TEdit.WMPaint(var MSG: TMessage); 
var 
    cc:TControlCanvas; 
begin 
    inherited; 
    CC:=TControlCanvas.Create; 
    CC.Control := TControl(Self); 
    CC.Draw(-Left,-Top,Form2.Image1.Picture.Graphic); 
    CC.Free; 

end; 

end. 

एक और (बेहतर) जगह "हुक" अधिभावी किया जाएगा PaintWindow

unit Unit2; 

interface 

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

type 
    TButton=Class (StdCtrls.TButton) 
     procedure PaintWindow(DC: HDC);override; 
    End; 
    TEdit=Class (StdCtrls.TEdit) 
     procedure PaintWindow(DC: HDC);override; 
    End; 

    TForm2 = class(TForm) 
    Image1: TImage; 
    SpeedButton1: TSpeedButton; 
    Button1: TButton; 
    Edit1: TEdit; 
    Edit2: TEdit; 
    private 
    { Private-Deklarationen } 
    public 
    { Public-Deklarationen } 
    end; 

var 
    Form2: TForm2; 

implementation 

{$R *.dfm} 

{ TButton } 

procedure TButton.PaintWindow(DC: HDC); 
var 
    cc:TCanvas; 
begin 
    inherited; 
    CC:=TCanvas.Create; 
    CC.Handle := DC; 
    CC.Draw(-Left,-Top,Form2.Image1.Picture.Graphic); 
    CC.Free; 
end; 

procedure TEdit.PaintWindow(DC: HDC); 
var 
    cc:TCanvas; 
begin 
    inherited; 
    CC:=TCanvas.Create; 
    CC.Handle := DC; 
    CC.Draw(-Left,-Top,Form2.Image1.Picture.Graphic); 
    CC.Free; 

end; 

end. 
संबंधित मुद्दे