vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ActiveX-Programmierung
DLL mit Formular, nur wie bekomme ich den Rückgabewert? 
Autor: CrazyMetal
Datum: 28.01.10 09:44

Hallo Zusammen,

ich suche eine Möglichkeit eine (VB6) ActiveX-DLL zu erstellen, in der eine Form (Kundenauswahl) angezeigt wird.
Ich bin mir nur nicht ganz sicher, wie ich den Rückgabewert bekomme, also die Kundennummer.

Meine fixe Idee war:
Dim myLong As Long
Dim kundenauswahl As CKundenauswahl
Set kundenauswahl = New CKundenauswahl
 
'Jetzt wird es spannend: Die Idee...
myLong = kundenauswahl.showForm()
Die Form ist etwas komplexer, mit FelxGrid, etc...
Wie mache ich das am besten, das meine Klasse auf die Form "wartet" und beim Schließen einen Rückgabewert übergibt.

mfg,
Crazy

Btw: Übrigens bin neu hier *in die Runde wink*

Das Tolle am Internet ist: Jeder kann mitmachen!
Das Doofe am Internet ist: Jeder macht mit...

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL mit Formular, nur wie bekomme ich den Rückgabewert? 
Autor: MCP
Datum: 28.01.10 11:44

Hm, bin mir nicht ganz sicher ob das in ActiveX genauso ist wie beim Rest von VB6, aber einen Versuch ist es Wert:
Wenn ich in VB6 einen Rückgabewert eines Formulars haben will, dann rufe ich die Form über einen kleinen Umweg auf.
Sprich: Nicht "myLong = kundenauswahl.showForm()", denn das geht in VB6 nicht.
Ich benutze eine Funktion als Interface:
Public Function OpenForm(Parent As Object) As Boolean
    'Parameter überprüfen
    'Diese Form Modal anzeigen.
    Me.Show 1, Parent
    'Rückgabeparameter zuweisen
    OeffneForm = Result    
End Function
Result ist in diesem Fall eine globale Klassenvariable.
Das ist eine ziemlich Flexible Methode mit der sich auch Objekte etc. zurückgeben lassen.

War es das was du gesucht hast?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL mit Formular, nur wie bekomme ich den Rückgabewert? 
Autor: CrazyMetal
Datum: 28.01.10 11:55

Jaein,

MCP schrieb:
Zitat:

denn das geht in VB6 nicht.

Warum nich, dachte es wäre 'OO-Sprache ^^

Die Lösung ist nett, bin nur auf der Suche die Form in eine DLL zu packen, da sie bei x anderen Projekten sowieso benötigt wird.

Ergo muss ich nicht immer (VB)-Dinge in irgendein Projekt kopieren um einen Fenster zu bekommen was überall gleich ausschaut und vor allem die selbe Funktionalität hat.
Denk allein an die Wartung der Software, das Alles oder Nix Prinzip.

Wenn ich es in eine (normale) DLL packe, hmm, ja ich habe eine Klasse mit x Instanzen, aber wie sieht das mit der From aus, x Instanzen oder Singleton? - Btw, der VB Kompiler mag diesen Stunt ganz und gar nich.

Das Tolle am Internet ist: Jeder kann mitmachen!
Das Doofe am Internet ist: Jeder macht mit...

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL mit Formular, nur wie bekomme ich den Rückgabewert? 
Autor: MCP
Datum: 28.01.10 12:05

Nun, du kannst die Funktion beliebig oft aufrufen. Der Code verzweigt dann an der Stelle. Damit hättest du dann n-Instanzen.
Die gebräuchliche Methode um Attribute einer Klasse (ein Forumular ist ja auch eine Klasse) abzufragen sind die Get und Set Methoden. Die finde ich in VB6 aber nicht sehr überzeugend.
Nach dem schließen der Form kannst du noch mit GetXXX() die Attribute abfragen. Das muss jedoch vor dem Unload() geschehen da die Attribute sonst nicht mehr instanziert sind.
Worüber meckert der Compiler genau? Ich habe die Methode ebenfalls in einer Form (somit ja quasi auch in einer Klasse, theoretisch) und dort läuft es hervorragend.
Der Aufruf aus deinem Projekt das die DLL einbindet müsste in etwa so aussehen:

Set DeinDialog = New DeineDialogKlasse
DeinDialog.OeffneForm(Me)
Unload KostenDialog
Set KostenDialog = Nothing
Wenn der Dialog von einer Klasse aus aufgerufen wird kann man das natürlich auch wieder Kapseln.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL mit Formular, nur wie bekomme ich den Rückgabewert? 
Autor: CrazyMetal
Datum: 28.01.10 12:35

