CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - [C++/CLI]Include i praca między formami...

[C++/CLI]Include i praca między formami...

dział ogólny

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Cyfrowy Baron » czwartek, 23 grudnia 2010, 19:38

W C++Builder odbywa się to tak:


Dla aplikacji konsolowej wybieram z menu: File -> New -> Other... -> C++Builder Projects -. Console Application. Pojawia się okienko New Console Application w którym ustawiam sobie kilka opcji, mogę zdecydować np. czy aplikacja okienkowa ma korzystać z komponentów VCL, oraz mogę np. zdecydować, czy pisze aplikację w C++, czy w C. Potem tworzony jest plik np. File1.cpp. Zapisuję i w katalogu projektu pojawia się dodatkowo plik projektu Project1.cbproj, w tym pliku oczywiście nic nie zmieniam, gdyż zawiera on domyślną konfigurację projektu. Pracuję na pliku File1.cpp, który jest tworzony w domyślnej postaci:
KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <tchar.h>
//---------------------------------------------------------------------------

#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
        return 0;
}
//---------------------------------------------------------------------------


Dalej to już sobie programuję według własnego uznania, zgodnie z zasadami języka C++.


W przypadku aplikacji okienkowej wybieram z menu: File -> New -> VCL Forms Application - C++Builder. Tworzone są trzy pliki: Project1.cpp bez pliku nagłówkowego H oraz formularz Form1 z klasą TForm1 oraz plikami nagłówkowym Unit1.h i źródłowym Unit1.cpp, Unit1.dfm, Project1.res z domyślnymi wartościami jak w załączniku. Kod w zasadzie piszę w plikach Unit1.h i Unit1.cpp, w pozostałe pliki rzadko ingeruję. Gdy potrzebuję kolejnego okna to z wybieram menu: File -> New -> Form C++Builder. Spowoduje to dodanie do projektu kolejnego okna z formularzem Form2 i towarzyszącymi mu plikami Unit2.h, Unit2.cpp i Unit2.dfm. Gdy potrzebuję dodać do projektu tylko pliki nagłówkowy i źródłowy, to wybieram z menu File -> New -> Unit C++Builder i utworzone zostaną tylko pliki np. Unit3.h i Unit3.cpp, w których tworzę np. nową klasę, czy gromadzę funkcje, itp.


O tym Jak to wygląda dokładniej możesz sobie poczytać w serwisie Cyfrowy Baron w dziale: kursy praktyczne.


Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
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: [C++/CLI]Include i praca między formami...

Nowy postprzez Slynx » czwartek, 23 grudnia 2010, 20:19

Ha, ha "no fuckin way" xD Zrobiłem ! Udało mi się. Kod wygląda tak:

KOD cpp:     UKRYJ  
                         Form1^ sd = %Form1();
                         sd->KATALOGER.Add_info[34] = "ss";
 


Proste ? ;) Proste. Jest tylko include Form1 w pliku cpp. I bardzo dziękuje tutaj polymorphism-owi, bo bez tego podziału na pliki by nie ruszyło. W tym tkwił problem. Nie widział tego, bo nie odpowiadało mu w pliku .h, a jak dodawałem w pliku .cpp to on tam szukał też reszty, a tak po rozłożeniu wszystko mu się zgadzało. Normalnie przez chwilę to cieszyłem się jak dziecko xD No, ale jakby na to nie patrzeć, już ze 3-4 dni się nad tym męczyłem, tematy na 5-6 forach i nic nie było, a tutaj jakoś poszło ;) Aha, baronie, dzięki za info o tym wszystkim, taka ładna "zaprawka" ;)

Jeszcze tylko jedno mnie ciekawi, bo jeśli to co zrobiliśmy jest przedstawieniem poprawnego projektu wykorzystującego klasy w taki sposób, to dlaczego Visual zmusił do ułożenia tego wbrew jego "zaleceniom"... mam na myśli to, że przy tym rozłożeniu designer nie będzie działał, więc co ? Jest jeszcze jakaś inna opcja naprawy takiego problemu ? Coś pewnie musi być. Jednak to nieistotne. Po prostu kolejny spróbuję rozpisać tak by nie wykorzystywać w ogóle Form1.h. Jeszcze tylko nie sprawdziłem czy te dane są rzeczywiście w tych zmiennych ; p Mam nadzieję, że żadnego numeru mi nie wykręci...


