畫面重繪的問題 |
尚未結案
|
markov
中階會員 發表:55 回覆:135 積分:53 註冊:2003-12-01 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
markov
中階會員 發表:55 回覆:135 積分:53 註冊:2003-12-01 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
可以請你詳述不正常的狀況嗎? 另外以這個情況看起來,有可能是VCL裡面的資料(如Caption),沒有正確的update到TPanel的window的windowtext。也就是說,原因可能在於你是直接修改了property的處理方法,或者是繼承property的method後,沒有正確的處理該method應該做的事,造成資料的不同步。 以下面的vcl source code作例子
procedure TListColumn.SetCaption(const Value: string); begin if FCaption <> Value then begin FCaption := Value; DoChange; end; end;如果你繼承後,自已寫了一個SetCaption,就也要一樣呼叫DoChange。不然會有資料不同步的問題。 不過以上只是猜測,如果還是沒解決…再來細看你的Code… |
markov
中階會員 發表:55 回覆:135 積分:53 註冊:2003-12-01 發送簡訊給我 |
我嘗試在非VCL下做實驗,發現問題仍在
caption都能正常動作,
但問題是在於透明與否,一旦按下button1透明就會消失,
但是將視窗最小化再最大化後就會恢復透明
還請pwipwi大大抽空幫我看看,感激不盡
//class的定義 class TTransPanel :public TPanel { void __fastcall CreateParams(Controls::TCreateParams &Params) { TPanel::CreateParams(Params); Params.ExStyle = WS_EX_TRANSPARENT; } void __fastcall AdjustColors(TPanelBevel Bevel,TColor& TopColor,TColor& BottomColor) { TopColor = clBtnHighlight; if (Bevel == bvLowered) TopColor = clBtnShadow; BottomColor = clBtnShadow; if (Bevel == bvLowered) BottomColor = clBtnHighlight; } void __fastcall Paint() { DynamicArray //呼叫class的動作 void __fastcall TForm1::FormCreate(TObject *Sender) { TransPanel1=new TTransPanel(Application); TransPanel1->Parent=Form1; TransPanel1->Font->Color=clRed; TransPanel1->Caption="123"; TransPanel1->BevelInner=bvNone; TransPanel1->BevelOuter=bvNone; TransPanel1->Visible=true; TransPanel1->Height=100; TransPanel1->Width=100; } void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose) { delete TransPanel1; } void __fastcall TForm1::Button1Click(TObject *Sender) { TransPanel1->Caption="124"; } |
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
markov
中階會員 發表:55 回覆:135 積分:53 註冊:2003-12-01 發送簡訊給我 |
|
liangnet
中階會員 發表:19 回覆:148 積分:83 註冊:2004-01-03 發送簡訊給我 |
|
markov
中階會員 發表:55 回覆:135 積分:53 註冊:2003-12-01 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
markov
中階會員 發表:55 回覆:135 積分:53 註冊:2003-12-01 發送簡訊給我 |
在改變標題後,加入下面的Code。 SetWindowPos(Form1->Handle,0,0,0,0,0,SWP_NOCOPYBITS
|SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); 並沒有太太的影響,
不過加入Repaint旗標之後好很多了,雖然元件本身還是會閃
我一度懷疑是Parent->Repaint();
因為都是先show TPanel的造型,
再清掉畫現在這個元件的造型
但是如果我把Parent->Repaint();這一行清掉又會連現在的元件都不畫了
雖然我不知道為什麼
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
markov
中階會員 發表:55 回覆:135 積分:53 註冊:2003-12-01 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
其實給分不給分不是重點啦
因為這個主題很有趣~題外話 在透明視窗上,
如果改了內容,就要告訴所有被這個透明視窗蓋住的視窗要重畫,
但>> class="code">
//class的定義
class TTransPanel :public TPanel
{
void __fastcall CreateParams(Controls::TCreateParams &Params)
{
TPanel::CreateParams(Params);
Params.ExStyle = WS_EX_TRANSPARENT;
}
void __fastcall AdjustColors(TPanelBevel Bevel,TColor& TopColor,TColor& BottomColor)
{
TopColor = clBtnHighlight;
if (Bevel == bvLowered) TopColor = clBtnShadow;
BottomColor = clBtnShadow;
if (Bevel == bvLowered) BottomColor = clBtnHighlight;
}
void __fastcall Paint()
{
DynamicArray
|
markov
中階會員 發表:55 回覆:135 積分:53 註冊:2003-12-01 發送簡訊給我 |
真是神奇有一封由ktop寄給我的你的回覆,
你還有附上你修改過後的source code,
可以在ktop上卻沒有,
我一直只是ktop的bug
沒有想到你剛剛附上來的source code居然也不是你寄給我的source code
見鬼了
下列是你當初給我的程式,我再稍做修改的完整程式碼
< class="code">
class TTransPanel :public TPanel
{
bool NoRepaint;
void __fastcall CreateParams(Controls::TCreateParams &Params)
{
TPanel::CreateParams(Params);
Params.ExStyle = WS_EX_TRANSPARENT;
}
void __fastcall AdjustColors(TPanelBevel Bevel,TColor& TopColor,TColor& BottomColor)
{
TopColor = clBtnHighlight;
if (Bevel == bvLowered) TopColor = clBtnShadow;
BottomColor = clBtnShadow;
if (Bevel == bvLowered) BottomColor = clBtnHighlight;
}
void __fastcall Paint()
{ if(NoRepaint)
{
NoRepaint = false;
return;
}
NoRepaint = true;
SetWindowPos(Parent->Handle,0,0,0,0,0,SWP_NOCOPYBITS
|SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
Parent->Repaint(); DynamicArray
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
markov
中階會員 發表:55 回覆:135 積分:53 註冊:2003-12-01 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
markov
中階會員 發表:55 回覆:135 積分:53 註冊:2003-12-01 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |