2009-06-26 12 views
8

Nie wiem, czy można tu odpowiedzieć na to pytanie, ale mam nadzieję, że tak. Napisałem prosty edytor tekstu w Delphi 7, który służy jako moje podstawowe IDE do pisania kodu C pod Windows. Uruchomiłem Windows w maszynie wirtualnej i potrzebowałem czegoś lekkiego. W każdym przypadku używa TpageControl, która pobiera nową kartę za każdym razem, gdy otwierasz lub tworzysz nowy plik. Całkiem standardowe. Teraz TPageControl w Delphi nie ma własności płaskiej.Wykonywanie mieszkania TPageControl w Delphi 7

NO I nie mam na myśli ustawieniu stylu kartę do tsButtons lub tsFlatButtons

granice nie może być ustawiony na „none” i wygląda bardzo źle, gdy dodasz edytora tekstu do kontroli kart.

Czy istnieje sposób na wyrównanie TpageControl?

EDIT:

na otwartym PageControl źródłowego, który wspiera płaskim oto co znalazłem:

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; 

Chodzi o to, kiedy próbowałem coś podobnego na głównej aplikacji nie będzie działać. Nawet się nie skompiluje.

Odpowiedz

11

Gdy wypustki są rysowane jako przyciski, nie granica jest zasysane wokół wyświetlacza, tak ustawić właściwość Style do tsButtons lub tsFlatButtons. (W przypadku programistów innych niż VCL jest to równoważne z włączeniem stylu okna tcs_Buttons na karcie sterowania.)

Alternatywą jest użycie TNotebook. Przechowuje strony, ale w ogóle nie maluje. Trzeba samemu zapewnić karty, np. Ustawiając wysokość kontrolki tabulacji równą wysokości kart lub używając TTabSet. (TTabSet jest dostępny w Delphi 2005, nie jestem pewien co do Delphi 7.)

Odnośnie znalezionego kodu, pomocne byłoby wskazanie przyczyny kompilacji lub podanie linku do miejsca Znalazłeś go, ponieważ przypuszczam, że błąd kompilacji wynikał z tego, że odnosi się on do pól lub właściwości niestandardowej klasy, a nie do zasobu podstawowego. Oto, co możesz spróbować umieścić w swoim własnym kodzie, bez konieczności pisania kontroli niestandardowej.

dokonać dwóch nowych deklaracji w swojej formie tak:

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

w formie za OnCreate obsługi zdarzeń, przypisywanie tej metody do sterowania Page za WindowProc nieruchomości:

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

teraz wdrożyć że metoda i obsługa wiadomości tcm_AdjustRect:

procedure TForm1.TabWndProc(var Msg: TMessage); 
begin 
    FOldTabProc(Msg); 
    if Msg.Msg = tcm_AdjustRect then begin 
    case PageControl1.TabPosition of 
     tpTop: begin 
     PRect(Msg.LParam)^.Left := 0; 
     PRect(Msg.LParam)^.Right := PageControl1.ClientWidth; 
     Dec(PRect(Msg.LParam)^.Top, 4); 
     PRect(Msg.LParam)^.Bottom := PageControl1.ClientHeight; 
     end; 
    end; 
    end; 
end; 

Możesz wypełnić pozostałe trzy przypadki, jeśli ich potrzebujesz. Tcm_AdjustRect to identyfikator wiadomości zadeklarowany w jednostce CommCtrl . Jeśli nie masz tej wiadomości w tej jednostce, zadeklaruj ją sam; jego wartość to 4904.

Podejrzewam, że to nie powstrzymuje kontroli przed rysowaniem jej granic.Przeciwnie, powoduje, że zamknięty w sobie TTabSheet rośnie nieco większy i zasłania granice.

+1

za pomocą guzików płaskich powinno załatwić sprawę. Często go używam. – Hemant

+0

Dzięki, ale jak wspomniałem na moje pytanie, nie chcę tsFlatButtons. – wonderer

+0

Następnie użyj niepustych przycisków. Chodzi o to, że kontrolka strony idzie płasko, gdy zakładki są przyciskami, niezależnie od rodzaju przycisków. –

2

Zawsze można użyć komercyjnego rozwiązania. Zdecydowanie polecam Raize components, które obsługują płaskie TPageControls z zakładkami. Zestaw komponentów jest bardzo łatwy w obsłudze i obsługuje liczne ulepszenia wizualne, które moim zdaniem dają lepsze wyczucie każdej aplikacji.

screen shot of tTPageControl with flat borders

+0

Dzięki. Ale 1) Znalazłem rozwiązanie i 2) ponieważ jest to program osobisty Nie widzę potrzeby płacenia za kompilator – wonderer

1

spadek dwa TPageControl s, jedna z zakładek jak Tab S, o wysokości globalnego równej zakładek, a jeden z flatbuttons i Tabvisible właściwościach przedstawionych false, które byłyby dostosowane pod pierwszym. Następnie upewnij się, że zmiana zakładki na pierwszym TPagecontrol powoduje, że zakładki zmieniają się również w drugiej.

0

używam Delphi XE8 i następujący wydaje rade:

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

Byłoby miło, gdyby ludzie wyjaśnili swoje pochwały. – uberlaufer

+1

Kliknąłem downvote podczas przeglądu, ponieważ pytanie dotyczy 'Delphi 7', a nie' Delphi XE8'. Nie wiedziałem, że głosy dodane podczas recenzji nie są usuwane po zakończeniu przeglądu (odpowiedź opublikowana lub usunięta). Niestety nie mogę teraz odejść. – agabrys

+2

Bez problemu. Byłem po prostu ciekawy i powiedziałbym, że jeśli to może pomóc komuś, kto się na to natknął, tak jak to jest wyraźnie zaznaczone, która wersja dotyczy, osobiście wolałbym, aby takie powiązane odpowiedzi były zachęcane. Ale jestem tu nowy i nie jestem jeszcze doskonale zaznajomiony z całą strukturą strony i konwencjami, jak sobie z nią radzić. Dzięki za opinie! – uberlaufer

Powiązane problemy