{"id":55000388,"date":"2023-10-01T00:00:00","date_gmt":"2023-10-19T13:18:09","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=388"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"twinBASIC_Grundlagen_zur_AppEntwicklung","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/twinBASIC_Grundlagen_zur_AppEntwicklung\/","title":{"rendered":"twinBASIC: Grundlagen zur App-Entwicklung"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/4bc0bd4bbb8948fda5ed00198665250a\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>VB6-Anwendungen &#8211; braucht das noch jemand? Oh ja! Gerade wer mal eben schnell eine Windows-Anwendung mit einer Benutzeroberfl&auml;che (oder auch ohne) programmieren will, kann immer noch gut auf seine guten, alten Visual Basic 6-Kenntnisse zur&uuml;ckgreifen &#8211; und zwar mit dem Nachfolger twinBASIC. In diesem Magazin haben wir schon die eine oder andere L&ouml;sung damit programmiert, die wir als COM-Add-In oder als COM-DLL f&uuml;r die Integration in eine der Office-Anwendungen oder auch zur Erweiterung von VBA genutzt haben. Und in diesem Artikel gehen wir noch einen Schritt weiter: Wir zeigen die grundlegenden Werkzeuge von twinBASIC zur Entwicklung von ausf&uuml;hrbare twinBASIC-Anwendung mit eigener Benutzeroberfl&auml;che. Mit twinBASIC k&ouml;nnen wir unsere .exe-Anwendung in Zukunft vielleicht sogar auf Nicht-Windows-Rechnern laufen lassen. Zumindest aber ist die Kompatibilit&auml;t mit 64-Bit-Systemen gesichert.<\/b><\/p>\n<h2>VB6 im modernen Zeitalter: Ein Relikt mit Wert<\/h2>\n<p>Visual Basic 6 (VB6) mag auf den ersten Blick wie ein &Uuml;berbleibsel aus der Technologie-Vergangenheit erscheinen, doch die Realit&auml;t ist, dass diese robuste Programmiersprache immer noch ihren festen Platz in der Software-Entwicklung hat. Erstens ist die Migration von alten VB6-Anwendungen auf neuere Technologien oft ein zeitaufw&auml;ndiger und kostspieliger Prozess, den viele Unternehmen scheuen. Daher bleiben VB6-Programme in Betrieb und erfordern weiterhin Wartung und Support.<\/p>\n<p>Zweitens bietet VB6 eine vertraute Umgebung f&uuml;r Entwickler, die &uuml;ber Jahrzehnte hinweg mit der Sprache gearbeitet haben, und erm&ouml;glicht eine schnelle und effiziente Anwendungsentwicklung. Auch wenn VB6 nicht die neuesten Funktionen oder Sprachkonstrukte bietet, bleibt seine Einfachheit und Effizienz in vielen Kontexten un&uuml;bertroffen. Es ist ein klares Beispiel daf&uuml;r, dass es nicht immer das Neueste und Beste sein muss, um relevant und wertvoll in der IT-Landschaft zu bleiben.<\/p>\n<h2>twinBASIC als Entwicklungsumgebung<\/h2>\n<p>Neu sind der Compiler und die Entwicklungsumgebung, die wir in diesem Fall nutzen. Leser unseres Magazins kennen twinBASIC bereits aus verschiedenen Ver&ouml;ffentlichungen, daher empfiehlt sich f&uuml;r den Einstieg ein Blick in das Onlinearchiv von <b>https:\/\/www.vbentwickler.de <\/b>mit einer Suche nach dem Begriff <b>twinBASIC<\/b>. twinBASIC ist zumindest f&uuml;r die Entwicklung mit der 32-Bit-Variante kostenlos, bei Entwicklung von 64-Bit-Apps werden bei Verwendung der kostenlosen Variante Splash-Screens eingeblendet. Die 64-Bit-Version ohne Splash-Screens erfordert den Kauf der Professional-Lizenz (siehe <b>https:\/\/shop.minhorst.com\/access-tools\/364\/twinbasic-professional-edition-jahreslizenz?c=78<\/b>).<\/p>\n<h2>Neues Projekt erstellen<\/h2>\n<p>Nach dem Start von twinBASIC w&auml;hlen wir aus den Vorlagen den Eintrag <b>Standard Exe <\/b>aus (siehe Bild 1). Das Ergebnis ist ein neues Projekt, das lediglich ein leeres Fenster enth&auml;lt. Dieses besteht wiederum aus zwei Elementen: der eigentlichen Benutzeroberfl&auml;che (<b>Forms1.tbform<\/b>) und dem Code behind-Klassenmodul (<b>Form1.twin<\/b>).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/pic_388_001.png\" alt=\"Erstellen einer Standard-Exe\" width=\"499,6267\" height=\"485,7723\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Erstellen einer Standard-Exe<\/span><\/b><\/p>\n<p>Beides sehen wir im <b>Project Explorer <\/b>von twinBASIC, in der Mitte wird direkt der Entwurf des neuen Fensters dargestellt (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/pic_388_002.png\" alt=\"Ein neues Projekt des Typs Standard Exe\" width=\"700\" height=\"472,2553\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Ein neues Projekt des Typs Standard Exe<\/span><\/b><\/p>\n<h2>Erster Start des Projekts<\/h2>\n<p>Mit einem Klick auf die Ausf&uuml;hren-Schaltfl&auml;che in der Symbolleiste von twinBASIC k&ouml;nnen wir das Projekt direkt ausprobieren. Damit zeigen wir das leere Fenster des Projekts an (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/pic_388_003.png\" alt=\"Das noch leere Hauptfenster der Anwendung\" width=\"349,6267\" height=\"251,2218\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Das noch leere Hauptfenster der Anwendung<\/span><\/b><\/p>\n<h2>Umbenennen der Objekte<\/h2>\n<p>Bevor wir das Projekt erstmals speichern, wollen wir die bisher vorhanden Objekte umbenennen. So soll das einzige bisher vorhandene <b>Form<\/b>-Objekt in <b>frmMain <\/b>umbenannt werden. Dazu schlie&szlig;en wir dieses Objekt und auch die dazugeh&ouml;rige Code behind-Klasse, sofern diese aktuell ge&ouml;ffnet sind. Zum Umbenennen verwenden wir den Kontextmen&uuml;-Eintrag <b>Rename <\/b>und legen die Bezeichnungen <b>frmMain.tbform <\/b>und <b>frmMain.twin <\/b>fest. Dies waren jedoch nur die Dateinamen. Au&szlig;erdem &auml;ndern wir noch die entsprechenden Klassennamen. Die f&uuml;r das Fenster &auml;ndern wir im Eigenschaftsbereich. Hier stellen wir die Eigenschaft <b>Name <\/b>auf <b>frmMain <\/b>ein (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/pic_388_004.png\" alt=\"Umbenennen der Form-Klasse\" width=\"649,627\" height=\"276,7086\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Umbenennen der Form-Klasse<\/span><\/b><\/p>\n<p>F&uuml;r die Code behind-Klasse nehmen wir die &Auml;nderungen direkt im Code vor (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/pic_388_005.png\" alt=\"Umbenennen der Code behind-Klasse\" width=\"549,6265\" height=\"260,397\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Umbenennen der Code behind-Klasse<\/span><\/b><\/p>\n<p>Woher wei&szlig; die Code behind-Klasse, dass sie zu dem entsprechenden <b>Form<\/b>-Element geh&ouml;rt? Dies wird durch eine GUID festgelegt, die wir in beiden F&auml;llen in der Eigenschaft <b>FormDesignerId <\/b>finden.<\/p>\n<h2>Umbenennen, schnelle Version<\/h2>\n<p>Dieser Umbenennungsprozess ist nur bei der standardm&auml;&szlig;ig vorhandenen Form n&ouml;tig. Wenn wir &uuml;ber den Kontextmen&uuml;eintrag <b>Add|Add Form Windows Form <\/b>des Eintrags <b>Sources <\/b>im Projektexplorer ein neues <b>Form<\/b>-Objekt hinzuf&uuml;gen, haben wir direkt nach dem Anlegen die M&ouml;glichkeit, dieses umzubenennen (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/pic_388_017.png\" alt=\"Umbenennen des Form-Elements\" width=\"299,6267\" height=\"335,4625\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Umbenennen des Form-Elements<\/span><\/b><\/p>\n<p>Geben wir hier einen Namen wie im Beispiel <b>frmSample <\/b>an, wird auch gleich die Code behind-Klasse umbenannt. Au&szlig;erdem wird beim <b>Form<\/b>-Objekt der Objektname auf <b>frmSample <\/b>eingestellt und auch der Klassenname in der Datei <b>frmSample.twin<\/b>.<\/p>\n<p>Wenn Du also beim Start das vorhandene <b>Form<\/b>-Element <b>Form1 <\/b>umbenennen m&ouml;chtest, l&ouml;scht Du es am besten direkt und erstellst ein neues <b>Form<\/b>-Element mit dem gew&uuml;nschten Namen.<\/p>\n<h2>Startup-Form festlegen<\/h2>\n<p>Damit haben wir nun &Auml;nderungen durchgef&uuml;hrt, die sich auf den Start des Projekts auswirken. Beim ersten Test wurde n&auml;mlich das <b>Form<\/b>-Objekt <b>Form1 <\/b>ge&ouml;ffnet. Dieses ist nun nicht mehr vorhanden, also m&uuml;ssen wir angegeben, dass das nun in <b>frmMain <\/b>umbenannte Fenster ge&ouml;ffnet werden soll. Das erledigen wir in den <b>Settings<\/b>, die wir &uuml;ber den gleichnamigen Eintrag im Projektexplorer &ouml;ffnen.<\/p>\n<p>Hier finden wir etwas weiter unten den Bereich <b>Project: Startup Object<\/b>. Hier w&auml;hlen wir wie in Bild 7 den Eintrag <b>frmMain <\/b>aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/pic_388_006.png\" alt=\"Einstellen des bei Start anzuzeigenden Form-Objekts\" width=\"549,6265\" height=\"290,7607\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Einstellen des bei Start anzuzeigenden Form-Objekts<\/span><\/b><\/p>\n<p>Alternativ k&ouml;nnen wir auch <b>Sub Main <\/b>ausw&auml;hlen. In diesem Fall m&uuml;ssten wir eine Prozedur namens <b>Main <\/b>bereitstellen, die beim Start aufgerufen wird. Dies er&ouml;ffnet die M&ouml;glichkeit, vor dem Anzeigen des ersten Fensters bereits einige Anweisungen auszuf&uuml;hren. Wie das gelingt, zeigen wir im Artikel <b>twinBASIC: Forms &ouml;ffnen, schlie&szlig;en und mehr <\/b>(<b>www.vbentwickler.de\/389<\/b>).<\/p>\n<h2>Weitere Projekteinstellungen<\/h2>\n<p>Im gleichen Dialog finden wir weiter oben noch weitere wichtige Einstellungen, zum Beispiel den Projektnamen, eine Beschreibung und den Anwendungstitel (siehe Bild 8). Der Wert unter <b>Project:Name <\/b>wird nicht angezeigt, sondern dient zum Beispiel folgenden Zwecken:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/pic_388_007.png\" alt=\"Einstellen weiterer Projekteigenschaften\" width=\"549,6265\" height=\"441,4912\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Einstellen weiterer Projekteigenschaften<\/span><\/b><\/p>\n<ul>\n<li>Namensraum: Der Projektname dient als Teil des Namensraums f&uuml;r die in unserem Projekt erstellten Klassen und Formulare. Dies hilft dabei, Konflikte mit gleichnamigen Klassen oder Formularen in anderen Projekten zu vermeiden.<\/li>\n<li>Referenzen: Der Projektname wird in Referenzen und Verweisen auf Projekte und Bibliotheken innerhalb unseres VB6-Projekts verwendet. Wenn wir auf externe COM-Komponenten oder DLLs zugreifen, k&ouml;nnen wir den Projektname verwenden, um diese zu identifizieren und auf sie zuzugreifen.<\/li>\n<\/ul>\n<p>Der Wert unter <b>Project: Description <\/b>wird angezeigt, wenn wir eine Typbibliothek, also eine DLL, auf Basis dieses Projekts erstellen und dieses referenzieren.<\/p>\n<p>Da wir das nicht tun, k&ouml;nnen wir hier einen beliebigen Wert eintragen.<\/p>\n<p>Der Wert unter <b>Project: Application Titel <\/b>hat folgende Funktionen:<\/p>\n<ul>\n<li>Standardbeschriftung f&uuml;r <b>MsgBox<\/b>&#8211;<b> <\/b>und <b>InputBox<\/b>-Objekte, f&uuml;r die wir keinen eigenen Titel festgelegt haben. <\/li>\n<li>Wert, der f&uuml;r die Eigenschaft <b>App.Title <\/b>zur&uuml;ckgegeben wird.<\/li>\n<\/ul>\n<p>Die hier durchgef&uuml;hrten &Auml;nderungen wirken sich erst aus, wenn wir das Projekt gespeichert haben (was wir gleich im Anschluss erledigen) und den Compiler neu gestartet haben. Letzteres k&ouml;nnen wir durchf&uuml;hren, indem wir wie in Bild 9 auf die Schaltfl&auml;che <b>Restart the compiler <\/b>klicken.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/pic_388_008.png\" alt=\"Schaltfl&auml;che zum Neustarten des Compilers\" width=\"700\" height=\"76,486\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Schaltfl&auml;che zum Neustarten des Compilers<\/span><\/b><\/p>\n<h2>Speichern des Projekts <\/h2>\n<p>Damit haben wir einen ersten Zwischenstand erreicht und speichern diesen mit <b>File|Save project <\/b>unter dem Namen <b>Sampleproject.twinproj<\/b>. Hier sehen wir direkt, dass genau eine einzige Datei f&uuml;r ein twinBASIC-Projekt angelegt wird.<\/p>\n<h2>Starten des Projekts<\/h2>\n<p>Damit k&ouml;nnen wir das Projekt nun erstmals starten. Die dazu notwendigen Schaltfl&auml;chen finden wir in der Symbolleiste im mittleren Bereich (siehe Bild 10).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/pic_388_009.png\" alt=\"Die Schaltfl&auml;chen zum Starten von Programmen und mehr\" width=\"700\" height=\"57,83474\" \/><\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000388\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000388?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000388\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"cc9d3a379e\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>VB6-Anwendungen &#8211; braucht das noch jemand? Oh ja! Gerade wer mal eben schnell eine Windows-Anwendung mit einer Benutzeroberfl&auml;che (oder auch ohne) programmieren will, kann immer noch gut auf seine guten, alten Visual Basic 6-Kenntnisse zur&uuml;ckgreifen &#8211; und zwar mit dem Nachfolger twinBASIC. In diesem Magazin haben wir schon die eine oder andere L&ouml;sung damit programmiert, die wir als COM-Add-In oder als COM-DLL f&uuml;r die Integration in eine der Office-Anwendungen oder auch zur Erweiterung von VBA genutzt haben. Und in diesem Artikel gehen wir noch einen Schritt weiter: Wir zeigen die grundlegenden Werkzeuge von twinBASIC zur Entwicklung von ausf&uuml;hrbare twinBASIC-Anwendung mit eigener Benutzeroberfl&auml;che. Mit twinBASIC k&ouml;nnen wir unsere .exe-Anwendung in Zukunft vielleicht sogar auf Nicht-Windows-Rechnern laufen lassen. Zumindest aber ist die Kompatibilit&auml;t mit 64-Bit-Systemen gesichert.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662023,66052023,44000031],"tags":[],"yst_prominent_words":[],"class_list":["post-55000388","post","type-post","status-publish","format-standard","hentry","category-662023","category-66052023","category-twinBASICProgrammierung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000388","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000388"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000388\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000388"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000388"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000388"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}