Ja das war auch meine erste Idee.

Aber wenn man eine ActiveX-DLL erstellt die nur eine Form (genau irgendwie eine Klasse) beinhaltet, meckert der Compiler Keine erstellbare öffentliche Komponente vorhanden..

Man könnte eine Form erstellen und eine eigene Klasse, so quasi als Wrapper - aber das ist auch nicht das gelbe von Ei....

Das Tolle am Internet ist: Jeder kann mitmachen!
Das Doofe am Internet ist: Jeder macht mit...

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL mit Formular, nur wie bekomme ich den Rückgabewert? 
Autor: MCP
Datum: 28.01.10 13:03

Hm, so ganz verstehe ich nicht was er da bemängelt (wie gesagt, kenne ActiveX nicht so gut).
Aber normal kann man in einer DLL doch mehrere Klassen einbinden. Wenn du jetzt eine Klasse als Public deklarierst kann die ja private Instanzen von anderen Klassen erstellen. Zur Not muss man wohl notgedrungen alles Public machen. Und was ich über VB6 und gelbe Eier denke weißt du ja. ;)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL mit Formular, nur wie bekomme ich den Rückgabewert? 
Autor: CrazyMetal
Datum: 28.01.10 13:24

An der Idee bemängel ich gar nix, die ist toll.

Nur scheint VB (ActiveX-DLL) eine Form nicht als "normale" Klasse zu behandeln, im Eigenschaftenfenster kann man auch keine Eigenschaften zur Instanziierbarkeit einer Form angeben, was hingegen bei Klassen sehr wohl der fall ist.

Das böde ist also ich habe in der DLL eine Form und eine Klasse (Wrapper)
Public Function openDialog(parent As Object) As String
    Form1.Show 1, parent 
    openDialog = Form1.Text1.Text
End Function
Und im normalen Projekt (.exe)
Private Sub Form_Load()
    Dim dlg As Dialog
    Set dlg = New Dialog
    Dim stRes As String
 
    stRes = "Öhm - ne!"
    stRes = dialog.openDialog(Me)
    MsgBox stRes 'Ergebnis ist logisch: "Text1"
 
End Sub
ggf. sollte ich den Form noch die Instanz der Wrapper-Klasse mitgeben, damit wenn der Benutzer was macht das Ergebnis dort in eine Variable geschrieben wird und anschließend weitergegeben werden kann.

Zitat:


Und was ich über VB6 und gelbe Eier denke weißt du ja. ;)

Mir sind gelbe Eier auch lieber

Das Tolle am Internet ist: Jeder kann mitmachen!
Das Doofe am Internet ist: Jeder macht mit...

Beitrag wurde zuletzt am 28.01.10 um 13:26:35 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL mit Formular, nur wie bekomme ich den Rückgabewert? 
Autor: MCP
Datum: 28.01.10 13:37

Ja, du kannst die Parameter beliebig erweitern.
Es ist auch möglich Objekte per Referenz zu übergeben. Da hast du freie Auswahl. Bei Formularen hat man diese gesonderten Klasseneinstellungsmöglichkeiten meines Wissens nach generell nicht, es sind zwar Klassen, aber naja, merkwürdig eben... ^^
Irgendwie müsste sich das auf die Art aber schon zusammenfügen lassen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL mit Formular, nur wie bekomme ich den Rückgabewert? 
Autor: CrazyMetal
Datum: 28.01.10 13:53

Na ok, dann scheint es nicht komfortabler zu gehen.
Werde mal eine entsprechende Test-DLL schreiben.

Vielen Dank für die Mühe

Das Tolle am Internet ist: Jeder kann mitmachen!
Das Doofe am Internet ist: Jeder macht mit...

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL mit Formular, nur wie bekomme ich den Rückgabewert? 
Autor: MCP
Datum: 28.01.10 13:54

Wozu hat man denn MCPs? ^^
Biste heute Abend mal wieder online? ;)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL mit Formular, nur wie bekomme ich den Rückgabewert? 
Autor: CrazyMetal
Datum: 28.01.10 14:39

Yay ^^ mit dem Testprojekt klappt es.
Ja bin nachher on, denke mal so ab 21:30h habe noch Dienst (Welt retten und so ^^).

Das Tolle am Internet ist: Jeder kann mitmachen!
Das Doofe am Internet ist: Jeder macht mit...

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL mit Formular, nur wie bekomme ich den Rückgabewert? 
Autor: MCP
Datum: 28.01.10 14:41

Mach nix kaputt!
Gut das es läuft.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel