2009-06-26 21 views
8

Bu sorumun yanıtı burada edilebilir olup olmadığını bilmiyorum bir TPageControl düz yapma, ama umuyoruz. Delphi 7'de Windows altında C kodu yazmak için birincil IDE olarak görev yapan basit bir metin editörü yazdım. Windows'u bir VM'de çalıştırıyorum ve ışığa ihtiyacım vardı. Her durumda, açtığınızda veya yeni bir dosya oluşturduğunuzda yeni bir sekme alan bir TpageControl kullanır. Oldukça standart. Şimdi, Delphi altındaki TPageControl'ın düz bir özelliği yok.Delphi 7

HAYIR ben tsButtons veya tsFlatButtons sınırları ayarlanamaz

sekme stilinin ayarlanması anlamına gelmez "yok" ve sekme denetimi içine bir metin düzenleyicisi eklerken oldukça kötü görünüyor.

bir TpageControl düz hale getirmek için herhangi bir yolu var mı?

DÜZENLEME: Burada düz destekleyen bir açık kaynak pagecontrol On

buldum budur:

procedure TCustomTabExtControl.WndProc(var Message: TMessage); 
begin 
    if(Message.Msg=TCM_ADJUSTRECT) and (FFlat) then 
    begin 
    Inherited WndProc(Message); 
    Case TAbPosition of 
    tpTop : begin 
    PRect(Message.LParam)^.Left:=0; 
    PRect(Message.LParam)^.Right:=ClientWidth; 
    PRect(Message.LParam)^.Top:=PRect(Message.LParam)^.Top-4; 
    PRect(Message.LParam)^.Bottom:=ClientHeight; 
    end; 
    tpLeft : begin 
    PRect(Message.LParam)^.Top:=0; 
    PRect(Message.LParam)^.Right:=ClientWidth; 
    PRect(Message.LParam)^.Left:=PRect(Message.LParam)^.Left-4; 
    PRect(Message.LParam)^.Bottom:=ClientHeight; 
    end; 
    tpBottom : begin 
    PRect(Message.LParam)^.Left:=0; 
    PRect(Message.LParam)^.Right:=ClientWidth; 
    PRect(Message.LParam)^.Bottom:=PRect(Message.LParam)^.Bottom-4; 
    PRect(Message.LParam)^.Top:=0; 
    end; 
    tpRight : begin 
    PRect(Message.LParam)^.Top:=0; 
    PRect(Message.LParam)^.Left:=0; 
    PRect(Message.LParam)^.Right:=PRect(Message.LParam)^.Right-4; 
    PRect(Message.LParam)^.Bottom:=ClientHeight; 
    end; 
    end; 
end else Inherited WndProc(Message); 

end; 

Ben işe yaramaz ana uygulamaya benzer bir şey çalıştığımızda şeydir. Hatta derleme bile olmaz.

cevap

11
Sekmeler düğmeler olarak çizildiğinde, görüntü alanı çevresinde kenarlık çizilmez, bu nedenle Style özelliğini tsButtons veya tsFlatButtons olarak ayarlayın. (VCL olmayan programcılar için bu, sekme denetiminde tcs_Buttons pencere stilini dahil etmekle eşdeğerdir.)

Bir alternatif TNotebook kullanmaktır. Sayfalar tutar, ama hiç resim yapmaz. Sekme kontrolünü, sekmelerin yüksekliğine eşit bir yüksekliğe ayarlayarak veya TTabSet kullanarak sekmeleri kendiniz sağlamanız gerekir. (TTabSet, Delphi 2005'te bulunmaktadır; Delphi 7'den emin değilim.)

Bulduğunuz kodla ilgili olarak, neden derleme yapılmadığını belirtmediyseniz veya bir bağlantı verdiyseniz Bunu buldum, çünkü derleme hatası, stok sınıfından ziyade özel sınıfın alanlarına ya da özelliklerine atıfta bulunduğuna inanıyorum. İşte size özel bir kontrol yazmak zorunda kalmadan kendi kodunuza koymaya çalışabilecekleriniz. Formun OnCreate Olay işleyicisi

FOldTabProc: TWndMethod; 
procedure TabWndProc(var Msg: TMessage); 

, atamak sayfa denetimin WindowProc özelliğine bu yöntem:

FOldTabProc := PageControl1.WindowProc; 
PageControl1.WindowProc := TabWndProc; 

Şimdi bu uygulamaya

bu gibi formda iki yeni bildirimleri olun yöntemi ve tcm_AdjustRect messsage kolu:

Onları gerekirse

diğer üç durumda da doldurabilir. Tcm_AdjustRectCommCtrl ünitesinde bildirilen bir mesaj kimliğidir. Eğer o mesajda o mesaj yoksa, kendiniz bildirin; değeri bu sınırlarını çizerek gelen kontrolünü durmaz şüpheli 4904.

olduğunu.Bunun yerine, TTabSheet'un biraz daha büyüyerek sınırlarını örtmesine neden olur.

+1

hile yapmak gerekir düz düğmeleri kullanarak. Sıklıkla kullanırım. – Hemant

+0

Teşekkürler, ama bahsettiğim gibi tsFlatButtons istemiyorum. – wonderer

+0

Ardından düz olmayan düğmeleri kullanın. Bunun anlamı, butonlar ne zaman olursa olsun düğmeler olduğunda sayfa kontrolünün düz kalmasıdır. –

2

Her zaman ticari bir çözüm kullanabilirsiniz. Sekmelerle düz TPageControlleri destekleyen Raize components'u şiddetle öneririm. Bileşen seti ile çalışmak çok kolay ve benim görüşüme göre herhangi bir uygulama için daha iyi bir fikir vermek sayısız görsel geliştirmeleri destekler.

screen shot of tTPageControl with flat borders

+0

Teşekkürler. Ama 1) zaten bir çözüm buldum ve 2) bu kişisel bir program olduğu için ben bir komplo – wonderer

1

damla iki TPageControl sekme eşit bir küresel yüksekliği s, Tab s olarak tırnaklı bir, ve birinci altında hizalanabilecektir yanlış ayarlanmış flatbuttons ve Tabvisible özelliklere sahip bir. Daha sonra, ilk TPagecontrol sekmesindeki değişiklik sekmelerin ikinci sekmede de değiştiğinden emin olun.

0

Ben Delphi XE8 kullanıyorum ve şu hileye neden olabilir:

ATabControl.Tabs.Clear; 
ATabControl.Style := TTabStyle.tsFlatButtons; 
ATabControl.Brush.Color := clWhite; 
+0

için ödeme ihtiyacı görmüyorum insanlar downvotes açıkladı eğer güzel olurdu. – uberlaufer

+1

İnceleme sırasında downvote'ı tıklıyorum çünkü soru, Delphi XE8 değil Delphi 7 ile ilgilidir. Bilmiyordum, inceleme sırasında eklenen oylar, inceleme tamamlandıktan sonra kaldırılmaz (yayınlandı veya kaldırıldı). Maalesef şu an yok edemem. – agabrys

+2

Sorun değil. Ben sadece merak ettim ve eğer bu konuya işaret eden birisine yardım edip edemeyeceğini söyleyeyim, bu konuyla ilgili olarak açıkça belirtildiği gibi, kişisel olarak bu tür cevapları teşvik etmeyi tercih ederim. Ama ben burada yeniyim ve sitenin tüm yapısına ve onunla nasıl başa çıkılacağına dair kurallara henüz tam olarak aşina değilim. Yine de geribildirim için teşekkürler! – uberlaufer