CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Problem z Formą

Problem z Formą

dział ogólny

Problem z Formą

Nowy postprzez piotr.kwlk » piątek, 17 lutego 2012, 08:30

Witam
Mam problem z jedną Formą w projekcje, gdy chcę wywołać okno projektu a dokładnie Forme, nic się nie dzieje, może nie do końca bo zamiast formy ukazuje mi się okno z kodem czyli plik cpp. Nie wiem co się stało i z czym związany jest to dziwne zachowanie. Gdy otwieram projekt starszej wersji to wszystko jest ok, ale dużo się zmieniło więc zależy mi na odzyskaniu tego. Czy jest na to jakieś rozwiązanie ? Mam BCB 6 i pracuje na Win 7 64 bit.
Piotr
Avatar użytkownika
piotr.kwlk
Bladawiec
Bladawiec
 
Posty: 25
Dołączył(a): środa, 9 marca 2011, 17:34
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: Builder 6
Gadu Gadu: 0
    Windows 7Firefox

Re: Problem z Formą

Nowy postprzez Cyfrowy Baron » piątek, 17 lutego 2012, 20:04

Za mało informacji. Podaj kod odpowiedzialny za wywołanie okna. Czy program uruchamiasz z poziomu IDE, czyli w środowisku C++Builder? Czy ten problem występuje, gdy uruchamiasz problem poza środowiskiem IDE?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Problem z Formą

Nowy postprzez piotr.kwlk » niedziela, 19 lutego 2012, 19:53

Z poziomu IDE
KOD cpp:     UKRYJ  
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    try
    {
        Application->Initialize();
        Application->CreateForm(__classid(TForm1), &Form1);
        Application->CreateForm(__classid(TForm2), &Form2);
        Application->CreateForm(__classid(TForm3), &Form3);
        Application->Run();
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    catch (...)
    {
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
    }
    return 0;
}
//---------------------------------------------------------------------------


Odtworzyłem sobie z poprzedniej wersji programu wklejając kod z uszkodzonej. Mam nadzieje, że się to nie powtórzy. Ale jeśli są znane takie przypadki i jak z nimi sobie poradzić to bardzo chętnie się zapoznam.
Piotr
Avatar użytkownika
piotr.kwlk
Bladawiec
Bladawiec
 
Posty: 25
Dołączył(a): środa, 9 marca 2011, 17:34
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: Builder 6
Gadu Gadu: 0
    Windows 7Firefox

Re: Problem z Formą

Nowy postprzez Cyfrowy Baron » poniedziałek, 20 lutego 2012, 10:05

piotr.kwlk napisał(a):Odtworzyłem sobie z poprzedniej wersji programu wklejając kod z uszkodzonej.


Tak się nie robi. Poza tym nie podałeś tutaj całej zawartości tego pliku źródłowego. Czy przekopiowałeś również te dane:

KOD cpp:     UKRYJ  
USEFORM("Unit1.cpp", Form1);
USEFORM("Unit2.cpp", Form2);
USEFORM("Unit3.cpp", Form3);


Oczywiście tylko zgaduję, że ma to takie wartości. Poza tym to wcale nie musi zadziałać, gdyż modyfikując zawartość pliku nagłówkowego projektu nie modyfikujesz samego pliku projektu, w którym również znajdują się informacje o tym co gdzie jest i jak ma być kompilowane.

Jedyny sposób to utworzyć nowy projekt. Pododawać do niego wszystkie formularze i wszystko poprzepisywać. Nie możesz jednak np. dla pojedynczych formularzy kopiować do nich kodu np. dla komponentów, których tam nie umieściłeś, gdyż nie spowoduje to umieszczenia na nich komponentów. Na każdy formularz składają się trzy pliki *.CPP, *.H i *.DFM.
Pliku nagłówkowego projektu (np. Project1.cpp) w żadnych razie nie można tak po prostu kopiować, gdyż jest on połączony z plikiem projektu (np. Project1.bdsproj).
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Problem z Formą

Nowy postprzez piotr.kwlk » poniedziałek, 20 lutego 2012, 20:37

Wcześniej podałem przykład, teraz wkleiłem pełną zawartość pliku
KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("U_lista_zlecen_produkcyjnych_Import.cpp", F_lista_zlecen_produkcyjnych_import_ppease);
USEFORM("U_lista_zlecen_produkcyjnych.cpp", F_lista_zlecen_produkcyjnych);
USEFORM("U_zlecenie_produkcyjne.cpp", F_zlecenie_produkcyjne);
USEFORM("U_przebiegi_technologiczne.cpp", F_Przebiegi_technologiczne);
USEFORM("ULogowanie.cpp", FLogowanie);
USEFORM("U_menu.cpp", F_menu);
USEFORM("U_user.cpp", F_user);
USEFORM("U_konfiguracja.cpp", F_konfiguracja);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    try
    {
        Application->Initialize();
        Application->CreateForm(__classid(TFLogowanie), &FLogowanie);
         Application->CreateForm(__classid(TF_zlecenie_produkcyjne), &F_zlecenie_produkcyjne);
         Application->CreateForm(__classid(TF_lista_zlecen_produkcyjnych), &F_lista_zlecen_produkcyjnych);
         Application->CreateForm(__classid(TF_Przebiegi_technologiczne), &F_Przebiegi_technologiczne);
         Application->CreateForm(__classid(TF_lista_zlecen_produkcyjnych_import), &F_lista_zlecen_produkcyjnych_import);
         Application->CreateForm(__classid(TF_menu), &F_menu);
         Application->CreateForm(__classid(TF_user), &F_user);
         Application->CreateForm(__classid(TF_konfiguracja), &F_konfiguracja);
         Application->Run();
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    catch (...)
    {
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
    }
    return 0;
}
//---------------------------------------------------------------------------


Co do tworzenia nowego projektu próbowałem, i jeśli wklejałem z wcześniejszego działającego dany formularz to działał a uszkodzony nie, nawet w nowym projekcie więc przyczyna raczej leży w definicji formularza. I jak się sypie to nawet kilaka form. Nie wiem czy to te, które miałem otwarte ostatnio w oknie.
Niestety znowu mi się to zdarzyło. Co do kopiowania to nie kopiowałem całą zawartość pliku jedynie zawartość pewnych zdarzeń, funkcji, a jeśli brakowało jakiegoś komponentu to po prostu go tam umieszczałem.
Piotr
Avatar użytkownika
piotr.kwlk
Bladawiec
Bladawiec
 
Posty: 25
Dołączył(a): środa, 9 marca 2011, 17:34
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: Builder 6
Gadu Gadu: 0
    Windows 7Firefox

Re: Problem z Formą

Nowy postprzez Cyfrowy Baron » wtorek, 21 lutego 2012, 09:28

Kopiowanie które działa prawidłowo z plikami nagłówkowymi formularzy, nie będzie działać prawidłowo z plikiem nagłówkowym projektu. Gdyż dodając nowy formularz do projektu, do pliku nagłówkowego projektu np. Project1.cpp zostanie automatycznie dodana nazwa tego formularza, do samego pliku projektu np. Project1.bdsproj również zostaną dodane odpowiednie informacje. Jeżeli Ty jednak kopiujesz cokolwiek do pliku Project1.cpp to oznacza, że nie zostało ono dodane automatycznie, a co za tym idzie nie zostały dodane niezbędne informacje do pliku Project1.bdsproj, więc projekt nie będzie się kompilował prawidłowo.

W Twoim projekcie plik Project1.cpp ma prawidłową konstrukcję, ale modyfikowałeś go ręcznie, więc plik Project1.bdsproj nie zawiera informacji potrzebnych do prawidłowego skompilowania projektu.

piotr.kwlk napisał(a):Co do tworzenia nowego projektu próbowałem, i jeśli wklejałem z wcześniejszego działającego dany formularz to działał a uszkodzony nie,


Rzecz nie w tym, żebyś nie wklejał całego formularza, lecz żebyś w nowym projekcie utworzył ten formularz i go przepisał ze starego.

Musisz ten projekt utworzyć na nowo. Formularz główny aplikacji musisz stworzyć od podstaw, ale nie poprzez przekopiowanie plików np. Unit1.cpp, Unit1.h i Unit1.dfm do nowego projektu, lecz co najwyżej poprzez częściowe przekopiowanie zawartości tych plików. Można ewentualnie utworzyć ten plik, potem zamknąć projekt i podmienić w katalogu nowe pliki na stare, ale to czasami może prowadzić do błędów.
Jeżeli dodajesz do nowego projektu pliki ze starego, to nie poprzez kopiowanie tych plików i dodawanie informacji do pliku Project1.cpp, bo to nie zadziała. Możesz utworzyć te pliki od podstaw, tak jak formularz główny, lub możesz przekopiować te pliki, czyli np. Unit2.cpp, Unit2.h i Unit2.dfm do katalogu z nowym projektem, ale potem włączasz te pliki do tego nowego projektu wybierając z menu Project -> Add to project i wybierasz plik Unit2.cpp, pozostałe połączone pliki czyli Unit2.h i Unit2.dfm zostaną dołączone do projektu automatycznie. Nie będziesz musiał też modyfikować ręcznie zawartości pliku Project1.cpp, gdyż informacje o dodanych jednostkach zostaną w tym pliku również zaktualizowane automatycznie.
Tak utworzony projekt będzie działał prawidłowo.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Problem z Formą

Nowy postprzez piotr.kwlk » wtorek, 21 lutego 2012, 22:38

Głupia sprawa. Wiem w czym problem, wszystko z projektem w porządku. Wcześniej nie skojarzyłem, ale od czasu do czasu podłączam dodatkowy monitor, żeby jakość wszystko ogarnąć i okazuje się że projekty form nie wracają na swoje miejsce mimo gdy jest ustawione jest jeden ekran. Nigdzie indziej się z tym nie spotkałem jedynie w Builderze że okna są poza ekranem. Dzięki za wszelkie porady, a tu takie głupstwo, ale żeby odzyskać formy muszę podłączyć dodatkowy ekran.
Piotr
Avatar użytkownika
piotr.kwlk
Bladawiec
Bladawiec
 
Posty: 25
Dołączył(a): środa, 9 marca 2011, 17:34
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: Builder 6
Gadu Gadu: 0
    Windows 7Firefox

Re: Problem z Formą

Nowy postprzez Cyfrowy Baron » środa, 22 lutego 2012, 01:25

Odzyskiwałem kiedyś projekt i obyło się bez dodatkowego ekranu. Wystarczył opisany przeze mnie sposób w poprzednim poście.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 8 gości