Aha, i jeszcze coś zauważyłem. Po tym rozłożeniu nie korzysta z przestrzeni nazw. Ignoruje wpisy typu "using namespace System::Windows::Form" i wywala mi błędy gdy było same "::DialogResult". Niby to nie problem, bo po prostu muszę zapisać "System::Windows::Forms::DialogResult", ale jednak wydłuża niepotrzebnie kod (nieestetycznie to wygląda:/). Po to są przestrzenie nazw by z nich korzystać.

No... to świetnie ;) Taki prezent na święta ;)
No właśnie... Merry Christmas for everyone ;)

-----

Cholera, nawet bardzo utrudnia, bo Intellisense wtedy też nie działa :/ Poszukam w opcjach czegoś, może można to zwyczajnie ustawić by brał pod uwagę obydwa pliki.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Firefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Slynx » środa, 5 stycznia 2011, 01:02

Tu jeszcze muszę sprostować. Tak się cholernie cieszyłem, a na końcu dodałem, że nie sprawdzałem czy te dane są, tylko, że jedynie przez kompilator mi przeszło. No... i okazało się, że nie było. Cóż Panowie, posiedziałem jeszcze trochę nad tym i znalazłem rozwiązanie. I mogliście to też zauważyć i mi podpowiedzieć, że przecież robię nie tak. Kod o którym mówiłem:
KOD cpp:     UKRYJ  
                       Form1^ sd = %Form1();
                       sd->KATALOGER.Add_info[34] = "ss";
 


Teraz to przeanalizuje... to przecież nie może działać poprawnie. Jeśli Form1 jest klasą główną a ja... no właśnie, dwa błędy. Pierwszy to typ. Typ nie może być Form1, bo nie chce się odnieść do Form1, a do zmiennej (obiektu) tej klasy. Natomiast dane pochodzą z innej klasy i to ten typ danych należy utworzyć. U mnie ta klasa danych miała nazwę po prostu "data". I drugi błąd... nawias. Przecież on określa wywołanie funkcje, ew. z operatorem new (gcnew) tworzenie nowego obiektu. W przypadku klasy wywoła to konstruktor i utworzy nowy obiekt, a tego nie chcemy. To był główny błąd. Wszędzie z przyzwyczajenia zamykałem takie fragmenty nawiasami, a zapomniałem, że w tym przypadku jest to błędem. Wystarczyło usunąć nawias, co teraz wydaje się oczywiste. Aha, plusem była pomoc w rozdzielaniu projektu na pliki .cpp i .h. To nie był żaden problem "krzyżowania" się includów, jak to namiętnie tłumaczyli mi na pewnym bardzo znanym forum. Wiem dlaczego kompilator tak strasznie zasypywał mnie wtedy błędami, jednak nie potrafię tego tak dokładnie opisać, więc daruję sobie składanie na siłę. I jeszcze coś. Przed definicją (albo deklaracją :/ zawsze mi się to myli) należało wstawić słowo kluczowe static. Teraz jest to oczywiste, wtedy o tym nie pomyślałem. Poprawiony kod:

KOD cpp:     UKRYJ  
                       static data KATALOGER; // W klasie głównej
                       // i reszta w klasie z której chcemy uzyskać dostęp
                       data ^ sd = %Form1::KATALOGER; // odniesienie bezpośrednio do klasy danych, nie potrzebujemy możliwości manipulacji kodem okna głównego.
                       sd->Add_info[34] = "ss";
 


Tak więc teraz temat można zwyczajnie zamknąć. Problem rozwiązany w pełni.

Aha, jeśli to będzie czytał C. Baronie. Ten Twój program, Babilon... co do mojego, jak na razie ma w pełni działający interfejs, wszystkie główne funkcje. Tak jak mówiłem, wbudowana przeglądarka też jest i parę innych ciekawych rzeczy. Jedyne czym się wyróżnia jak na razie względem Twojego to ta opcja automatycznego robienia screenów do bazy danych. To rozwiązuje problem gdy screenów do filmu zwyczajnie nie mamy lub nie chce nam się szukać w necie (lub neta nie mamy. Nie oszukujmy się, takie sytuacje też się zdarzają ;p) Kwestia dorównania Twojemu programowi leży głównie w tym, że mój w ogóle od początku nie był w ten sposób projektowany. Funkcje nie były pisane w tak uniwersalny sposób, by dawać duże możliwości manipulacji i konstrukcji nowych elementów. Program miał być napisany na szybko, tylko dla mnie, bo musiałem jakoś szybko to posegregować. Dlatego właśnie teraz przeprojektowywanie całego programu wiąże się z o wiele większym wysiłkiem niż zaprojektowanie go od początku w poprawnej formie. Jednak jak zacząłem - skończę. Zwłaszcza, że zaraz po tym, mam już kolejny do napisania. Tym razem na poważnie, bo do szerszego grona odbiorców.

Pozdrowienia.

Aha, forum już poleciłem paru osobom ;)
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Firefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Cyfrowy Baron » środa, 5 stycznia 2011, 11:00

Slynx napisał(a):I mogliście to też zauważyć i mi podpowiedzieć, że przecież robię nie tak


Nie mogliśmy, gdyż na tym forum nie ma chyba nikogo, kto miałby doświadczenie z językiem C++/CLI.



À propos Babilon...

Slynx napisał(a):Jedyne czym się wyróżnia jak na razie względem Twojego to ta opcja automatycznego robienia screenów do bazy danych. To rozwiązuje problem gdy screenów do filmu zwyczajnie nie mamy lub nie chce nam się szukać w necie (lub neta nie mamy. Nie oszukujmy się, takie sytuacje też się zdarzają ;p)


Nie pobrałeś tego programu, lub nie przejrzałeś pliku pomocy, gdy zalecam tworzenie storyboard'u za pomocą dostępnych w sieci darmowych programów takich jak np. KMPlayer. Zastanawiam się nad jakimś własnym programem, których wchodziłby w skład pakietu, ale jakoś nie mam czasu, żeby się za to zabrać. Problem jest raczej złożony, gdyż taki program powinien obsługiwać większość popularnym formatów plików wideo.
Slynx napisał(a):Program miał być napisany na szybko, tylko dla mnie, bo musiałem jakoś szybko to posegregować. Dlatego właśnie teraz przeprojektowywanie całego programu wiąże się z o wiele większym wysiłkiem niż zaprojektowanie go od początku w poprawnej formie.


Swój pierwszy program tego typu również napisałem na szybko i była to prosta baza danych, jednak nie poprawiałem go tylko drugi stworzyłem od podstaw.
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: [C++/CLI]Include i praca między formami...

Nowy postprzez Slynx » środa, 5 stycznia 2011, 18:58

Co do tych nawiasów to z tym jest chyba identycznie. To chyba się nie zmienia. Piszę chyba, bo dawno się tym nie zajmowałem, teraz tylko c++ i .net. Ale mniejsza o to, problem rozwiązany.

A programu nie pobierałem. Przeglądałem jedynie screeny i czytałem opis do niego, który dałeś na stronie. Poza tym, mam z góry przerąbane... ja nie jestem grafikiem :/ A w Twoim ewidentnie widać spory wkład grafika. Co do tego KMPlayera czy wbudowanego MPlayera. Wiedziałem o tych komponentach i możliwości ich użycia. Z tym ograniczyłoby się to do kilku linijek, ale specjalnie wziąłem do tego DirectX. Po prostu chciałem w tym zaprojektować, dlatego sam dla siebie uważam, że to już jest coś. Pierwszy kontakt z Directem i już coś co solidnie z niego korzysta (miałem kilka problemów jak choćby kwestia jakości wyświetlanego Video, tym samym screenów, które są robione). No mniejsza o to. Co do większej liczby formatów... metod jest kilka. Prostsza - wrzucenie komponentów w zależności od typu pliku, a potem funkcje ujednolicające wynik (by obsługa była podobna pomimo różnicy w kwestii komponentów) lub pisanie własnych, ew. implikacja fragmentów. Jednak znów powiem "mniejsza o to". Każdy ma własne sposoby, każdy ma własne pomysły, bo tym właśnie jest programowanie ; )

Co do tego story boardu, bo teraz dopiero otworzyłem stronkę. Chcesz zrobić coś na kształt obrazkowego streszczenia filmu poprzez screeny ? Tam jest oczywiście napisane, że to kwestia rysownika, więc jak ktoś by się uparł mógłby do screenów dobrać filtry i zrobić z nich rysunki ; p Chociaż to raczej byłby mało trafny pomysł (kwestia wierności oddania sceny po przekształceniu filtrami)
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Firefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Cyfrowy Baron » środa, 5 stycznia 2011, 20:48

Storyboard to zrzut miniaturek:

storyboard.jpg
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
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

Poprzednia strona

  • 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 5 gości

cron