[C++ Builder] Uruchamianie tylko niektórych okienek program

0

Na początku przepraszam za temat, może jest troche nie zrozumiały, ale nie wiedziałem jak to nazwać :) A nie należe do ludzi, którzy w tematach piszą "pomocy!!!" ;-)

Ale do rzeczy, mam pewien problem, pisze program, i jest on już troche pokaźnych rozmiarów, nie jest to może Photoshop albo C++ Builder, ale nie jest to też malutka aplikacja więc troche się uruchamia, jedna z funkcji programu ma być możliwość dodania do niego pewnych informacji z poziomu exploratora windows, tzn klikam na ikonke jakąś w systemie drugim przyciskiem myszy i wybieram sobie opcje którą stworzył mój program i tu jest właśnie pies pogrzebany... ta opcja ma mieć za zadanie TYLKO zapisanie czegoś w pliku tekstowym, więc myśle że bez sensu jest uruchamiać cały program tylko po to by go po chwili zamknąć.

Myśle, że można by to zrobić w ten sposób, że przy uruchomieniu program sprawdzał by co dostał w lini komend, jeśli nie dostał by nic to by się uruchamiał normalnie, jeśli dostał by np ścieżkę do pliku to uruchamiał by tylko jedną Formę, która wykonywała by odpowiednie zadanie i się zamykała...i tyle go widzieli :D

I właśnie nie wiem jak to za bardzo zrobić, jak na razie próbowałem kombinować w Project ->View Source i tam tworzyłem warunek, że jeśli dostanie coś z lini komend to ma stworzyć tylko jedną formę, a jeśli nie to wszystkie.
Niby takie coś działa, ale jeśli tworzona jest tylko jedna forma to przy próbie jej zamknięcia wywala błąd :/

Proszę więc o pomoc, może ktoś już robił coś takiego?

0
  1. jaki błąd
  2. kod projektu (to co zrobiłeś)
0

Błąd to Acces Violation, ale nie rozumiem co masz na myśli pisząc kod projektu?

0

a czego nie rozumiesz w tych dwóch słowach?

I właśnie nie wiem jak to za bardzo zrobić, jak na razie próbowałem kombinować w Project ->View Source i tam tworzyłem warunek, że jeśli dostanie coś z lini komend to ma stworzyć tylko jedną formę, a jeśli nie to wszystkie.
Niby takie coś działa, ale jeśli tworzona jest tylko jedna forma to przy próbie jej zamknięcia wywala błąd

już wiesz czego kod

0

No więc o to kod a przynajmniej jego część:

Application->Initialize();
                 if(ParamStr(0)!="")
                 {
                 Application->CreateForm(__classid(TFunkcja), &Funkcja);
                 }
                 else
                 {
                 Application->CreateForm(__classid(TForm1), &Form1);
                 Application->CreateForm(__classid(TForm2), &Form2);
                 Application->CreateForm(__classid(TForm3), &Form3);
                 Application->CreateForm(__classid(TForm4), &Form4);
                 Application->CreateForm(__classid(TForm5), &Form5);
                 Application->CreateForm(__classid(TForm6), &Form6);
                 Application->CreateForm(__classid(TForm7), &Form7);
                 Application->CreateForm(__classid(TForm8), &Form8);
                 Application->CreateForm(__classid(TForm9), &Form9);
                 Application->CreateForm(__classid(TForm10), &Form10);
                 Application->CreateForm(__classid(TForm11), &Form11);
                 Application->CreateForm(__classid(TForm12), &Form12);
                 Application->CreateForm(__classid(TForm13), &Form13);
                 Application->CreateForm(__classid(TForm14), &Form14);
                 }
                 Application->Run();
0
Bru2s napisał(a)

bez sensu jest uruchamiać cały program tylko po to by go po chwili zamknąć.

Wydaje mi się, że uruchamiając program w całości trafia on do pamięci, więc bez znaczenia czy wyśiwietli wszystko. Ograniczysz tylko zajmowaną pamięć.
Myslę, że dynamiczne tworzenie okien najlepiej się spisze.
Przy uruchamianiu sprawdzasz parametry i wtedy pokazujesz wybraną formę :-)

Form2->ShowModal();

Prawda że proste ;-)

Co się tyczy twojego błędu to nie możesz zrobić tak jak sobie to wymyśliłeś.
Ustaw w preferencjach projektu aby nie tworzył okien w pamięci i twórz je dynamicznie.

0
Pablox napisał(a)

Co się tyczy twojego błędu to nie możesz zrobić tak jak sobie to wymyśliłeś.

a dlaczegoż to nie może?? Pewnie, że można i tak

Ustaw w preferencjach projektu aby nie tworzył okien w pamięci i twórz je dynamicznie.

a to też prawda bo zazwyczaj (przynajmniej na starcie) nie jest Ci potrzebne naście czy nawet dziesiąt okien

a co do błędu to okno się pokazuje jak podasz jakiś parametr tylko przy jego zamykaniu masz AV? Jak tak to pokaż jeszcze co masz w Creat TFunkcja i co robisz przy zamykaniu okna (tzn czy masz coś w onClose i/lub w przycisku, który zamyka formę)

0

Może powienienem napisac "nie powinieneś" zamiast "nie możesz" - z mojego skromnego doświadczenia wiem, że manipulacje w kodzie wygenerowanym przez edytor kończy się fatalnie :-(

Za to z praktyki wiem, że nie ma większego problemu z pokazywaniem wybranych okien. Mój największy program zawiera ponad 30 różnych okien i udało mi się nad nimi zapanować właśnie we wspomniany sposób.
Sprawdzanie parametrów itp. umieściłem w OnShow i poszło :)

0

Twój program uruchamia się jakiś czas, tak? Gdy wywołujesz z menu podręcznego w eksploratorze swoją komendę, to i tak cały program jest ładowany do pamięci, więc może zrobić by tak, że program jest podzielony na np: moduł EXE - zawsze włączany przy starcie programu, DLLa obsługującego tę funkcję, która TYLKO zapisuje coś do TXT oraz DLLa który jest głównym programem. I jak coś jest w linii komend to EXE wywołuje tylko tego małęgo DLLa i on robi co ma zrobić i koniec.

1 użytkowników online, w tym zalogowanych: 0, gości: 1