AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

wrapper unit - wie geht das hier?

Ein Thema von prinzchen · begonnen am 9. Mai 2007 · letzter Beitrag vom 10. Mai 2007
Antwort Antwort
prinzchen

Registriert seit: 9. Mai 2007
4 Beiträge
 
#1

wrapper unit - wie geht das hier?

  Alt 9. Mai 2007, 16:12
hallo!

wahrscheinlich eine blöde frage, ich weiss, aber ein ziemlicher newbe in delphi ist für jede hilfe und info dankbar, die er bekommen kann.

ich will eine wrapperunit für ein bestehendes projekt machen. das projekt beinhaltet diverse funktionen, welche in einem formular dargestellt werden.

nun will ich aber jede funktion mittel wrapper unit so zugänglich machen, dass ich diese je ins startmenü von windows setzen kann. soll heißen: mein projekt hat sagen wir funktion A, B, C und D. und nun will ich im startmenü einen Eintrag machen, der mir eine exe aufruft, mit der ich funktion A starten kann. das gleiche soll dann mit funktion B, C und D passieren.

am schluss will ich vier einträge im startmenü haben, mit denen ich nur die jeweiligen funktionen aufrufen kann.
bisher hatte ichs so, dass ich die funktionen per buttonclick aufgerufen habe von einem vorgeschaltenen formular. das will ich jetzt aber nicht mehr. nun soll direkt die funktion mit ihrem jeweiligen formular kommen. also durch die wrapper unit ein direkter aufruf der funktion.

nur entweder habe ich ein brett vorm kopf oder sonstwas, aber ich frag mich gerade, wie die wrapper unit aussehen muss, damit ich das machen kann. wie gesagt ohne zusätzlichem formular, ohne buttons zum anklicken. einfach auf das element im startmenü klicken, das ruft mir die zugehörige exe auf und diese führt mir dann meine funktion auf.

wie gesagt sorry für die wahrscheinlich dämliche frage, aber ich bin noch ein ziemlicher newbe in delphi. in anderen programmiersprachen sollts für mich kein problem sein. vielleicht hätte bitte wer von euch die geduld, mir das schritt für schritt zu erklären, sodass es auch jemand, ders noch nie gemacht hat, dann zusammenbringt.

jetzt schon mal vielen dank.

prinzchen.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: wrapper unit - wie geht das hier?

  Alt 9. Mai 2007, 16:15
Du könntest auch einfach Parameter verwenden - in der Startmenüverknüpfung gibst du dann nen Parameter mit wie -action=xyz und dann kann die Anwendung darauf reagieren und das Formular mit den Button gar nicht erst anzeigen ... (Wenn die Anwendung von dir ist)
  Mit Zitat antworten Zitat
prinzchen

Registriert seit: 9. Mai 2007
4 Beiträge
 
#3

Re: wrapper unit - wie geht das hier?

  Alt 9. Mai 2007, 17:25
hm, wäre vielleicht nicht schlecht, das doch mit wrapper unit zu machen, weil ichs dann gleich lerne.

wie gesagt: aktuell hab ich ein formular, das beim start aufgeht mit buttons, mit welchen ich die jeweilige funktion starten kann. nun will ich aber statt dieses formulars direkt aus dem startmenü (je nach gewähltem menüpunkt) die jeweilige funktion starten.

dafür werde ich klarerweise entweder 4 wrapper units brauchen (für jede funktion eine) oder eine mit parametern. will das ganze aber jetzt mal zum üben nur mit einer funktion machen. d.h. eine der vier funktionen mit einem menüeintrag starten.

und ausserdem würde ich gerne auf dem weg das programmieren einer wrapperunit üben/lernen. deswegen auch meine frage nach der info, was ich da genau machen muss. dass es da immer auch andere wege gibt, ist mir klar. nur wie lerne ich es sonst sauber mit einer wrapper unit zu machen, wenn ich den "leichten" weg nehme und es immer umschiffe. aber trotzdem danke für den tipp. würde es nur gerne mit einer wrapper unit lösen, um es auf diesem wege zu üben.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: wrapper unit - wie geht das hier?

  Alt 9. Mai 2007, 17:30
In die Wrapperunit schreibst du einfach nur die vier Funktionen. Tja, und der Aufruf... Wenn du das ohne Parameter machen willst, bleiben wohl nur noch vier verschiedene (ziemlich kleine) Programme. Für die nimmst du einfach eine Konsolenanwendung und nimmst das {$APPTYPE CONSOLE} raus (habe ich das richtig verstanden das du keine Oberfläche brauchst?).
Hoffe geholfen zu haben
Apollonius
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
prinzchen

Registriert seit: 9. Mai 2007
4 Beiträge
 
#5

Re: wrapper unit - wie geht das hier?

  Alt 9. Mai 2007, 17:50
nochmals kurz zusammenfassend:
ich habe aktuell ein fertiges projekt und in einer unit alle 4 funktionen drinnen. dann eine weitere unit, die bei start aufgerufen wird und die mir ein formular mit 4 button anzeigt, über welche ich die einzelnen funktionen aufrufen kann. klicke ich z.b. auf Button A dann startet mir Funktion A, baut das fenster auf mit formular und allem und füllt es mir. wenn ichs wieder zumache habe ich nur das andere fenster mit den buttons.

nun will ich das durch einen menüeintrag. also ich habe mein bisheriges projekt (das will ich bis auf das erste formular nicht verändern) und starte eine der funktionen (welche wird mit dem menüpunkt fix zugewiesen). also ich starte sagen wir funk_a.exe um die funktion A aufzurufen, funk_b.exe um funktion B aufzurufen usw.

also in gewisserweise wie bisher, nur dass die gewünschte funktion sofort kommt, ich damit arbeiten kann und wenn ich es beende, beendet sich das programm. so als ob das programm nur die eine funktion hat.
was ich mir auch schon überlegt habe wäre, dass ich im verzeichnis alle 4 wrapper units ablege und dann die verknüpfung vom menü auf das jeweilige exe file mache. oder es halt in 4 verzeichnise aufteile.

nur eben ich möchte an meinem bestehenden projekt bis auf das buttonformular (das soll weg) nichts ändern.

oberfläche brauch ich für die funktionen selbst schon, nur soll ausser den fenstern und formularen dieser gestarteten funktion kein anderes formular oder keine andere funktion kommen. also eben genau die gewünschte funktion aus der bestehenden unit aufgerufen werden (mit ihren funktionen), je nachdem welchen menüpunkt ich nehme.
aktuell will ichs mal nur für eine einzige machen, egal ob das jetzt funktion A, B, C oder D ist.

ich glaube ich sollte mal etwas näher in meine struktur gehen:

meine funktionen liegen unter umeine_funks.pas
darin habe ich ein form definiert (ist für alle funktionen von der grundstruktur her gleich, nur ein paar dinge ändern sich, andere button bzw. beschriftungen, teilbereiche sichtbar bzw. nicht sichtbar usw.).
die form habe ich MainForm getauft.

die Funktionen sind dann also (Parameter lass ich jetzt mal hier weg):
function TMainForm.func_a;
function TMainForm.func_b;
function TMainForm.func_c;
function TMainForm.func_d;

dann habe ich eine unit uStarteFunks.pas mit einem form StartFunkForm. Und per Clickevent starte ich die obigen Funktionen.

nun muss die unit uStarteFunks.pas weg. Und ich brauche nun eine wrapper unit, die mir z.B. TNainForm.func_a "nach aussen" liefert, dass diese gestartet wird, wenn ich die exe aufrufe.

Und genau darum gehts mir. wie muss nun eine unit uwrapper_a.pas (z.B. für a) aussehen, dass ich eine exe bekomme, die mir genau funktion a startet und sonst nichts (kein weiteres formular anzeigt und keine anderen funktionen - nur das, was funktion a eben macht mit dem MainForm usw.)

ich habe also in der umeine_funks.pas 4 funktionen drinnen, von denen ich via wrapper unit "von extern" immer genau eine aufrufen will. z.B. die funktion a indem ich z.B. ein starte_a.exe aufrufe und die startet mir die funktion a.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: wrapper unit - wie geht das hier?

  Alt 9. Mai 2007, 19:08
Du hast dich irgendwie geistig festgefahren in der Annahme, du bräuchtest eine Wrapper-Unit.
1.) es ist sicher nicht dumm, wenn du nur eine EXE hast, die über Übergabeparameter bedient wird:
Code:
ProgrammXY -Autostart -Funktion=15 -User=Test -PW=geheim
Über die Startmenüeverknüpfung lassen sich diese Parameter ja übergeben
2.) du brauchst einen zentralen Punkt, an dem die Übergabeparameter ausgewertet werden
Das wäre zunächst mal im Hauptformular in OnCreate
3.) du brauchst eine Hilfsunit für das Auswerten der Parameter, sonst wird das zu aufwändig:
http://www.delphipraxis.net/internal...ct.php?t=27723
4.) es gibt wahrscheinlich das Problem, dass wenn du die Funktion frühzeitig startest, das Formular
noch gar nicht angezeigt wird.
Die Funktion läuft zwar, aber man sieht das Ergebnis erst hinterher.
Das lässt sich vermeiden, wenn man sich eine selbstdefinierte Windows-Message schickt und so den Aufruf geschickt verzögert.
Um dieses Problem würde ich mich aber erst dann kümmern, wenn du Punkt 1. bis 3. soweit verdaut und verstanden hast, dass du ein funktionierendes Demo hast.
Als Anfänger kann auch einen Timer starten um die Verzögerung zu erreichen.
Andreas
  Mit Zitat antworten Zitat
9. Mai 2007, 19:09
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Es geht um Delphi.
prinzchen

Registriert seit: 9. Mai 2007
4 Beiträge
 
#8

Re: wrapper unit - wie geht das hier?

  Alt 10. Mai 2007, 07:52
hab das ganze jetzt mit vielleicht 4 zeilen code hingebracht:

einfach consolenanwendung machen, die gewünschte funktion aufrufen und das wars.
und ich hab schon gedacht, ich muss das halbe programm umbauen

danke aber euch allen für die tipps.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz