程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 新公司一個半月,新公司注冊代理公司

新公司一個半月,新公司注冊代理公司

編輯:Delphi

新公司一個半月,新公司注冊代理公司


不知不覺在新公司一個半月了。

感覺還不錯,剛剛接手項目兩天,還沒有什麼壓力。

 

軟件都是用D5開發的,沒有Object Treeview真是不適應。

公司的老人都挺能忍的。研發部的經理早說可以升級D7,

只有新人(就兩個)升級了,其他竟然還真的就在D5下面維護。都是老油條了。

 

D5升級到D7基本無痛。只是線程要注意點

D5結束線程用的是suspend之後free;

D7 我自己是用Freeonterminate:=true;Terminate;的。

不過同事說這個好像不穩定

推薦使用

Terminate;

Waitfor;

Free;

 

發現Delphi真是冷清啊。這周沒事在研究xe7下面doubulebuffer打開後panel不再透明的問題

最終在TwinControl中找到這個。

procedure TWinControl.WMPaint(var Message: TWMPaint);

還有下面這個

procedure TWinControl.WMEraseBkgnd(var Message: TWMEraseBkgnd);

begin

if StyleServices.Enabled and Assigned(Parent) and (csParentBackground in FControlStyle) then

begin

{ Get the parent to draw its background into the control's background. }

if Parent.DoubleBuffered then

begin

PerformEraseBackground(Self, Message.DC);

end

else

begin

StyleServices.DrawParentBackground(Handle, Message.DC, nil, False);

end;

end

else

begin

{ Only erase background if we're not doublebuffering or painting to memory. }

if not FDoubleBuffered or

{$IF DEFINED(CLR)}

(Message.OriginalMessage.WParam = Message.OriginalMessage.LParam) then

{$ELSE}

(TMessage(Message).wParam = WPARAM(TMessage(Message).lParam)) then

{$ENDIF}

FillRect(Message.DC, ClientRect, FBrush.Handle);

end;

Message.Result := 1;

end;

 

在wm_paint中啟作用的是下面的代碼(注釋掉的是我自己亂添加的)

想著如果在MemDC中直接把透明的部分給畫進去應該也算透明了,嘗試失敗。有大神看會的指點下。

DC := BeginPaint(Handle, PS);

// if (csParentBackground in ControlStyle) and (self.Parent<>nil) then

// begin

// DC1:= GetDC(self.Parent.Handle);

// PaintBuffer1 := BeginBufferedPaint(DC1,Rect(self.Left,self.Top,self.Left+self.Width,self.Top+self.Height), BPBF_COMPOSITED, nil, MemDC1);

// Perform(WM_PRINTCLIENT, MemDC1, PRF_CLIENT);

// EndBufferedPaint(PaintBuffer1, True);

// end;

 

 

Try

//把控件在,內存中繪制

PaintBuffer := BeginBufferedPaint(DC, PS.rcPaint, BPBF_COMPOSITED, nil, MemDC);

if PaintBuffer <> 0 then

try

// Perform(WM_PRINTCLIENT, MemDC1, 0);

// if MemDC1<>0 then

// begin

// Perform(WM_ERASEBKGND, MemDC1, 0)

// end

// else

begin

Perform(WM_ERASEBKGND, MemDC, 0)

end;

 

Perform(WM_PRINTCLIENT, MemDC, PRF_CLIENT);

if not (csPaintBlackOpaqueOnGlass in FControlStyle) then

BufferedPaintMakeOpaque(PaintBuffer, PS.rcPaint);

finally

EndBufferedPaint(PaintBuffer, True);

end;

finally

EndPaint(Handle, PS);

end;

 

真是沒辦法了就只好放棄了。

大不了費點勁用FireMonkey來做顯示窗口,反正跟VCL混合編程好像也沒什麼問題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved