Formdesign für eine dll
-
Hallo,
ich muss von einer dll aus eine Form öffnen. Gibt es mit Borland eine
bessere Möglichkeit als diese von Hand zu programmieren? Also praktisch
einen Form Editor der mit für die dll eine Form erstellt?bisher sieht das so aus (ungetestet):
TForm * MyForm = new TForm(this); TButton * MyButton = new TButton(MyForm); MyButton->Left = 8; MyButton->Top = 8; MyButton->ParentWindow = MyForm MyButton->OnClick = MyButtonClick; TEdit * MyEdit = new TEdit(MyForm); MyEdit->ParentWindow = MyForm MyEdit->Left = 8; MyEdit->Top = 50; MyEdit->OnChange = MyEditChange;das ganze wird natürlich schrecklich unübersichtlich und wenn ich einmal
etwas ändern muss gibt das ein perfektes Chaos.Ich weiß, dass in Resourcen auch Dialoge enthalten sein können, aber
welcher Resource Editor kann diese erstellen? Und wie kann ich festlegen
welche Funktionen aufgerufen werden wenn ich z.B. auf einen Knopf klicke?Vielen Dank schonmal!
-
Ich hoffe ich habe dich richtig verstanden.
Du möchtest in einer DLL ein Formular aus dieser DLL verwenden.Dann kannst du das Formular genauso erstellen wie bei einer EXE-Datei.
In die DLL packst du dann eine exportierte Funktion hinein die von deinem Programm aufgerufen wird darin öffnest du das Formular.
Bsp:
int __stdcall ShowFormFromDll(.....was man vielleicht noch so benötigt...) { // // Hier könnte noch was erledigt werden // dllform=new Tdllform(Application) dllform->Show()/ShowModal(); //ShowModal ist wahrscheinlich besser! dllform->Release(); delete dllform; return 7654; }
-
ja, so ähnlich hab ich mir das vorgestellt. Zuerst hab ich auch gedacht es
funktioniert, aber irgendwie macht der nur ein neues Fenster indem nichts
drin steht:TForm2 * dllform=new TForm2(Application); dllform->ShowModal(); dllform->Release(); delete dllform; return 0;die Form sieht z.B. so aus:
class TForm2 : public TForm { __published: // Von der IDE verwaltete Komponenten TButton *Button1; private: // Anwender-Deklarationen public: // Anwender-Deklarationen __fastcall TForm2(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm2 *Form2;
-
Das scheint so ähnlich zu sein wie ein Programm das ich vor kurzem geschrieben hab.
Da hab ich ein Hauptprogramm das die DLL's lädt und eine Form der DLL auf einem Panel anzeigt.
In der DLL steht folgendes:Der DLLEntryPoint:
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { //In einer DLL müssen die Formulare selbst erstellt werden //sonst wird bei der Prozeduren die auf diese Form zugreifen eine Exception augegeben Application->CreateForm(__classid(TfrmMain), &frmMain); return 1; }Die Funktion die vom Hauptprogramm aufgerufen wird um das Formular anzuzeigen:
VOID __stdcall SetFormParent (HWND Handle) { SetParent( frmMain->Handle, // Handle der Form die Im Hauptprogramm angezeigt werden soll. Handle // Dies ist das Handle des Panels das vom Hauptprogramm übergeben wird ); frmMain->Align=alClient;//Formular soll sich automatisch anpassen frmMain->Show(); //Formular anzeigen }Wenn die Form nur angezeigt werden soll kann man das SetParent und Align natürlich weglassen, aber so funktioniert es bei mir(C++ Builder 6).
Hoffe das hilft dir.[EDIT]Im FAQ unter Forms steht auch etwas dazu[/EDIT]
-
vielen Dank!
Ich habs nun hinbekommen. Wenn ich etwas Luft habe in den nächsten Tagen, dann
schreib ich mal alles zusammen.