使用 Device Context 小例子 - 在 Title Bar 畫置中 Caption |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
Device Contexts (DC) 是 Window API 中一大類別,主要是畫東西的 (包括文字) 無論畫到螢光幕或是印表機,都會用都 DC 的功能 附上一個使用 Device Context 在 Title Bar 畫置中 Caption 的小例子。 修改 : 簡化 再修改 : 加入第二個版本
發表人 - Justmade 於 2003/05/10 13:34:48
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
轉貼自 005 期電子報 : CenterCaption.dpr 由於只想將標題置中,所以程式碼比較簡單 :
procedure TForm1.FormCreate(Sender: TObject); begin MyHDC := GetWindowDC(Handle); // 從 Form 的 handle 取得 Device Context *註1 SetBkMode(MyHDC,TRANSPARENT); // 設定底色透明 SetTextColor(MyHDC,$FFFFFF); // 設定字體顏色 $FFFFFF 為白色 MyCaption := Caption; // 將原本的Caption 放在變數待用 Caption := ''; // 清空原本 Caption Application.OnDeactivate := FormPaint; // 若不設這個轉到別程式時 Caption 會不見 end; procedure TForm1.FormPaint(Sender: TObject); begin RT := Rect(0,5,width,25); // 提取最新的 Caption 位置 DrawText(MyHDC,PChar(MyCaption),Length(MyCaption),RT,DT_CENTER); // 劃出標題,DT_CENTER 是置中 end; procedure TForm1.FormDestroy(Sender: TObject); begin DeleteDC(MyHDC); //關閉時刪掉 Device Context end;CenterCaption2.dpr 加多了自選字體,顏色,陰影,立體背景,及設定隱藏部份視窗位置等等 : procedure TForm1.FormCreate(Sender: TObject); begin MyHDC := GetWindowDC(Handle); MyFont := TFont.Create; //創建 Font,Brush,Pen MyBrush := TBrush.Create; MyPen := TPen.Create; MyFont.Name := 'Impact'; //設定字形 MyFont.Size := 11; MyFont.Style := [fsItalic]; MyPen.Style := psClear; //設定 Pen 屬性 SelectObject(MyHDC,MyFont.Handle);//告訴 DC 使用這字形 SelectObject(MyHDC,MyPen.Handle); //告訴 DC 使用這Pen SetBkMode(MyHDC,TRANSPARENT); MyCaption := Caption; Caption := ''; Application.OnDeactivate := FormPaint; end; procedure TForm1.FormPaint(Sender: TObject); var i : integer; begin for i := 0 to 10 do // 分十次劃橢圓做出漸層立體效果的背境 begin MyBrush.Color := RGB(i * 10 100, i * 8 80, i * 6 160); SelectObject(MyHDC,MyBrush.Handle); Ellipse(MyHDC,Round(width / 2) - 100 i, 4 i , Round(width / 2) 100 - i, 23 - i); end; RT := Rect(0,5,width 4,27); SetTextColor(MyHDC,$00000000); DrawText(MyHDC,PChar(MyCaption),Length(MyCaption),RT,DT_CENTER); // 先劃黑陰影 RT := Rect(0,3,width,25); SetTextColor(MyHDC,$00FFFFD9); DrawText(MyHDC,PChar(MyCaption),Length(MyCaption),RT,DT_CENTER); // 再劃正標題 end; procedure TForm1.FormDestroy(Sender: TObject); begin MyPen.Free; //關閉時釋放建立了的物件 MyBrush.Free; MyFont.Free; DeleteDC(MyHDC); end; procedure TForm1.FormResize(Sender: TObject); var RGN1, RGN2 : HRGN; // 儲存何處顯示的變數 begin RGN1 := CreateRoundRectRgn(0,23,Width, Height,20,20); // Form 主畫面的圓角長方顯示 Rgn2 := CreateEllipticRgn(Round(width / 2) - 100 , 4 , Round(width / 2) 100 ,23); // 標題橢圓顯示 CombineRgn(RGN1,RGN1,RGN2,RGN_OR); //將 RGN1 及 RGN2 合併在 RGN1 Rgn2 := CreateEllipticRgn(Width - 20, 6, Width - 8, 19); // 關閉按扭圓顯示 CombineRgn(RGN1,RGN1,RGN2,RGN_OR); //將 RGN1 及 RGN2 合併在 RGN1 SetWindowRgn(Handle,RGN1,true); // 設定 Form 只顯示剛才合併了的顯示位置 FormPaint(Sender); // 重新繪劃 end;這只是一些簡單的例子,你的 Form 要甚樣做就靠你的想像力了 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |