2009-02-26 11 views
6

Co jakiś czas, gdy poprawiam moje klasy TFrame (dodając właściwości, metody itp.), IDE będzie zdezorientowany i zachowa się tak, jakby sądził, że ramka jest formą, wraz z nagłówkiem/podpisem, ramkami itp. Jednak, wyraźnie, klasa jest deklarowana jako potomek TFrame. Wszelkie pomysły na przyczyny tego, jak zapobiegać i jak je naprawić?Delphi IDE traktuje TFrame tak, jakby był Formą

Używam Delphi 2007 Pro. Zauważ również (jeśli ma to znaczenie), potomkowie TFrame są zazwyczaj rejestrowani za pomocą IDE (tj. Na palecie) za pośrednictwem pakietu czasu projektowania.


Później: Dodatkowe „specyfika”: Rama że mam ten problem z co chwila jest wizualnie, bardzo prosty TFrame (zmienić tylko z nowym TFrame jest rozmiar i kolor tła).

Oto jej deklaracja klasy:

TBasePanel = class(TFrame) 
    private 
    FPanelManager: TPanelManager; 
    procedure SetPanelManager(const Value: TPanelManager); 
    protected 
    procedure Connect; virtual; abstract; 
    procedure Disconnect; virtual; abstract; 
    procedure Refresh; virtual; 
    procedure Requery; virtual; abstract; 
    published 
    property PanelManager: TPanelManager read FPanelManager write 
     SetPanelManager; 

Rama ta służy jako klasa bazowa dla wielu innych. Zwykle edytuję go bezpośrednio z projektu BPL, do którego należy (ponieważ wszystkie te ramki są instalowane na palecie), a nie jako część projektu EXE, z pokrewnymi formularzami otwartymi itp.

"Embedded designer" jest zaznaczone w Narzędzia -> Opcje.

Zapisuję wszystkie pliki DFM jako tekst, a nie jako plik binarny (jeśli to ma znaczenie).

+1

Po prostu aktualizacja: odpowiedź wydaje się być kombinacją odpowiedzi brzuszka poniżej PLUS tworząc "klasę ramki bazowej", która nie ma ŻADNYCH zmian w stosunku do normalnej ramki TFRAME, a THENTA dziedziczy po niej przed dodaniem jakichkolwiek właściwości, metod itp. Wydaje się, że w jakiś sposób ustabilizowałeś dziedziczenie. – Jamo

Odpowiedz

8

Napotkałem ten sam problem. Poniższe czynności rozwiązało problem dla nas, to może również pracować dla Ciebie:

  1. w IDE: zamknij wszystkie formy, które używają ramkę
  2. otwarcia ramy, widok jako tekst (* .dfm)
  3. DFM prawdopodobnie zaczyna się od obiektu MyFrame: TMyFrameClass
  4. zmiana to odziedziczonej MyFrame: TMyFrameClass

nie wiem, co jest przyczyną problemu.

+0

To wydaje się działać na klasach przodków, ale wciąż mam problemy z klasą "root" (tą, która pochodzi z TFrame). Ten "pierwszy" POWINIEN być "obiektem", prawda? – Jamo

+0

Nie jestem pewien, w projekcie, w którym miałem ten problem, wszystkie ramki zaczynają się od "odziedziczonej MyFrame: TMyFrame". Pierwszy potomek TFrame, którego używamy, nie ma dfm, więc nie mogę sprawdzić, co powinien tam być. – Birger

+0

Interesujące! Nie pomyślałbym o tym, by ten "pierwszy" TFrame był potomkiem bez DFM. To może wyeliminować problemy z "podstawową funkcją TFrame", które podejrzewam. Hmmm ... Dzięki za te informacje. Eksperymentować z tym podejściem! – Jamo

0

Z tego co wiem, podczas edytowania ramki musisz mieć zarówno formularz, jak i ramkę otwartą w edytorze. Inaczej mogą wystąpić problemy z aktualizacją. Chociaż tego nie widziałem.

Ale dawno temu zrezygnowałem z ramek, ponieważ nie uważałem ich za bardzo niezawodne.

W tej chwili używam ich tylko do prototypowania, tworząc niestandardowy komponent (wywodzący się z panelu z odpowiednimi kontrolkami na nim).

1

Być może odznaczono pole wyboru "Projektant wbudowany"? (Narzędzia | Opcje | Opcje środowiskowe | Projektant VCL). W takim razie ramka jest wyświetlana jako w czasie projektowania jako formularz (z podpisem, ramką itp.). Pomocny byłby również konkretny kod twojego problematycznego potomka TFrame lub więcej szczegółów na temat twojej sprawy.

0

You may have to register custom module to the IDE Ale twoje dodatkowe właściwości nie będą działały dobrze, jeśli nie są w klasie przodków.

+0

Czy nadal musisz to robić, nawet jeśli cały komponent oparty na ramce jest zarejestrowany za pomocą pakietu projektowego? Pojawia się na palecie dobrze, a opublikowane właściwości pojawiają się w inspektorze. "Traci to zachowanie klatki", ale właśnie tego chcę. Nie śledząc tego, co to robi. – Jamo

+0

Nie ma nic o zarejestrowaniu go jako zwykłego komponentu. Może zajść potrzeba zarejestrowania modułu niestandardowego, aby uzyskać odpowiedni projektant. Nadal nie jestem pewien, ponieważ sposób obsługi jest Tframe w czasie projektowania nie jest przezroczysty dla programistów. Ale warto spróbować w mojej opinii. – Serguzest

0

Spotkałem wiele problemów z TFrame i ostatecznie doszedłem do takiego obejścia, które rozwiązuje wszystkie moje problemy: tworzę i projektuję ramki wizualnie, ale używam ich tylko ręcznie.

Jako efekt uboczny moje aplikacje stały się mniejsze, ze względu na mniej dfm-s.

Powiązane problemy