Tuesday, December 29, 2009
IT-Dienstleistungen/EDV-Schulungen Jobs, Jobs in Sachsen, Deutschland, Österreich. Delphi
In einem hoch innovativen internationalen Top-Team mit internationaler Kundschaft arbeiten
Ideen und Impulse für die Entwicklung und Weiterentwicklung unserer Lösungen für Softwaremanagement und –Automation im Microsoft Windows Umfeld einbringen
Viel Know-how aufbauen und selbständig arbeiten
Arbeitsplatz mit spannenden Perspektiven in München, 10% Reisetätigkeit
Ihre spannende Herausforderung:
Sind Sie ein begeisterter Delphi-Programmierer (m/w), der/die Spaß daran hat, von der ersten Stunde an dabei zu sein, wenn es darum geht, gemeinsam mit verschiedenen Entwicklerteams an unseren führenden Lösungen für Softwaremanagement und -Automation im Microsoft Windows Umfeld für unsere internationale Kundschaft mitzuarbeiten? Einem Projekt, in dem die Software Management Module praxisorientierte Lösungen bieten, mit denen sich Windows Systeme vom Notebook bis hin zum Server, unternehmensweit erkennen, installieren, konfigurieren, mit Sicherheits-Patches aktualisieren, überwachen, sichern und wiederherstellen lassen? Dann wartet ein breites Spektrum auf Sie: Programmieren, Anforderungen an die Software erarbeiten, Architektur erstellen und an Design, Planung und Umsetzung mitwirken. Genauso sind Ihre fundierte Softwaredesign- und Architektur-Erfahrung und Ihre Kreativität in punkto Features und Check-Ups gefragt. Wie stellen Sie die Qualität kompromisslos sicher – von Anfang an? Indem Sie z.B. die Bedürfnisse des Benutzers und die Gebrauchstauglichkeit der Software in benutzerorientierten, interaktiven Prozessen einbinden, wobei Sie auch mal einige Tests selbst durchführen. Und durch den täglichen Austausch mit Testern und Entwicklern ebenso wie durch enge Abstimmungen mit dem Helpdesk-Team – und natürlich mit unseren internationalen Entwicklungsteam in Südafrika . Spannend genug für Sie? Ist es auch!
Dann prüfen Sie jetzt, ob auch Ihr Profil zu uns passt:
Studium oder Ausbildung im IT-Bereich mit 3 bis 5 Jahren Berufserfahrung als Entwickler (m/w)
Klasse wäre es, wenn Sie bereits 3 Jahre Erfahrung als Delphi-Entwickler (m/w) vorweisen können
In jedem Falle haben Sie Grundkenntnisse über COM Programmierung, Multithreading und Services
Interaktive Entwicklung ist Ihnen ebenso vertraut wie der sichere Umgang mit verschiedenen Applikationen
Starkes Engagement und Interesse an unserer Software setzen wir voraus
Kommunikativ wie Sie sind, verfügen Sie über fließende Englisch- und Deutschkenntnisse
Gerne arbeiten Sie selbstständig und bewältigen anspruchsvolle Aufgaben
Was wir Ihnen noch zu bieten haben:
Sie können davon ausgehen, dass wir generell viel in die fachliche und persönliche Weiterentwicklung unserer Mitarbeiterinnen und Mitarbeiter investieren und alles tun, damit sie sich in unserem Umfeld ohne große Hierarchieebenen wohlfühlen. Neben intensiven Trainings lernen Sie alles, was Sie brauchen, im Training-on-the-Job. Darüber hinaus eröffnen wir Ihnen die Perspektive, sich je nach Talent und Neigung in verschiedenen Bereichen weiterzuentwickeln. Auch die sonstigen Rahmenbedingungen in unserem dynamischen, wachsenden Unternehmen werden Ihnen gut gefallen.
Saturday, December 26, 2009
ISO Q L F schen aller Ausgaben im Direktfenste
| Betreff | =?ISO-8859-15?Q?L=F6schen_aller_Ausgaben_im_Direktfenste?= |
| Von | Susann Markward |
| Datum | 10.11.2009 09:57:52 |
Hallo,
kann man eigentlich irgendwie die Informationen im Direktfenster der IDE
per Befehl zur Laufzeit des Programms löschen?
Ich vergesse das immer, bevor ich mein Programm neu starte, per Hand
durchzuführen. So wäre es schön, wenn ich einen entsprechenden Befehl
beim Start meines Programms implementieren könnte.
MfG
Susann
| Betreff | Re: =?ISO-8859-15?Q?L=F6schen_aller_Ausgaben_im_Direktfe?= |
| Von | Ulrich Korndoerfer |
| Datum | 10.11.2009 10:34:36 |
Hallo Susann,
Susann Markward schrieb:
> Hallo,
>
> kann man eigentlich irgendwie die Informationen im Direktfenster der IDE
> per Befehl zur Laufzeit des Programms löschen?
>
> Ich vergesse das immer, bevor ich mein Programm neu starte, per Hand
> durchzuführen. So wäre es schön, wenn ich einen entsprechenden Befehl
> beim Start meines Programms implementieren könnte.
>
> MfG
> Susann
AFAIR nein. Aber was heisst schon nein, wenns um Software geht :-)
--
Ulrich Korndoerfer
VB tips, helpers, solutions -> http://www.proSource.de/Downloads/
| Betreff | =?ISO-8859-15?Q?Re:_L=F6schen_aller_Ausgaben_im_Direktfenster?= |
| Von | =?ISO-8859-15?Q?Jens_M=FCller?= |
| Datum | 10.11.2009 15:40:29 |
> AFAIR nein. Aber was heisst schon nein, wenns um Software geht :-)
Klar, du könntest das Fensterhandle finden (Klasse VbaWindow, Text (in
deutsch): Direktfenster) und dann Strg+A, Entfernen hinschicken.
Oder die billige Methode, um das Fenster zu löschen:
Debug.Print String(200, vbCrLf)
Grüße,
Jens
| Betreff | =?ISO-8859-15?Q?Re:_L=F6schen_aller_Ausgaben_im_Direktfenster?= |
| Von | "Horst Heinrich Dittgens" |
| Datum | 11.11.2009 12:50:18 |
> kann man eigentlich irgendwie die Informationen im Direktfenster der IDE
> per Befehl zur Laufzeit des Programms löschen?
das da?
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=71700&lngWId=1
Etwas besseres als GetCommandLine gesucht oder DDE auswerten
| Betreff | Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswerten |
| Von | "Thomas Gahler" |
| Datum | 09.11.2009 20:20:11 |
Hallo zusammen
Vielleicht kann mir jemand bei meinem mittelgrossen Problem helfen, das ich
bei einem Kunden von mir habe.
Wird Word mittels eines Doppelklicks auf ein Dokument gestartet, so öffnet
sich zwar Word doch die besagte Datei wird nicht geöffnet. Das googlen zu
dieser Problematik bringt die Hinweise, dass ein Add-In im Wege steht. Die
Analyse hat ergeben, dass es tatsächlich ein Add-In ist, das, sobald es
vorhanden ist, die Macken bei Word auslöst. Ja, ihr habe es erraten, es ist
mein Add-In (Dokumentvorlag im Startup-Ordner) und dieses lässt sich somit
schlecht desinstallieren.
Meine Idee jetzt. Ich werde die Kommandozeile aus und öffne die Datei
selber. Vielleihct wird das mit einem sochen Word-around ja was. Doch jetzt
folgt das nächste Problem.
Wird Word mittels Doppelklick auf ein Dokument gestartet, dann liefert mir
das GetCommandLine-API nicht allzu viel zurück ("C:\Prog...\Winword.exe /n
/dde"). Damit lässt sich schlecht auswerten, auf welche Datei denn geklickt
wurde.
A.) Gibt es ein anderes API, das mir mehr zur Kommandozeile verrät?
B.) Der Aufruf der Datei erfolgt über DDE. Kann ich irgendwie diese
DDE-Kommandos abfragen, dann finde ich dort vielleicht mein Dateiname.
Ich frage euch hier, weil wir in der VBA-Ecke die APIs und DDE nur
beschränkt kennen. Das einbinden sollte ich anschliessen in den Griff
bekommen.
Mein Zugriff auf das API habe ich hier "geklaut".
http://word.mvps.org/faqs/macrosvba/CheckHowWordLaunched.htm
Besten Dank für jeden kleinen Tipp
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows Vista (SP2), Office 2007 (SP2)
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswerten |
| Von | "Thorsten Albers" |
| Datum | 09.11.2009 22:06:51 |
Thomas Gahler
> B.) Der Aufruf der Datei erfolgt über DDE. Kann ich irgendwie diese
> DDE-Kommandos abfragen, dann finde ich dort vielleicht mein Dateiname.
Das DDE-Kommando, das ausgeführt wird, findest Du in der Registry. Beispiel
für MS Word 8:
Word.Document.8
shell
open
command "(...)\WINWORD.EXE" /n
ddeexec [REM _DDE_Direct][FileOpen("%1")]
Application WinWord
Topic System
Aber ich weiß nicht, wie man aus Word die DDE-Daten, die es empfangen hat,
herausquetschen könnte.
Wäre es nicht insgesamt einfacher, Dein AddIn so abzuändern, daß es Word
nicht in die Quere kommt?
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswerten |
| Von | "Thomas Gahler" |
| Datum | 10.11.2009 09:56:13 |
Hallo Thorsten
> Wäre es nicht insgesamt einfacher, Dein AddIn so abzuändern, daß es Word
> nicht in die Quere kommt?
Na klar, doch wo anfangen zu suchen. Mal abgesehen davon, dass es natürlich
bei mir zu Hause locker läuft.
Deshalb die Suche nach einen Work-around
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows XP (SP3), Office XP (SP3)
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswerten |
| Von | "Thorsten Albers" |
| Datum | 10.11.2009 13:42:45 |
Thomas Gahler
> Na klar, doch wo anfangen zu suchen. Mal abgesehen davon, dass es
natürlich
> bei mir zu Hause locker läuft.
> Deshalb die Suche nach einen Work-around
Meine erste Suche in diesem Fall wäre, ob irgendwo im eigenen Code eine
Funktion 'FileOpen' existiert.
Ansonsten wäre für unterschiedliches Verhalten eines AddIns auf
verschiedenen Geräten in derselben Word-Version das Timing eine denkbare
Erklärung, d.h. daß z.B. an irgendeiner Stelle Code A ausgeführt wird,
obwohl Bedingung B noch nicht erfüllt ist.
Und zu prüfen wäre auch, ob sich Dein AddIn auf dem problematischen Gerät
nicht doch eher >>mit einem anderen AddIn<< beißt - was ich für
wahrscheinlicher halte, da es mit Word selbst auf anderen Geräten ja
offenbar problemlos kooperiert.
Das nur so ein paar Ideen 'in's Blaue' hinein, denn ohne zu wissen, was
Dein AddIn macht, bleibt alles spekulativ.
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswerten |
| Von | "Thomas Gahler" |
| Datum | 10.11.2009 14:38:58 |
Hallo Thorsten
> Meine erste Suche in diesem Fall wäre, ob irgendwo im eigenen Code eine
> Funktion 'FileOpen' existiert.
Werde ich nochmals überprüfen, sollte zwar nicht, doch ob ich noch alle
Zeilen Code so im Kopf habe möchte ich jetzt nicht behaupten.
> Ansonsten wäre für unterschiedliches Verhalten eines AddIns auf
> verschiedenen Geräten in derselben Word-Version das Timing eine denkbare
> Erklärung, d.h. daß z.B. an irgendeiner Stelle Code A ausgeführt wird,
> obwohl Bedingung B noch nicht erfüllt ist.
Daran habeich auch schon gedacht. Das zum Beispiel mein Add-In mit seinen
Arbeiten im AutoExec() noch nicht fertig ist, wenn der DDE-Aufruf auf ein
Timeout stösst. Diese Gedanken hatte ich auch schon...
> Und zu prüfen wäre auch, ob sich Dein AddIn auf dem problematischen Gerät
> nicht doch eher >>mit einem anderen AddIn<< beißt - was ich für
> wahrscheinlicher halte, da es mit Word selbst auf anderen Geräten ja
> offenbar problemlos kooperiert.
Nö, das ist es sicher nicht, denn die PCs sind fast nackt und es läuft
bereits nicht mehr. Rudimentär zusammen gefasst Windows drauf, Office drauf,
Add-In drauf, Doppelklick läuft, IE8 drauf, Doppelklick läuft bereits nicht
mehr (alle anderen Software können nachgeliefert werden, der PC erholt sich
nicht mehr). Windows drauf, IE8 drauf, Office drauf, Add-In drauf,
Doppelklick läuft auch nicht.
> Das nur so ein paar Ideen 'in's Blaue' hinein, denn ohne zu wissen, was
> Dein AddIn macht, bleibt alles spekulativ.
Am liebsten würde ich jetzt schreiben 'nichts'. Es prüft ein paar
Verzeichnisse oder erstellt sie, kopiert bei Bedarf einige Dateien und sonst
noch ein paar Kleinigkeiten.
Doch wenn ich es mir so überlege, dann könnte ich mal ein paar
Konfigurationsparaemeter anpassen, damit das Ding noch wenig als 'nichts'
macht. Wenn es am Timing liegt, dann sollte ich so näher kommen, vielleicht.
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows XP (SP3), Office XP (SP3)
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswerten |
| Von | "Thorsten Albers" |
| Datum | 10.11.2009 18:05:30 |
Thomas Gahler
> IE8 drauf
Da denkt man natürlich gleich an irgendwelche
'Policies'/Sicherheitseinstellungen, die durch die Installation des IE 8
geändert worden sein könnten.
> Daran habeich auch schon gedacht. Das zum Beispiel mein Add-In mit seinen
> Arbeiten im AutoExec() noch nicht fertig ist, wenn der DDE-Aufruf auf ein
> Timeout stösst. Diese Gedanken hatte ich auch schon...
> ...
> Am liebsten würde ich jetzt schreiben 'nichts'. Es prüft ein paar
> Verzeichnisse oder erstellt sie, kopiert bei Bedarf einige Dateien und
sonst
> noch ein paar Kleinigkeiten.
Da ist natürlich durchaus ein Zusammenhang denkbar, wenn das AddIn im
Dateisystem rumwuselt, während die DDE-Verbindung zum Laden einer Datei
aktiv ist.
Aber wo jetzt der Ansatzpunkt wäre, kann ich leider nicht sagen. Dein AddIn
müßte vermutlich erst einmal Word alles abarbeiten lassen, was es
abzuarbeiten hat, und dann mit seiner Arbeit beginnen.
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | =?Utf-8?B?SGFydHdpZyBDb25zdGllbg==?= |
| Datum | 11.11.2009 15:32:15 |
Hallo Thomas,
...
> bereits nicht mehr. Rudimentär zusammen gefasst Windows drauf, Office drauf,
> Add-In drauf, Doppelklick läuft, IE8 drauf, Doppelklick läuft bereits nicht
> mehr (alle anderen Software können nachgeliefert werden, der PC erholt sich
> nicht mehr). Windows drauf, IE8 drauf, Office drauf, Add-In drauf,
> Doppelklick läuft auch nicht.
Das hatte sich bereits mit dem IE7 geändert, nicht erst beim IE8. Seit IE7
macht Word beim Start eine Vielzahl von Tasks auf, wenn gleich ein oder
mehrere Dokumente übergeben werden. Früher war das nicht so und da gab es
auch keine Probleme mit dem eigenen AutoExec-Job.
Hang loose, Hartwig
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Thomas Gahler" |
| Datum | 12.11.2009 19:54:33 |
Hallo Hartwig
>> bereits nicht mehr. Rudimentär zusammen gefasst Windows drauf, Office
>> drauf,
>> Add-In drauf, Doppelklick läuft, IE8 drauf, Doppelklick läuft bereits
>> nicht
>> mehr (alle anderen Software können nachgeliefert werden, der PC erholt
>> sich
>> nicht mehr). Windows drauf, IE8 drauf, Office drauf, Add-In drauf,
>> Doppelklick läuft auch nicht.
>
> Das hatte sich bereits mit dem IE7 geändert, nicht erst beim IE8. Seit IE7
> macht Word beim Start eine Vielzahl von Tasks auf, wenn gleich ein oder
> mehrere Dokumente übergeben werden. Früher war das nicht so und da gab es
> auch keine Probleme mit dem eigenen AutoExec-Job.
Spannend. Es ist gut möglich, dass es nicht nur beim IE8 sondern auch beim
IE7 nicht geht. Dies wurde nicht geprüft, da der IE7 ja gar nie Thema war.
Und ein älterer IE erst recht nicht.
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows Vista (SP2), Office 2007 (SP2)
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | =?Utf-8?B?SGFydHdpZyBDb25zdGllbg==?= |
| Datum | 13.11.2009 09:55:01 |
> Spannend. Es ist gut möglich, dass es nicht nur beim IE8 sondern auch beim
> IE7 nicht geht. Dies wurde nicht geprüft, da der IE7 ja gar nie Thema war.
> Und ein älterer IE erst recht nicht.
Hallo Thomas,
Es ist vermutlich nicht der IE7 bzw. IE8 selbst, sondern eher das von
Microsoft mit diesen Systemen geänderte Processhandling.
Ich habe die eigentliche Ursache nicht aufgeklärt, konnte aber feststellen,
dass seit Einführung des IE7 immer dann, wenn Word mit einem Dateiparameter
gestartet wurde, direkt nach dem WordProcess noch ein weiterer Process namens
"Default IME" erschien, was vorher eben nicht der Fall war.
Vielleicht weiss einer der MVPler, warum der Wordstart dadurch behindert wird?
Hang loose, Hartwig
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Thorsten Albers" |
| Datum | 13.11.2009 13:24:16 |
Hartwig Constien
Beitrag
> Ich habe die eigentliche Ursache nicht aufgeklärt, konnte aber
feststellen,
> dass seit Einführung des IE7 immer dann, wenn Word mit einem
Dateiparameter
> gestartet wurde, direkt nach dem WordProcess noch ein weiterer Process
namens
> "Default IME" erschien, was vorher eben nicht der Fall war.
>
> Vielleicht weiss einer der MVPler, warum der Wordstart dadurch behindert
wird?
Eigentlich sollte ein IME (Input Method Editor, für Eingabe von Zeichen aus
bestimmten Schriftsystemen) auf das Dokumentenhandling von Word keinerlei
Auswirkung haben, es sei denn, daß ganze bremst Word mit dem eigenen AddIn
zusammen so aus, daß der DDE-Timeout überschritten wird. Eine 'Interaktion'
mit DDE ist eigentlich unwahrscheinlich, da IMEs nicht über DDE arbeiten.
@Thomas:
Nimm Dir doch 'mal den MS Spy++ und überprüfe, was für DDE-Nachrichten Word
bei dem Vorgang bekommt und wie es darauf reagiert.
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Thomas Gahler" |
| Datum | 13.11.2009 23:26:48 |
Hallo Thorsten
> @Thomas:
>
> Nimm Dir doch 'mal den MS Spy++ und überprüfe, was für DDE-Nachrichten
> Word
> bei dem Vorgang bekommt und wie es darauf reagiert.
Tönt spanned und beim Googlen habe ich zusätzlöich den Hinweis nach
DDESpy.exe gefunden. Doch von beiden kann ich keinen Download ausfindig
machen. Wo finde ich die Tools?
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows Vista (SP2), Office 2007 (SP2)
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Thorsten Albers" |
| Datum | 14.11.2009 12:54:30 |
Thomas Gahler
<#jXghBLZKHA.5544@TK2MSFTNGP02.phx.gbl>...
> Tönt spanned und beim Googlen habe ich zusätzlöich den Hinweis nach
> DDESpy.exe gefunden. Doch von beiden kann ich keinen Download ausfindig
> machen. Wo finde ich die Tools?
MS Spy++ findet man auf MS VB(.NET)-/VC(.NET)-/VS(.NET)-CDs. DDESpy. Der
letzte DDESpy, den ich gesammelt habe, hat die Versionsnummer 5.0.2134.1
und stammt von der MS VS.NET Beta 2-CD 1.
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Thomas Gahler" |
| Datum | 17.11.2009 12:17:49 |
Hallo Thorsten
>> Tönt spanned und beim Googlen habe ich zusätzlöich den Hinweis nach
>> DDESpy.exe gefunden. Doch von beiden kann ich keinen Download ausfindig
>> machen. Wo finde ich die Tools?
>
> MS Spy++ findet man auf MS VB(.NET)-/VC(.NET)-/VS(.NET)-CDs. DDESpy. Der
> letzte DDESpy, den ich gesammelt habe, hat die Versionsnummer 5.0.2134.1
> und stammt von der MS VS.NET Beta 2-CD 1.
Danke für deine Feedback.... auf diese CD habe ich keinen Zugriff.
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows XP (SP3), Office XP (SP3)
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Thorsten Albers" |
| Datum | 17.11.2009 14:27:00 |
Thomas Gahler
<#hfyae3ZKHA.3992@TK2MSFTNGP04.phx.gbl>...
> Danke für deine Feedback.... auf diese CD habe ich keinen Zugriff.
Dann schick' mir 'mal 'ne passende Mail...
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Thomas Gahler" |
| Datum | 17.11.2009 21:01:06 |
Hallo Thorsten
> Dann schick' mir 'mal 'ne passende Mail...
Ist unterwegs...
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows Vista (SP2), Office 2007 (SP2)
| Betreff | RE: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswerten |
| Von | =?Utf-8?B?SGFydHdpZyBDb25zdGllbg==?= |
| Datum | 11.11.2009 09:21:02 |
Hallo Thorsten,
die gleiche Problematik trat bei meinen Kunden auch auf. Wie Du schon
bemerkt hast, kriegt man mit GetcommandLine zwar mit, dass Word einen
Startparameter bekommen hat, aber keine Info über die zu ladende Datei(en).
Ich habe es deshalb so gelöst:
Meine globale Vorlage (im Startup-Ordner) führt AutoExec bei jedem
Word-Start aus. Unter anderem ist da auch ein Test dabei, ob eine bestimmte
Netzverbindung geöffnet werden kann. Das kann schon mal ein Sekündchen
dauern. Wie es aussieht, hat Word einfach keine Geduld und bricht das Laden
der übergebenen Dokumente dann einfach ab und der User wundert sich.
Nun ist das bei meiner globalen Vorlage so, dass es zwar der Sicherheit
dient, wenn alle Jobs in AutoExec durchlaufen werden, aber streng genommen
muss das nicht unbedingt zu dem Zeitpunkt passieren, an dem Word gerade
selbst mit Laden beschäftigt ist.
Ich werte also die CommandLine in meiner AutoExec-Procedure aus und wenn ich
feststelle, dass Word mehr als die üblichen Parameter bekommen hat (welche
ist dabei egal) steige ich direkt aus der AutoExec aus. Word hat dann genug
Zeit, alle übergebenen Dateien zu öffnen.
Da alle meine Jobs in der globalen Vorlage über Menüs aufgerufen werden,
kann ich bei deren Aufruf vorab noch checken, ob vielleicht der eine oder
andere Startjob noch nachzuholen ist.
Hang loose, Hartwig
"Thomas Gahler" wrote:
> Hallo zusammen
>
> Vielleicht kann mir jemand bei meinem mittelgrossen Problem helfen, das ich
> bei einem Kunden von mir habe.
>
> Wird Word mittels eines Doppelklicks auf ein Dokument gestartet, so öffnet
> sich zwar Word doch die besagte Datei wird nicht geöffnet. Das googlen zu
> dieser Problematik bringt die Hinweise, dass ein Add-In im Wege steht. Die
> Analyse hat ergeben, dass es tatsächlich ein Add-In ist, das, sobald es
> vorhanden ist, die Macken bei Word auslöst. Ja, ihr habe es erraten, es ist
> mein Add-In (Dokumentvorlag im Startup-Ordner) und dieses lässt sich somit
> schlecht desinstallieren.
>
> Meine Idee jetzt. Ich werde die Kommandozeile aus und öffne die Datei
> selber. Vielleihct wird das mit einem sochen Word-around ja was. Doch jetzt
> folgt das nächste Problem.
>
> Wird Word mittels Doppelklick auf ein Dokument gestartet, dann liefert mir
> das GetCommandLine-API nicht allzu viel zurück ("C:\Prog...\Winword.exe /n
> /dde"). Damit lässt sich schlecht auswerten, auf welche Datei denn geklickt
> wurde.
>
> A.) Gibt es ein anderes API, das mir mehr zur Kommandozeile verrät?
>
> B.) Der Aufruf der Datei erfolgt über DDE. Kann ich irgendwie diese
> DDE-Kommandos abfragen, dann finde ich dort vielleicht mein Dateiname.
>
>
> Ich frage euch hier, weil wir in der VBA-Ecke die APIs und DDE nur
> beschränkt kennen. Das einbinden sollte ich anschliessen in den Griff
> bekommen.
>
>
>
> Mein Zugriff auf das API habe ich hier "geklaut".
> http://word.mvps.org/faqs/macrosvba/CheckHowWordLaunched.htm
>
>
> Besten Dank für jeden kleinen Tipp
>
>
> --
> Thomas Gahler
> Co-Autor von »Microsoft Word-Programmierung.
> Das Handbuch« (MS Press)
>
>
> - Windows Vista (SP2), Office 2007 (SP2)
>
> .
>
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswerten |
| Von | "Thomas Gahler" |
| Datum | 12.11.2009 19:59:17 |
Hallo Hartwig
> die gleiche Problematik trat bei meinen Kunden auch auf.
Also bedeutet das ja irgend wie, dass doch etwas spezielles an der
Konstellation sein muss. Denn ich nehme mal an, dass du dieses Phänomen
selber auf deinem PC nihct hattest, oder? Das ist nämlich das was mich
besonders ärgert. Das es nicht auf allen PCs auftritt (beim Kunden auf den
paar Dingern die er neu aufgesetzt hat schon, bei mir nicht)
> Wie Du schon
> bemerkt hast, kriegt man mit GetcommandLine zwar mit, dass Word einen
> Startparameter bekommen hat, aber keine Info über die zu ladende
> Datei(en).
>
> Ich habe es deshalb so gelöst:
>
> Meine globale Vorlage (im Startup-Ordner) führt AutoExec bei jedem
> Word-Start aus. [...]
Meine auch und die macht deftig viel...
> Ich werte also die CommandLine in meiner AutoExec-Procedure aus und wenn
> ich
> feststelle, dass Word mehr als die üblichen Parameter bekommen hat (welche
> ist dabei egal) steige ich direkt aus der AutoExec aus. Word hat dann
> genug
> Zeit, alle übergebenen Dateien zu öffnen.
Für mich würde das zum Beispiel bedeuten, dass ich mein AutoExec verlasse
und dieses zum Beispiel mittels OnTime() einplane, damit dieses 2 Sekunden
später doch noch abläuft. Habe ich dich so richtig verstanden? Das wäre
natürlich mal einen Test wert.
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows Vista (SP2), Office 2007 (SP2)
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | =?Utf-8?B?SGFydHdpZyBDb25zdGllbg==?= |
| Datum | 13.11.2009 10:08:03 |
Hallo Thomas,
> > die gleiche Problematik trat bei meinen Kunden auch auf.
> Also bedeutet das ja irgend wie, dass doch etwas spezielles an der
> Konstellation sein muss. Denn ich nehme mal an, dass du dieses Phänomen
> selber auf deinem PC nihct hattest, oder? Das ist nämlich das was mich
> besonders ärgert. Das es nicht auf allen PCs auftritt (beim Kunden auf den
> paar Dingern die er neu aufgesetzt hat schon, bei mir nicht)
noe, war eher umgedreht. Habe ich zuerst auf meinem Entwicklungsrechner
festgestellt, es aber für ein lokales Problem gehalten. Trat dann aber auch
auf neuen (und nur dort) Kundensystemen auf.
> Für mich würde das zum Beispiel bedeuten, dass ich mein AutoExec verlasse
> und dieses zum Beispiel mittels OnTime() einplane, damit dieses 2 Sekunden
> später doch noch abläuft. Habe ich dich so richtig verstanden? Das wäre
> natürlich mal einen Test wert.
die OnTime-Variante nutze ich nur dann, wenn ein User festgelegt hat, dass
er nach dem Wordstart gleich mit einer bestimmten Vorlage beginnen möchte.
Mein recht pragmatischer Ansatz in der AutoExec geht davon aus, dass es
eigentlich reicht, wenn mein AutoExec-Job mindestens einmal ausgeführt wurde.
Ist das der Fall, kann ich bei übergebenen Dateiparametern eben auch
problemlos aus der AutoExec aussteigen und es den einzelnen Menüjobs
überlassen,
die für sie spezifische Details abzuklären und ggf. einzelne der
AutoExec-Jobs noch nachzuholen, bevor der Menüjob ausgeführt wird.
Dieses Vorgehen war möglich, weil ich die meisten Routinen in VB6-DLLs
ausgelagert habe. Alle Vorlagen sind mit DLLs verknüpft und es kostet nur
wenige VBA-Programmzeilen, um eine Klasse in einer DLL anzusprechen.
Bis XP + Word 2003 ging das prima auch mit Latebindung via LoadLibrary, also
ohne vorherige Registrierung und Verknüpfung. Leider ist mit Vista + Word
2007 Schluss damit. Die dynamische DLL-Einbindung zur Laufzeit wird einfach
nicht mehr wie früher ausgeführt, auch wenn Du Admin bist. Weisst Du dagegen
ein Heilmittel?
Hang loose, Hartwig
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Dieter Strassner" |
| Datum | 13.11.2009 11:47:05 |
Hallo Hartwig,
> Bis XP + Word 2003 ging das prima auch mit Latebindung via
> LoadLibrary, also ohne vorherige Registrierung und Verknüpfung.
> Leider ist mit Vista + Word 2007 Schluss damit. Die dynamische
> DLL-Einbindung zur Laufzeit wird einfach nicht mehr wie früher
> ausgeführt, auch wenn Du Admin bist. Weisst Du dagegen ein Heilmittel?
... das geht auch noch unter Vista/W7 + WORD-2007:
Benutze eine "Classfactory" (z.B. die von Olaf Schmidt: "DirectCOM.dll").
--
Viele GrüÃe
Dieter
Rückfragen bitte nur in die Newsgroup!
EDV-Kommunikation Strassner e.K.
68623 Lampertheim
Internet: www.strassner.biz
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | =?Utf-8?B?SGFydHdpZyBDb25zdGllbg==?= |
| Datum | 13.11.2009 17:57:01 |
> > Bis XP + Word 2003 ging das prima auch mit Latebindung via
> > LoadLibrary, also ohne vorherige Registrierung und Verknüpfung.
> > Leider ist mit Vista + Word 2007 Schluss damit. Die dynamische
> > DLL-Einbindung zur Laufzeit wird einfach nicht mehr wie früher
> > ausgeführt, auch wenn Du Admin bist. Weisst Du dagegen ein Heilmittel?
>
> .... das geht auch noch unter Vista/W7 + WORD-2007:
> Benutze eine "Classfactory" (z.B. die von Olaf Schmidt: "DirectCOM.dll").
Vielen Dank, Dieter. Ziehe ich mir rein.
Bin gespannt, wie es funktioniert und ob sich damit die UAC-Abfrage beim
Laden meiner Active-X-DLLs verhindern lässt.
Hang loose, Hartwig
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | =?Utf-8?B?SGFydHdpZyBDb25zdGllbg==?= |
| Datum | 17.11.2009 10:23:01 |
> > Bis XP + Word 2003 ging das prima auch mit Latebindung via
> > LoadLibrary, also ohne vorherige Registrierung und Verknüpfung.
> > Leider ist mit Vista + Word 2007 Schluss damit. Die dynamische
> > DLL-Einbindung zur Laufzeit wird einfach nicht mehr wie früher
> > ausgeführt, auch wenn Du Admin bist. Weisst Du dagegen ein Heilmittel?
>
> .... das geht auch noch unter Vista/W7 + WORD-2007:
> Benutze eine "Classfactory" (z.B. die von Olaf Schmidt: "DirectCOM.dll").
Jau, funktioniert. Olaf sei Dank.
Nach Ãbernahme der DLL, der Declares und der Function GetInstance nach VBA
fährt nun keine Ausführungsverhinderung mehr dazwischen, wenn meine
unregistrierten AX-DLLs unter Vista+Word2007 angesprochen werden.
Hang loose, Hartwig
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswerten |
| Von | "Thomas Gahler" |
| Datum | 17.11.2009 12:21:24 |
Hallo Hartwig
> Für mich würde das zum Beispiel bedeuten, dass ich mein AutoExec verlasse
> und dieses zum Beispiel mittels OnTime() einplane, damit dieses 2 Sekunden
> später doch noch abläuft. Habe ich dich so richtig verstanden? Das wäre
> natürlich mal einen Test wert.
Naja, Test gemacht brachte nix. Auch wenn ich in der ersten Zeile aus meinem
AutoExec() rauspringe und dieses Mittels .OnTime() nach ein paar Sekunden
aufrufe, die Datei wird trotzdem nicht geöffnet.
Gibt es irgend welche Einstellungen in der Registry (oder sonst wo) mit
welchen ich das TimeOut für DDE höher setzen kann (mal in der Annahme, dass
es sich hierbei um das Problem handelt).
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows XP (SP3), Office XP (SP3)
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | =?Utf-8?B?SGFydHdpZyBDb25zdGllbg==?= |
| Datum | 17.11.2009 15:46:03 |
> [...]
> Gibt es irgend welche Einstellungen in der Registry (oder sonst wo) mit
> welchen ich das TimeOut für DDE höher setzen kann (mal in der Annahme, dass
> es sich hierbei um das Problem handelt).
Hallo Thomas,
bestimmt gibts die, haben sich mir aber nicht offenbart (;-)
Bei Smarttools gibt es einen kostenlosen Fix:
http://www.wintotal.de/Tipps/?id=1712
Ob und wie der wirkt, kann ich nocht nicht sagen.
Hang loose, Hartwig
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | =?Utf-8?B?SGFydHdpZyBDb25zdGllbg==?= |
| Datum | 18.11.2009 10:46:01 |
> > [...]
> > Gibt es irgend welche Einstellungen in der Registry (oder sonst wo) mit
> > welchen ich das TimeOut für DDE höher setzen kann (mal in der Annahme, dass
> > es sich hierbei um das Problem handelt).
>
> bestimmt gibts die, haben sich mir aber nicht offenbart (;-)
>
> Bei Smarttools gibt es einen kostenlosen Fix:
> http://www.wintotal.de/Tipps/?id=1712
>
> Ob und wie der wirkt, kann ich noch nicht sagen.
Der Fix von Smarttools wirkt. Globale Vorlage (AddIn) und beim Start zu
ladende Dokumente kommen sich nicht mehr in die Quere.
Allerdings entsteht durch den Fix ein anderes Problem: es werden ggf.
zusätzliche Word-Instanzen aufgemacht, von denen nur eine Instanz zwei
Dokumente enthält, die anderen aber jeweils nur ein Dokument, wenn über den
Explorer gleiche mehrere Dateien geöffnet werden sollen.
Das belastet das System unnötig und kann zu Seiteneffekten führen. In
unseren Systemen ist der mehrfache Word-Start nicht gewünscht und wird von
der globalen Vorlage angemeckert.
Der Fix befasst sich offenbar gar nicht mit einer Korrektur der DDE-Abläufe,
sondern schreibt einfach in die Registry, dass Word-Dokumente via winword.exe
"%1" zu laden sind. Die vorhandenen ddeexec-Zweige werden entfernt.
Das gilt sinngemäà auch für Excel-Sheets.
Nach der Deinstallation des Fixes ist die Registry nicht mehr im vorherigen
Zustand, da z. B. die Einträge zu Word.Document.8\shell\open\command.Standard
nun nicht mehr den Fullname der Exe enthalten. AuÃerdem fehlt
shell\open\command.command ganz. Man muss also noch manuell nacharbeiten.
Hang loose, Hartwig
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Thomas Gahler" |
| Datum | 18.11.2009 11:34:39 |
Hallo Hartwig
> Der Fix von Smarttools wirkt. Globale Vorlage (AddIn) und beim Start zu
> ladende Dokumente kommen sich nicht mehr in die Quere.
>
> Allerdings [...]
Danke für die Infos. Ich werde am DO oder FR versuchen diesen Test bei
meinem Kunden zu machen. Gleichzeitig werde ich ihm deine Erkenntnisse
präsentieren.
Ich hatte schon auf der Homepage von SmartTools nach Informationen zum Fix
gesucht aber nichts gefunden.
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows XP (SP3), Office XP (SP3)
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Thomas Gahler" |
| Datum | 20.11.2009 13:13:29 |
Hallo Hartwig
> Danke für die Infos. Ich werde am DO oder FR versuchen diesen Test bei
> meinem Kunden zu machen.
Die ersten Test waren ebenfalls erfolgreich. Jetzt überlasse ich es dem
Kunden ob er den Fix weiter ausbreitet oder nicht.
Ein ganz spannendes Phänomen ist noch auf getaucht. Ich weiss nicht mit
welcher Software dort die PCs aufgesetzt werden. Doch jetzt war ein Rollout
bei einer Tochtergesellschaft und dort läuft der Doppelklick. Super bei den
einen PCs geht, bei anderen geht es nicht. Ist doch spannend und sehr
hilfreich bei der Fehlersuche.
Euch allen besten Dank für die Unterstützung. Helfe bei Word fragen gerne
weiter...
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows XP (SP3), Office XP (SP3)
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | =?Utf-8?B?SGFydHdpZyBDb25zdGllbg==?= |
| Datum | 20.11.2009 16:09:03 |
> Ein ganz spannendes Phänomen ist noch auf getaucht. Ich weiss nicht mit
> welcher Software dort die PCs aufgesetzt werden. Doch jetzt war ein Rollout
> bei einer Tochtergesellschaft und dort läuft der Doppelklick. Super bei den
> einen PCs geht, bei anderen geht es nicht. Ist doch spannend und sehr
> hilfreich bei der Fehlersuche.
Hallo Thomas,
es geht noch spannender: ich habe noch eine zweite globale Vorlage für ein
anderes Word-Projekt. Mit dieser Vorlage allein gibt es nie Probleme beim
Starten von Word mit übergebenen Dateien und Vorhandensein von IE7/8. Die
zweite Vorlage macht im AutoExec ähnliche Dinge wie die erste Vorlage, aber
nicht ganz so aufwändig.
Auf meinem Entwicklungsrechner habe ich schon mal beide globalen Vorlagen
aktiv im Startup-Pfad. Und dann passiert es, dass Teile der Menüleiste der
ersten Vorlage in der Menüleiste der zweiten Vorlage abgebildet werden.
Statt des eigentlichen Menüs der 2. Vorlage ist plötzlich ein Unterzweig der
ersten Vorlage im zweiten Menü eingehängt (und funktioniert mit den Aufrufen
der ersten Vorlage).
Um das Maà voll zu machen: wenn ich drei Doks beim Start übergebe, werden in
zwei Fenstern die vertauschten Menüpunkte angezeigt, in einem Fenster sind
aber beide Menüs OK.
Unter Word97 hat es diese Vertauschung nie gegeben; tritt bei mir erst seit
Word 2002 auf.
Nun gut, auf meinem Entwicklungsrechner kann ich das beherrschen und die
Anwender haben jeweils nur eine Variante, also kein drängendes Problem. So
ganz koscher ist das aber nicht, was beim Word-Start so alles abläuft.
Noch eine Ergänzung: ich lasse bei mir in Abhängigkeit von Registryschaltern
die eine oder andere Vorlage sich beim Word-Start jeweils selbst wieder
beenden. Kickt sich die erste Vorlage während des Startablauf raus, werden
alle zu ladenden Dateien angezeigt. Es dürfte also eher kein Timingproblem
sein, sondern irgendetwas spezifisches in der ersten Vorlage. Ich werde mal
jede Procedure beim Start einzeln anschalten um zu sehen, wann die
Unterdrückung zuschlägt und ob man einzelne Aufrufe verantwortlich machen
kann.
Hang loose, Hartwig
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | =?Utf-8?B?SGFydHdpZyBDb25zdGllbg==?= |
| Datum | 20.11.2009 16:57:01 |
> [...] Ich werde mal
> jede Procedure beim Start einzeln anschalten um zu sehen, wann die
> Unterdrückung zuschlägt und ob man einzelne Aufrufe verantwortlich machen
> kann.
Hallo Thomas,
Arghasdfüpirewt! Man soll nicht zu freundlich sein.
Als letzte Zeile in meiner AutoExec der ersten Vorlage steht DoEvents, nach
dem Motto "Isch hab fertich, getz kanns Du." Nach der Deaktivierung kommen
sich globale Vorlage und über DDE zu ladende Dokumente nicht mehr ins Gehege.
Hast Du in Deinem VBA-Code auch irgendwo DoEvents drin? Wenn ja, sollten wir
diese Erkenntnis auch in der VBA-Gruppe kund tun, dann braucht es keinen
externen Fix.
Hang loose, Hartwig
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Thorsten Albers" |
| Datum | 21.11.2009 00:07:58 |
Hartwig Constien
Beitrag <08A7E7BB-098F-40C2-A467-B822286EE2EC@microsoft.com>...
> Als letzte Zeile in meiner AutoExec der ersten Vorlage steht DoEvents,
nach
> dem Motto "Isch hab fertich, getz kanns Du." Nach der Deaktivierung
kommen
> sich globale Vorlage und über DDE zu ladende Dokumente nicht mehr ins
Gehege.
So rein gefühlsmäßig würde ich, wenn überhaupt, ein DoEvents ja an den
Anfang der AutoExec stellen nach dem Motto "Mach Du ers ma fertisch, denne
gomm ich"...
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Thomas Gahler" |
| Datum | 21.11.2009 14:41:19 |
Hallo Hartwig
>> jede Procedure beim Start einzeln anschalten um zu sehen, wann die
>> Unterdrückung zuschlägt und ob man einzelne Aufrufe verantwortlich machen
>> kann.
Spannend deine Darstellung wie deine Add-Ins funktionieren. Geht bei mir
ähnlich, dass Add-In im Startup ist nur dafür zuständlig andere Add-In zu
laden oder nach der Initialisierung von Word wieder zu entladen.
Es gibt Add-Ins wie werden zwingend geladen, andere kann der Anwender wählen
und die dritte Kategorie wird bei Bedarf nachgeladen und wieder entladen.
> Hast Du in Deinem VBA-Code auch irgendwo DoEvents drin? Wenn ja, sollten
> wir
> diese Erkenntnis auch in der VBA-Gruppe kund tun, dann braucht es keinen
> externen Fix.
Ich wollte schon behaupten "Nö habe ich ich" doch beim nachschauen muss ich
feststellen, dass ich tatsächlich so eine Anweisung eingebaut habe. Jedes
Add-In hängt sich in der Multifunktionsleiste in meinen eigenen Tab rein und
bringt da eine eigen Gruppe mit.
Ich habe das 'DoEvents' jeweils im Callback für Ribbon onLoad drin. Weshalb
ich das gemacht habe weiss ich nicht mehr. Werde ich jetzt sicher mal
termporär rausschmeissen und dann testen die sich die Add-Ins verhalten und
ob dann der Doppelklick wieder funktioniert.
Ich werde mich dann sicher wieder melden....
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows Vista (SP2), Office 2007 (SP2)
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Thomas Gahler" |
| Datum | 23.11.2009 12:24:27 |
Hallo Hartwig und Thorsten und alle anderen auch ;-)
> Ich habe das 'DoEvents' jeweils im Callback für Ribbon onLoad drin.
> Weshalb ich das gemacht habe weiss ich nicht mehr. Werde ich jetzt sicher
> mal termporär rausschmeissen und dann testen die sich die Add-Ins
> verhalten und ob dann der Doppelklick wieder funktioniert.
Alles klar, die erstens Test sind erfolgreich. Ohne DoEvents klappt der
Doppelklick so wie er sollte und ohne Fix der SmartTools-Typen. Jetzt bin
ich doch ziemlich glücklich.
Mein DoEvents im Callback für Ribbon onLoad habe ich nur deshalb dirn, dass
Word schön aussieht wenn es geladen wird. Ohne DoEvenst offnet sich Word
ohne den Teil mit der Multifunktionsleiste, dieser wird erst ganz am Schluss
dargestellt. Mit dem DoEvents drin wird die Multifunktionsleite nach jedem
laden eines Add-Ins schön frisch dargestellt. Ich nehme jett mal diesen
kleine optischen Verlust in Kauf.
Herzlichen Dank für die Feedbacks von euch und die Unterstützung.
Wenn das Problem jetzt wirklich nicht mehr auftaucht, dann werde ich
gelegentlich in m.p.d.w.vba einen entsprechenden Hinweis platzieren und
einen Tipp an SmartTools liefern.
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows XP (SP3), Office XP (SP3)
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | =?Utf-8?B?SGFydHdpZyBDb25zdGllbg==?= |
| Datum | 23.11.2009 16:05:01 |
Hallo Thomas,
> [...] Jetzt bin ich doch ziemlich glücklich.
Da sind wir aber froh, dass das geklappt hat(;-)
> Mein DoEvents im Callback für Ribbon onLoad habe ich nur deshalb dirn, dass
> Word schön aussieht wenn es geladen wird. Ohne DoEvenst offnet sich Word
> ohne den Teil mit der Multifunktionsleiste, dieser wird erst ganz am Schluss
> dargestellt. Mit dem DoEvents drin wird die Multifunktionsleite nach jedem
> laden eines Add-Ins schön frisch dargestellt. Ich nehme jett mal diesen
> kleine optischen Verlust in Kauf.
Kann vielleicht die Folge
Application.ScreenUpdating = False 'ganz am Anfang
Application.ScreenRefresh 'nach jedem AddIn-Einhänger
Application.ScreenUpdating = True 'ganz am Ende
die Verluste ausgleichen?
> Wenn das Problem jetzt wirklich nicht mehr auftaucht, dann werde ich
> gelegentlich in m.p.d.w.vba einen entsprechenden Hinweis platzieren und
> einen Tipp an SmartTools liefern.
Mach das.
Hang loose, Hartwig
| Betreff | Re: Etwas besseres als 'GetCommandLine' gesucht / oder DDE auswert |
| Von | "Thomas Gahler" |
| Datum | 23.11.2009 20:03:29 |
Hallo Hartwig
> Kann vielleicht die Folge
> Application.ScreenRefresh 'nach jedem AddIn-Einhänger
> die Verluste ausgleichen?
Der ist schon drin und bring nichts.
Ich bin auch nicht ganz sicher, ob .ScreenRefresh nur den Dokumentteil oder
das ganze Word-Fenster neu zeichnet. Der Ribben wird mal sicher nicht schön
gezeichnet. Aber das müssen wir jetzt wohl in Kauf nehmen.
Gruss
Thomas
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows Vista (SP2), Office 2007 (SP2)
Klasse UDT
| Betreff | Klasse/ UDT |
| Von | Theo Beutekamp |
| Datum | 09.11.2009 16:47:08 |
Nochmal eine Frage:
Ich muss eine "Struktur" laden, die so aussiehen "müsste":
Eine Klasse namens "clsBox" mit den Mitgliedern
Public m_cBoxTop As clsBox
Public m_cBoxLeft As clsBox
Public m_cBoxRight As clsBox
Public m_cBoxBottom As clsBox
Public m_sContents As String
Das funktioniert auch genauso, wie ich es möchte, aber nach ein paar
zehntausend Instanzen dieser Klasse verbraucht das Ding schon wirklich
viel Arbeitsspeicher.
Gibt es eine Möglichkeit, wie ich das umschreiben kann, bzw. eine
"kostengüntstige" Alternative?
Ich dachte erst, ich könnte ja auch ein UDT machen (in der Hoffnung,
dass dies weniger Arbeitsspeicher verbraucht), aber bei diesem Versuch
meldet die IDE "Wechselseitige Abhängigkeit von Modulen":
Public Type udtBox
BoxTop As udtBox
BoxLeft As udtBox
BoxRight As udtBox
BoxBottom As udtBox
Contents As String
End Type
| Betreff | Re: Klasse/ UDT |
| Von | =?iso-8859-1?Q?Heinz-Mario_Fr=FChbeis?= |
| Datum | 09.11.2009 17:44:54 |
"Theo Beutekamp"
news:OfhGnPVYKHA.3720@TK2MSFTNGP02.phx.gbl...
> Eine Klasse namens "clsBox"
> Das funktioniert auch genauso, wie ich es möchte, aber nach ein paar
> zehntausend Instanzen dieser Klasse verbraucht das Ding schon wirklich
> viel Arbeitsspeicher.
Was beinhaltet denn die Klasse -->
etwas eine PictureBox?
, die du dann (durch die Klasse "vermehrst") oben rechts unten links
anordnest?
, deren Events du dann nutzen möchtest?
viele Grüße
Heinz-Mario
| Betreff | Re: Klasse/ UDT |
| Von | Theo Beutekamp |
| Datum | 09.11.2009 19:34:16 |
Es ist eine abstrukte Klasse mit lauter Werten, durch die ich mich
hangeln muss.
Kompliziert zu erklären...
Am einfachsten wäre folgender Vergleich:
Klasse clsPerson
Public Mutter As clsPerson
Public Vater As clsPerson
Public EigenerName As String
Ich sage dann in meinem Code:
Dim nMutter As New clsPerson
nMutter.EigenerName = "Rita"
Dim nSohn As New clsPerson
nSohn.EigenerName = "Peter"
Set nSohn.Mutter = nMutter
Ich weiß keinen anderen Weg, als alles in den Arbeitsspeicher zu
schieben, wenn ich mich schnell da durchhangeln will und mit den
einzelnen Instanzen arbeiten will.
Du?
Heinz-Mario Frühbeis schrieb:
>
> "Theo Beutekamp"
> news:OfhGnPVYKHA.3720@TK2MSFTNGP02.phx.gbl...
>
>> Eine Klasse namens "clsBox"
>
>> Das funktioniert auch genauso, wie ich es möchte, aber nach ein paar
>> zehntausend Instanzen dieser Klasse verbraucht das Ding schon wirklich
>> viel Arbeitsspeicher.
>
> Was beinhaltet denn die Klasse -->
> etwas eine PictureBox?
> , die du dann (durch die Klasse "vermehrst") oben rechts unten links
> anordnest?
> , deren Events du dann nutzen möchtest?
>
> viele Grüße
> Heinz-Mario
>
| Betreff | Re: Klasse/ UDT |
| Von | =?iso-8859-1?Q?Heinz-Mario_Fr=FChbeis?= |
| Datum | 09.11.2009 20:19:58 |
Hallo!
Jetzt ! nehme ich mal an das du Daten aus einer Datenbank holst und dir mit
den Klassen ein Abbild
der Db. schaffen möchtest.
viele Grüße
Heinz-Mario
"Theo Beutekamp"
news:u$OEAtWYKHA.1520@TK2MSFTNGP04.phx.gbl...
> Es ist eine abstrukte Klasse mit lauter Werten, durch die ich mich hangeln
> muss.
> Kompliziert zu erklären...
> Am einfachsten wäre folgender Vergleich:
>
> Klasse clsPerson
> Public Mutter As clsPerson
> Public Vater As clsPerson
> Public EigenerName As String
>
> Ich sage dann in meinem Code:
>
> Dim nMutter As New clsPerson
> nMutter.EigenerName = "Rita"
>
> Dim nSohn As New clsPerson
> nSohn.EigenerName = "Peter"
>
> Set nSohn.Mutter = nMutter
>
> Ich weiß keinen anderen Weg, als alles in den Arbeitsspeicher zu schieben,
> wenn ich mich schnell da durchhangeln will und mit den einzelnen Instanzen
> arbeiten will.
>
> Du?
>
> Heinz-Mario Frühbeis schrieb:
>>
>> "Theo Beutekamp"
>> news:OfhGnPVYKHA.3720@TK2MSFTNGP02.phx.gbl...
>>
>>> Eine Klasse namens "clsBox"
>>
>>> Das funktioniert auch genauso, wie ich es möchte, aber nach ein paar
>>> zehntausend Instanzen dieser Klasse verbraucht das Ding schon wirklich
>>> viel Arbeitsspeicher.
>>
>> Was beinhaltet denn die Klasse -->
>> etwas eine PictureBox?
>> , die du dann (durch die Klasse "vermehrst") oben rechts unten links
>> anordnest?
>> , deren Events du dann nutzen möchtest?
>>
>> viele Grüße
>> Heinz-Mario
>>
| Betreff | Re: Klasse/ UDT |
| Von | Theo Beutekamp |
| Datum | 09.11.2009 21:18:43 |
Ja genau!
Gibt es eine standardisierte Methode, wie man am Besten solche Bäume
erzeugt, bzw. sich da durchhangelt?
Wenn nicht, dann freue ich mich auch über alternative Ideen.
Heinz-Mario Frühbeis schrieb:
> Hallo!
>
> Jetzt ! nehme ich mal an das du Daten aus einer Datenbank holst und dir
> mit den Klassen ein Abbild
> der Db. schaffen möchtest.
>
> viele Grüße
> Heinz-Mario
>
> "Theo Beutekamp"
> news:u$OEAtWYKHA.1520@TK2MSFTNGP04.phx.gbl...
>> Es ist eine abstrukte Klasse mit lauter Werten, durch die ich mich
>> hangeln muss.
>> Kompliziert zu erklären...
>> Am einfachsten wäre folgender Vergleich:
>>
>> Klasse clsPerson
>> Public Mutter As clsPerson
>> Public Vater As clsPerson
>> Public EigenerName As String
>>
>> Ich sage dann in meinem Code:
>>
>> Dim nMutter As New clsPerson
>> nMutter.EigenerName = "Rita"
>>
>> Dim nSohn As New clsPerson
>> nSohn.EigenerName = "Peter"
>>
>> Set nSohn.Mutter = nMutter
>>
>> Ich weiß keinen anderen Weg, als alles in den Arbeitsspeicher zu
>> schieben, wenn ich mich schnell da durchhangeln will und mit den
>> einzelnen Instanzen arbeiten will.
>>
>> Du?
>>
>> Heinz-Mario Frühbeis schrieb:
>>>
>>> "Theo Beutekamp"
>>> news:OfhGnPVYKHA.3720@TK2MSFTNGP02.phx.gbl...
>>>
>>>> Eine Klasse namens "clsBox"
>>>
>>>> Das funktioniert auch genauso, wie ich es möchte, aber nach ein paar
>>>> zehntausend Instanzen dieser Klasse verbraucht das Ding schon
>>>> wirklich viel Arbeitsspeicher.
>>>
>>> Was beinhaltet denn die Klasse -->
>>> etwas eine PictureBox?
>>> , die du dann (durch die Klasse "vermehrst") oben rechts unten links
>>> anordnest?
>>> , deren Events du dann nutzen möchtest?
>>>
>>> viele Grüße
>>> Heinz-Mario
>>>
>
| Betreff | Re: Klasse/ UDT |
| Von | =?iso-8859-1?Q?Heinz-Mario_Fr=FChbeis?= |
| Datum | 09.11.2009 22:22:15 |
"Theo Beutekamp"
news:ePW6WnXYKHA.3696@TK2MSFTNGP02.phx.gbl...
> Gibt es eine standardisierte Methode, wie man am Besten solche Bäume
> erzeugt, bzw. sich da durchhangelt?
Wenn du mit VB-eigenem Werzeug arbeiten möchtest :
TreeView und ListView
RecordSet erstellen
TreeView-Knoten : Personen
TreeView-"Unter"-Knoten : Bezüge und Verweise
' Frei aus dem Gedächtnis
dim n as Node
For i = 0 to rec.Count -1
set n = TreeView1.nodes.add (Key )
next i
(Kannst ja dazu in der Hilfe schauen: Wie Knoten erstellt werden
(Parent,Child) ; oder googeln)
Alles anklickbar, Drag-Drop-bar, editierbar ...
ListView : Info's zu Personen
--> NodeClick -->
Dm li as ListItem
For i = 0 to rs.fields.count -1
set li = ListView1.additem(Key)
next i
(Kannst ja dazu in der Hilfe schauen: Wie ListItems erstellt werden ; oder
googeln)
Alles anklickbar, Drag-Drop-bar, editierbar ...
Wenn man' s einmal 'raus hat geht das Erstellen ratzfatz.
Und läuft auch sehr schnell.
viele Grüße
Heinz-Mario
| Betreff | Re: Klasse/ UDT |
| Von | "Thorsten Albers" |
| Datum | 09.11.2009 18:10:22 |
Theo Beutekamp
> aber nach ein paar
> zehntausend Instanzen dieser Klasse verbraucht das Ding schon wirklich
> viel Arbeitsspeicher.
Ich kann mir keinen Grund vorstellen, warum man 'ein paar zehntausend
Instanzen' gleichzeitig im Speicher halten muß...
> Public Type udtBox
> BoxTop As udtBox
> BoxLeft As udtBox
> BoxRight As udtBox
> BoxBottom As udtBox
> Contents As String
> End Type
Ist doch logisch, das eine Struktur nicht sich selbst enthalten kann. Zum
einen wird mit 'Public Type...End Type' hier die Struktur definiert, d.h.
innerhalb davon wäre 'udtBox' undefiniert; nur ein definierter Datentyp
kann Mitglied einer Struktur sein. Zum anderen wäre das eine
'Endlos-Definition', wenn eine Definition sich selbst als Teil der
Definition enthielte.
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: Klasse/ UDT |
| Von | "Peter Götz" |
| Datum | 10.11.2009 11:59:40 |
Hallo Theo,
> Ich muss eine "Struktur" laden, die so aussiehen "müsste":
>
> Eine Klasse namens "clsBox" mit den Mitgliedern
>
> Public m_cBoxTop As clsBox
> Public m_cBoxLeft As clsBox
> Public m_cBoxRight As clsBox
> Public m_cBoxBottom As clsBox
> Public m_sContents As String
Wenn m_CBoxTop, m_cBoxLeft, m_cBoxRight und mcboxBottom
jeweils wieder ein Objekt vom Typ clsBox enthält und dieses in
seinen Eigenschaften wieder jeweils ein Objekt vom Typ
clsBox und diese wiederum usw., usw., usw., .... ,
dann wäre das ja eine endlose Kette von Objekten, für
die jeder Speicher zu klein wäre.
> Das funktioniert auch genauso, wie ich es möchte,
Ob das wirklich so ist, könnte man nur beurteilen, wenn
man u.a. auch den Konstruktor (Sub New) dieser Klasse
kennen würde.
> aber nach ein paar zehntausend Instanzen dieser Klasse verbraucht das Ding
> schon wirklich viel Arbeitsspeicher.
Wenn Du 10.000 solcher Klasseninstanzen hast, die
selbst dann jeweils wieder auf 4 solcher Klasseninstanzen
in ihren Eigenschaften m_CBoxTop ... mCBoxBottom
zeigen, bist Du insgesamt schon bei 50.000 Instanzen.
> Gibt es eine Möglichkeit, wie ich das umschreiben kann, bzw. eine
> "kostengüntstige" Alternative?
Um Alternativen zu erkennen, sollte man erst mal etwas
detailierter wissen, was genau Du da eigentlich vorhast.
>
> Ich dachte erst, ich könnte ja auch ein UDT machen (in der Hoffnung, dass
> dies weniger Arbeitsspeicher verbraucht), aber bei diesem Versuch meldet
> die IDE "Wechselseitige Abhängigkeit von Modulen":
> Public Type udtBox
> BoxTop As udtBox
> BoxLeft As udtBox
> BoxRight As udtBox
> BoxBottom As udtBox
> Contents As String
> End Type
Auch damit hast Du ganz schnell einen endlosen
Bandwurm, genau wie oben mit Deinen x-tausend
Klasseninstanzen.
Beschreibe mal Deine wirkliche Aufgabenstellung,
nur so kann man einen dafür praktikablen Weg
erkennen. Klassen oder oder UDTs, die sich selbst
enthalten, sind eher keine wirkliche Lösung.
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)
DEP Dateien
| Betreff | DEP-Dateien |
| Von | "Werner Kistner" |
| Datum | 08.11.2009 16:04:37 |
Hallo
zu einigen OCX Steuerelementen befindet sich neben der OCX-Datei im
Verzeichnis WINDOWS\System32 auch eine DEP-Datei. Kann mir jemand sagen für
was die gebraucht wird. Wenn ich diese DEP-Datei umbenenne funktioniert das
Programm auch.
Besten Dank
Werner
| Betreff | Re: DEP-Dateien |
| Von | "Thorsten Albers" |
| Datum | 08.11.2009 19:40:03 |
Werner Kistner
> zu einigen OCX Steuerelementen befindet sich neben der OCX-Datei im
> Verzeichnis WINDOWS\System32 auch eine DEP-Datei. Kann mir jemand sagen
für
> was die gebraucht wird. Wenn ich diese DEP-Datei umbenenne funktioniert
das
> Programm auch.
'DEP' steht für 'Dependencies' = 'Abhängigkeiten'. Darin sind die
Abhängigkeiten von COM-Komponenten beschrieben, die mit VB zusammen oder
unabhängig davon installiert wurden. Anhand der 'DEP'-Datei stellt z.B. der
mit VB gelieferte Verpackungs- und Weitergabe-Assistent die Dateien
zusammen, die einem Setup für ein VB-Projekt hinzugefügt werden müssen,
wenn es die jeweilige COM-Komponente einbindet. Beim Erstellen eines Setups
hast Du übrigens auch selbst die Möglichkeit, für das jeweilige VB-Projekt
eine 'DEP'-Datei erstellen zu lassen.
--
Thorsten Albers
albers (a) uni-freiburg.de
exponentieller lichtdimmer
| Betreff | exponentieller lichtdimmer |
| Von | Ulli Tolksdorf |
| Datum | 08.11.2009 11:52:30 |
Hallo
leider habe ich in mathe nicht genug aufgepasst :(((
über einen timer wird ein lichtdimmer gesteuert.
der dimmerwert nimmt von 255 immer den wert 1 ab bis 0.
nun soll timer1.intervall von einer frei wählbaren sekundenzahl
exponentiell kleiner werden.
also quasi immer 255 schritte aber von unterschiedlicher sekundenzahl
ausgehend....
wie ist die formel für timer1.intervall dazu!???
lieben dank!
| Betreff | Re: exponentieller lichtdimmer |
| Von | =?ISO-8859-15?Q?Heinz-Mario_Fr=FChbeis?= |
| Datum | 08.11.2009 14:16:19 |
"Ulli Tolksdorf"
news:O0IwSGGYKHA.4704@TK2MSFTNGP02.phx.gbl...
> nun soll timer1.intervall von einer frei wählbaren sekundenzahl
> exponentiell kleiner werden.
' In den Deklarationen
Dim memVal as Integer
Dim memTimerIVal as Integer
Dim aktTimerIVal as Integer
' In einem Init (z.Bsp. Load_Ereignis einer Form
memVal = -1
memTimerIVal = 120
Private Sub Timer1_Timer()
aktTimerIVal = memTimerIVal
if memTimerIVal <> aktTimerIVal then
memVal = -1
end if
if memVal = -1 then
memVal = 255
else
if > 0 then
memVal = memVal -1
' Restlicher Code für den Dimmer
else
Timer1.Interval = 0 ' quasi disabled
end if
end if
End Sub
Ich hab' es jetzt nicht getestet; ist also Impromptu.
viele Grüße
Heinz-Mario
| Betreff | Re: exponentieller lichtdimmer |
| Von | Ulli Tolksdorf |
| Datum | 09.11.2009 09:35:58 |
hm, Du meinst also, eine verkürzung des Intervalls bei jedem Schritt um
1, ja?
| Betreff | Re: exponentieller lichtdimmer |
| Von | =?ISO-8859-15?Q?Heinz-Mario_Fr=FChbeis?= |
| Datum | 09.11.2009 11:39:43 |
"Ulli Tolksdorf"
news:OtaEqeRYKHA.1236@TK2MSFTNGP05.phx.gbl...
> hm, Du meinst also, eine verkürzung des Intervalls bei jedem Schritt um 1,
> ja?
Du kannst ja auch 10ner Schritte machen.
Wichtiger hierbei ist es doch auf den Timer-Interval zu achten.
Den nämlich mit dem Dimm-Schritt zu verknüpfen ist glaube ich keine gute
Sache.
Je nachdem, wie schnell du dimmen willst kann entweder der Timer-Interval
entscheidend sein, ODER
der Schritt-Wert.
"1" habe ich deswegen gnommen, weil bei heutigen Systemen die
Geschwindigkeit so hoch ist, das man schon fast
aufpassen muß keine zu großen Schritte zu machen.
Quasi:
1. Dimm dimm dimm dimm dimm, etc
2. Wusch
Aber das mußt du für dich und dein Programm selbst entscheiden.
viele Grüße
Heinz-Mario
| Betreff | Re: exponentieller lichtdimmer |
| Von | Ulrich Korndoerfer |
| Datum | 10.11.2009 10:12:31 |
Hallo Ulli (:-))
Ulli Tolksdorf schrieb:
> Hallo
>
> leider habe ich in mathe nicht genug aufgepasst :(((
>
> über einen timer wird ein lichtdimmer gesteuert.
>
> der dimmerwert nimmt von 255 immer den wert 1 ab bis 0.
>
> nun soll timer1.intervall von einer frei wählbaren sekundenzahl
> exponentiell kleiner werden.
>
> also quasi immer 255 schritte aber von unterschiedlicher sekundenzahl
> ausgehend....
>
> wie ist die formel für timer1.intervall dazu!???
>
>
> lieben dank!
Probier mal:
Public Sub Test(Optional ByVal StartIntervallDauer As Double = 1, _
Optional ByVal SchlussIntervallDauer As Double = 0.01, _
Optional ByVal IntervallAnzahl As Long = 255)
Dim i As Long
For i = 1 To IntervallAnzahl
Debug.Print i, _
Format$(IntervallDauer(i, IntervallAnzahl, StartIntervallDauer, _
SchlussIntervallDauer), "0.000")
Next i
End Sub
'Anzahl >= 2
'1 <= IntervallNummer <= Anzahl
'StartIntervallDauer < SchlussIntervallDauer oder
'StartInterVallDauer > SchlussIntervallDauer
'IntervallNummer = 1 : Übergangszeit vom Startwert zum nächsten
' Wert mit der Dauer StartIntervallDauer
'IntervallNummer = Anzahl: Übergangszeit zum Schlusswert mit der
' Dauer SchlussIntervallDauer
Private Function IntervallDauer(ByVal IntervallNummer As Long, _
ByVal IntervallAnzahl As Long, _
ByVal StartIntervallDauer As Double, _
ByVal SchlussIntervallDauer As Double) _
As Double
Const cEULER As Double = 2.71828182845905
Dim Schrittweite As Double, Skalierungsfaktor As Double
Dim Divisor As Double
Schrittweite = 1 / (IntervallAnzahl - 1)
IntervallNummer = IntervallNummer - 1
Skalierungsfaktor = Log(StartIntervallDauer) - _
Log(SchlussIntervallDauer)
Divisor = cEULER ^ (Skalierungsfaktor * Schrittweite * IntervallNummer)
IntervallDauer = StartIntervallDauer / Divisor
End Function
--
Ulrich Korndoerfer
VB tips, helpers, solutions -> http://www.proSource.de/Downloads/
eckig BitBlt trotz SetWindowRng
| Betreff | 4 eckig-BitBlt trotz SetWindowRng |
| Von | =?iso-8859-1?Q?Heinz-Mario_Fr=FChbeis?= |
| Datum | 07.11.2009 18:17:32 |
Hallo!
Durch die Funktion SetWindowRng habe ich ein Fenster "rund gemacht".
Sieht toll aus; klappt auch toll.
Ich bräuchte allerdings ein komplettes Bild dieser Form.
Dafür benutze ich i.d.R. BitBlt um von einem DC in ein anderes zu zeichnen.
(Set Picture kann ich dabei nicht nutzen; wegen X, Y)
Das Blitting der Form wird aber nicht in der WindowRegion gezeichnet sondern
viereckig.
Wie kann ich ein Picture der WindowRng erstellen das genau die Form der
WindowRng zeichnet?
viele Grüße
Heinz-Mario
OT Stackspeicher eines laufenden Prozesses ermitteln
| Betreff | OT: Stackspeicher eines laufenden Prozesses ermitteln |
| Von | Frank Landen |
| Datum | 07.11.2009 14:21:48 |
Hallo NGler,
Ich habe ein Programm (per EXE gestartet). Ohne Probleme kann ich nun
über das Windows-Handle die ProcessID ermitteln und mit ReadProcess auf
den Speicherbereich des Programms zugreifen.
Das Programm legt bestimmte Werte auf dem Stack ab, die ich zur
weiteren Verarbeitung benötigen würde. (Mit Ollydbg geprüft)
Nun die Frage: Wie kann ich den Stack-Speicherbereich des laufenden
Prozesses ermitteln? Dieser ist ja dynamisch und somit fast nie gleich.
Grüße
Frank Landen
Abrunden Aufrunden
| Betreff | Abrunden/ Aufrunden? |
| Von | Theo Beutekamp |
| Datum | 06.11.2009 23:16:31 |
Ich hoffe, ich bin in der richtigen Newsgroup...
Ich möchte einen Code von C++ in Visual Basic 6 schreiben.
Ich habe diesen Code in C++:
dauer = unsigned(anteil+0.5);
"dauer" ist ein unsigned, da habe ich in Visual Basic 6 mit Long übersetzt.
"anteil" ist ein float, da habe ich Single genommen.
Nun ist "anteil" in C++ der Wert 111.23000.
Ich bin in beiden Sprachen noch nicht gut, deshalb verstehe ich nicht,
warum ich in C++ für "dauer" auf den Wert 111 komme und in Visual Basic
6 auf 112.
Ich habe folgende Übersetzung gewählt:
dauer = Clng(anteil + 0.5)
Sieht jemand den Unterschied und kann mir sagen, was ich anders machen
muss?
| Betreff | Re: Abrunden/ Aufrunden? |
| Von | Gert Wietzorek |
| Datum | 07.11.2009 08:48:21 |
Theo Beutekamp schrieb:
>
> dauer = unsigned(anteil+0.5);
>
>
> Ich habe folgende Übersetzung gewählt:
>
> dauer = Clng(anteil + 0.5)
>
> Sieht jemand den Unterschied und kann mir sagen, was ich anders machen
> muss?
CLNG rundet auf die nächste Ganzzahl. Nimm FIX(anteil + .5), das gibt
Dir nur den ganzzahligen Anteil.
Gruß
Gert
--
------------------------------------------------
| Antworten nur in die Newsgroup, |
| die E-Mail Adressen existieren nicht! |
| |
| answers and questions only to the newsgroup,|
| the email adresses are not valid |
| |
| http://www.gwsoftware.de |
------------------------------------------------
| Betreff | Re: Abrunden/ Aufrunden? |
| Von | Theo Beutekamp |
| Datum | 07.11.2009 09:23:05 |
Dankeschön für die hilfreiche Antwort!
Gert Wietzorek schrieb:
> Theo Beutekamp schrieb:
>> dauer = unsigned(anteil+0.5);
>>
>>
>> Ich habe folgende Übersetzung gewählt:
>>
>> dauer = Clng(anteil + 0.5)
>>
>> Sieht jemand den Unterschied und kann mir sagen, was ich anders machen
>> muss?
>
> CLNG rundet auf die nächste Ganzzahl. Nimm FIX(anteil + .5), das gibt
> Dir nur den ganzzahligen Anteil.
>
> Gruß
> Gert
>
>
| Betreff | Re: Abrunden/ Aufrunden? |
| Von | "Peter Götz" |
| Datum | 07.11.2009 10:34:52 |
Hallo Theo,
> Ich möchte einen Code von C++ in Visual Basic 6 schreiben.
> Ich habe diesen Code in C++:
>
> dauer = unsigned(anteil+0.5);
>
> "dauer" ist ein unsigned, da habe ich in Visual Basic 6 mit Long
> übersetzt.
> "anteil" ist ein float, da habe ich Single genommen.
>
> Nun ist "anteil" in C++ der Wert 111.23000.
> Ich bin in beiden Sprachen noch nicht gut, deshalb verstehe ich nicht,
> warum ich in C++ für "dauer" auf den Wert 111 komme und in Visual Basic 6
> auf 112.
VB rundet bei der Umwandlung eines Fliesskommawertes zu
Long nicht wie Du vermutlich erwartest nach kaufmännischer
Regel, sondern nach mathematisch-/statistischer.
So (mathematisch) rundet VB:
Debug.Print cLng(1.5) -> 2
Debug.Print cLng(2.5) -> 2
Debug.Print cLng(3.5) -> 4
Debug.Print cLng(4.5) -> 4
Es wird also immer zum nächsten geraden Wert hin
gerundet. Die selben Ergebnisse bekommst Du mit
Round(1.5, 0)
Round(2.5, 0)
... usw. ....
Schau Dir hierzu mal die Online-Hilfe zur Round-Funktion
an.
Du möchtest vermutlich kaufmännisch runden, also
nach unten bei x.1 bis x.4 und ab x.5 nach oben.
Kaufmännisch runden kannst Du so:
Public Function RoundMct _
(ByVal dblNumber As Double, _
ByVal intDecimals As Integer) As Double
' kaumfmännisches Runden auf intDecimals Stellen
Dim F As Variant
F = CDec(10 ^ intDecimals)
RoundMct = Int(CDec(dblNumber * F + 0.5)) / F
End Function
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)
| Betreff | Re: Abrunden/ Aufrunden? |
| Von | Theo Beutekamp |
| Datum | 07.11.2009 19:33:32 |
Danke, auch sehr hilfreich!
Peter Götz schrieb:
> Hallo Theo,
>
>> Ich möchte einen Code von C++ in Visual Basic 6 schreiben.
>> Ich habe diesen Code in C++:
>>
>> dauer = unsigned(anteil+0.5);
>>
>> "dauer" ist ein unsigned, da habe ich in Visual Basic 6 mit Long
>> übersetzt.
>> "anteil" ist ein float, da habe ich Single genommen.
>>
>> Nun ist "anteil" in C++ der Wert 111.23000.
>> Ich bin in beiden Sprachen noch nicht gut, deshalb verstehe ich nicht,
>> warum ich in C++ für "dauer" auf den Wert 111 komme und in Visual Basic 6
>> auf 112.
>
> VB rundet bei der Umwandlung eines Fliesskommawertes zu
> Long nicht wie Du vermutlich erwartest nach kaufmännischer
> Regel, sondern nach mathematisch-/statistischer.
>
> So (mathematisch) rundet VB:
>
> Debug.Print cLng(1.5) -> 2
> Debug.Print cLng(2.5) -> 2
> Debug.Print cLng(3.5) -> 4
> Debug.Print cLng(4.5) -> 4
>
> Es wird also immer zum nächsten geraden Wert hin
> gerundet. Die selben Ergebnisse bekommst Du mit
>
> Round(1.5, 0)
> Round(2.5, 0)
> ... usw. ....
>
> Schau Dir hierzu mal die Online-Hilfe zur Round-Funktion
> an.
>
> Du möchtest vermutlich kaufmännisch runden, also
> nach unten bei x.1 bis x.4 und ab x.5 nach oben.
>
> Kaufmännisch runden kannst Du so:
>
> Public Function RoundMct _
> (ByVal dblNumber As Double, _
> ByVal intDecimals As Integer) As Double
>
> ' kaumfmännisches Runden auf intDecimals Stellen
> Dim F As Variant
> F = CDec(10 ^ intDecimals)
> RoundMct = Int(CDec(dblNumber * F + 0.5)) / F
> End Function
>
> Gruß aus St.Georgen
> Peter Götz
> www.gssg.de (mit VB-Tipps u. Beispielprogrammen)
>
>
Von DAO zu ACEDAO
| Betreff | Von DAO3.6 zu ACEDAO |
| Von | "Marco" |
| Datum | 05.11.2009 15:17:41 |
Hallo Profis
Ich habe ein Problem und weiss da nicht mehr weiter.
Wir hatten ein VB Makro in Excel 2007 laufen, welches auf eine Access 2003
mdb Datenbank zugegriffen hat.
Jetzt wurde diese Datenbank ins ACCDB Format konvertiert und seit dem funzt
auch das Makro nicht mehr :-(
Ich hab mich bissi schlau gemacht und herausgefunden, dass es jetzt nicht
mehr die DAO3.6 als Library benötigt, sondern die ACEDAO, da nur die auf das
ACCDB Access Fileformat zugreifen kann.
Hab die Library zusätzlich zur DAO3.6 eingebunden, aber erhalten leider
jetzt dennoch einen Fehler und zwar bei diesem Befehl:
If db Is Nothing Then Set db = OpenDatabase(sDBPath)
Was muss ich denn noch ändern, damit das Makro wieder läuft?
Kann mir da jemand helfen?
Vielen Dank
Gruss Marco
P.S. Hier das ganze Makro
-------------------------------------------------------------------
Const sDBPath = "X:\Apps\MATCALC\MatCalc_d.accdb"
Global db As Database
Sub StartRueckstellungen()
Application.DisplayStatusBar = True
Application.StatusBar = "Programm läuft..."
fUpdate
fCreateSheet
Application.StatusBar = ""
End Sub
Function fUpdate()
Dim sh As Worksheet
Dim dARNR As Variant, dRow As Double, vData As Variant
Set sh = ThisWorkbook.Sheets("Daten")
dLastRow = sh.[a36000].End(xlUp).Row
For dRow = 2 To dLastRow
fDelContent sh, dRow
dARNR = sh.Cells(dRow, 1)
dARNR = Replace(Replace(dARNR, " ", ""), "-", "")
If Not dARNR = "" And IsNumeric(dARNR) Then
vData = fGetPrice(dARNR)
If Not IsEmpty(vData) Then
sh.Cells(dRow, 3) = vData(0)
sh.Cells(dRow, 4) = vData(1)
sh.Cells(dRow, 5) = vData(2)
End If
End If
Next
sh.Columns.AutoFit
sh.Range("A2:E" & dLastRow).Sort Key1:=Range("D2"), Order1:=xlAscending
End Function
Function fGetPrice(ByVal dARNR As Double) As Variant
Dim rsArt As Recordset, sSQL As String, vData(2) As Variant
If db Is Nothing Then Set db = OpenDatabase(sDBPath)
sSQL = "SELECT ArtPreisHKFix, LagerortNr_FK, LieferantenNr_FK FROM
t_Artikel WHERE ArtFirmaArtikelNr=" & dARNR
Set rsArt = db.OpenRecordset(sSQL, dbOpenForwardOnly)
If Not rsArt.RecordCount = 0 Then
If Not IsNull(rsArt!LieferantenNr_FK) And Not rsArt!LieferantenNr_FK
= "" Then
sSQL = "SELECT LiefName FROM t_Lieferanten WHERE
LiefernantenNr=" & rsArt!LieferantenNr_FK
Set rsLief = db.OpenRecordset(sSQL, dbOpenForwardOnly)
If Not rsLief.RecordCount = 0 Then vData(0) = rsLief!LiefName
End If
If Not IsNull(rsArt!LagerortNr_FK) And Not rsArt!LagerortNr_FK = ""
Then
sSQL = "SELECT LOBezeichnung FROM t_Lagerorte WHERE LagerortNr="
& rsArt!LagerortNr_FK
Set rsLO = db.OpenRecordset(sSQL, dbOpenForwardOnly)
If Not rsLO.RecordCount = 0 Then vData(1) = rsLO!LOBezeichnung
End If
vData(2) = rsArt!ArtPreisHKFix
fGetPrice = vData
End If
End Function
Function fDelContent(sh As Worksheet, dRow As Double)
With sh.Range("C" & dRow & ":E" & dRow)
.ClearContents: .ClearComments: .ClearFormats: .ClearNotes:
.ClearOutline
End With
End Function
Function fCreateSheet()
Dim wbNew As Workbook
Dim sh As Worksheet, shNew As Worksheet
Set sh = ThisWorkbook.Sheets("Daten")
Set wbNew = Application.Workbooks.Add
Set shNew = wbNew.Sheets(1)
shNew.Columns.Font.Size = 10: shNew.Columns.Font.Name =
"Arial"
shNew.Columns(1).ColumnWidth = 33.14: shNew.Columns(2).ColumnWidth
= 18
shNew.Columns(5).NumberFormat = "0.00":
shNew.Columns(6).NumberFormat = "0.00"
shNew.Cells(1, 1) = "Rückstellungen per"
shNew.Range(shNew.Cells(1, 1), shNew.Cells(1, 6)).Font.Size = 12
shNew.Range(shNew.Cells(1, 1), shNew.Cells(1, 6)).Font.Bold = True
shNew.Range(shNew.Cells(1, 1), shNew.Cells(1,
6)).Borders(xlEdgeBottom).LineStyle = 1
shNew.Cells(3, 1) = "Lager- und Kübelteile": shNew.Cells(3, 1).Font.Bold
= True
shNew.Cells(5, 1) = "Lieferant": shNew.Cells(5, 1).Font.Underline = True
shNew.Cells(5, 2) = "Artikelnr.": shNew.Cells(5, 2).Font.Underline =
True
shNew.Cells(5, 3) = "Lagerort": shNew.Cells(5, 3).Font.Underline = True
shNew.Cells(5, 4) = "Menge": shNew.Cells(5, 4).Font.Underline = True
shNew.Cells(5, 5) = "Preis fixiert": shNew.Cells(5, 5).Font.Underline =
True
shNew.Cells(5, 6) = "Total": shNew.Cells(5, 6).Font.Underline = True
shNew.Cells(6, 5) = "CHF": shNew.Cells(6, 6) = "CHF"
shNew.Cells(7, 1) = "Lager": shNew.Cells(7, 1).Font.Color = 16711680:
shNew.Cells(7, 1).Font.Underline = True
dRowNew = 9
dRowNewStart = dRowNew
dLastRow = sh.[a36000].End(xlUp).Row
For dRow = 2 To dLastRow
sLo = sh.Cells(dRow, 4)
If InStr(1, sLo, "K") = 0 Then
shNew.Cells(dRowNew, 1) = sh.Cells(dRow, 3)
shNew.Cells(dRowNew, 2) = sh.Cells(dRow, 1)
shNew.Cells(dRowNew, 3) = sh.Cells(dRow, 4)
shNew.Cells(dRowNew, 4) = sh.Cells(dRow, 2)
shNew.Cells(dRowNew, 5) = sh.Cells(dRow, 5)
shNew.Cells(dRowNew, 6).FormulaR1C1 = "=RC[-1]*RC[-2]"
dRowNew = dRowNew + 1
End If
Next
dRowNew = dRowNew + 1
shNew.Cells(dRowNew, 1) = "Lager"
shNew.Cells(dRowNew, 6).FormulaR1C1 = "=SUM(R[-2]C:R[-" & dRowNew -
dRowNewStart & "]C)"
dRowNew = dRowNew + 2
shNew.Cells(dRowNew, 1) = "Kundenaufträge"
dRowNew = dRowNew + 2
shNew.Cells(dRowNew, 1) = "Reserve"
dRowNew = dRowNew + 2
shNew.Cells(dRowNew, 1) = "Total Lager 1065":
shNew.Rows(dRowNew).Font.Bold = True
shNew.Cells(dRowNew, 6).FormulaR1C1 = "=SUM(R[-2]C:R[-6]C)"
dRowNew = dRowNew + 3
shNew.Cells(dRowNew, 1) = "Kübelteile": shNew.Cells(dRowNew,
1).Font.Color = 16711680
shNew.Cells(dRowNew, 1).Font.Underline = True
dRowNew = dRowNew + 2
dRowNewStart = dRowNew
For dRow = 2 To dLastRow
sLo = sh.Cells(dRow, 4)
If InStr(1, sLo, "K") > 0 Then
shNew.Cells(dRowNew, 1) = sh.Cells(dRow, 3)
shNew.Cells(dRowNew, 2) = sh.Cells(dRow, 1)
shNew.Cells(dRowNew, 3) = sh.Cells(dRow, 4)
shNew.Cells(dRowNew, 4) = sh.Cells(dRow, 2)
shNew.Cells(dRowNew, 5) = sh.Cells(dRow, 5)
shNew.Cells(dRowNew, 6).FormulaR1C1 = "=RC[-1]*RC[-2]"
dRowNew = dRowNew + 1
End If
Next
dRowNew = dRowNew + 1
shNew.Cells(dRowNew, 1) = "Total Kübel 3100":
shNew.Rows(dRowNew).Font.Bold = True
shNew.Cells(dRowNew, 6).FormulaR1C1 = "=R[-2]C+R[-" & dRowNew -
dRowNewStart & "]C"
dRowNew = dRowNew + 2
shNew.Cells(dRowNew, 1) = "Kostenarte-Zusammenfassung"
shNew.Cells(dRowNew, 1).Font.Underline = True
dRowNew = dRowNew + 1: shNew.Cells(dRowNew, 1) = "3100 / 3101":
shNew.Cells(dRowNew, 2) = "KL1"
shNew.Cells(dRowNew, 6).FormulaR1C1 = "=SUMIF(C[-3],RC[-4],C)"
dRowNew = dRowNew + 1: shNew.Cells(dRowNew, 1) = "3100 / 3102":
shNew.Cells(dRowNew, 2) = "KL2"
shNew.Cells(dRowNew, 6).FormulaR1C1 = "=SUMIF(C[-3],RC[-4],C)"
dRowNew = dRowNew + 1: shNew.Cells(dRowNew, 1) = "3100 / 3104":
shNew.Cells(dRowNew, 2) = "KL4"
shNew.Cells(dRowNew, 6).FormulaR1C1 = "=SUMIF(C[-3],RC[-4],C)"
dRowNew = dRowNew + 1: shNew.Cells(dRowNew, 1) = "3100 / 3105":
shNew.Cells(dRowNew, 2) = "KL5"
shNew.Cells(dRowNew, 6).FormulaR1C1 = "=SUMIF(C[-3],RC[-4],C)"
dRowNew = dRowNew + 1: shNew.Cells(dRowNew, 1) = "3100 / 3106":
shNew.Cells(dRowNew, 2) = "KL6"
shNew.Cells(dRowNew, 6).FormulaR1C1 = "=SUMIF(C[-3],RC[-4],C)"
dRowNew = dRowNew + 1: shNew.Cells(dRowNew, 1) = "3100 / 3107":
shNew.Cells(dRowNew, 2) = "KL7"
shNew.Cells(dRowNew, 6).FormulaR1C1 = "=SUMIF(C[-3],RC[-4],C)"
dRowNew = dRowNew + 1: shNew.Cells(dRowNew, 1) = "3100 / 3109":
shNew.Cells(dRowNew, 2) = "KET"
shNew.Cells(dRowNew, 6).FormulaR1C1 = "=SUMIF(C[-3],RC[-4],C)"
End Function
| Betreff | Re: Von DAO3.6 zu ACEDAO |
| Von | "Thorsten Albers" |
| Datum | 05.11.2009 17:38:15 |
Marco
<#v5LKLiXKHA.4148@TK2MSFTNGP04.phx.gbl>...
> Wir hatten ein VB Makro in Excel 2007 laufen, welches auf eine Access
2003
> mdb Datenbank zugegriffen hat.
> Jetzt wurde diese Datenbank ins ACCDB Format konvertiert und seit dem
funzt
> auch das Makro nicht mehr :-(
Fragen zur Datenbank-Programmierung mit MS Visual Basic <= 6.0
gehören in die Newsgroup microsoft.public.de.vb.datenbank!
--
----------------------------------------------------------------------
THORSTEN ALBERS Universität Freiburg
albers@
uni-freiburg.de
----------------------------------------------------------------------