Laden...
Avatar #avatar-3411.png
DaSchroeter myCSharp.de - Member
Anwendungsentwickler Dabei seit 24.06.2004 215 Beiträge
Benutzerbeschreibung

Forenbeiträge von DaSchroeter Ingesamt 215 Beiträge

15.03.2010 - 12:56 Uhr

Ich glaube 100%ig sicher geht das (nahezu) gar nicht.
Du könntest einen Timer hernehmen und regelmäßig prüfen, ob das Foreground Window
auch deins ist:
GetForegroundWindow
SetForegroundWindow

04.10.2007 - 13:15 Uhr

Dazu geht im Prinzip auch ActiveX, ABER: IE only!

31.07.2007 - 17:23 Uhr

Moinsen!

Also ich hab im Prinzip nur die benötigten Registry Einträge erstellt.
Das AddIn selbst ist am Einfachsten mit dem VS 2005er Wizard zu erstellen.
'Shared AddIn' brauchst Du.

Dann hab ich das Installer-Projekt weggeworfen.
(Da könntest Du vorher nochmal reinschauen, welche Registry Einträge Du machen musst.)

Der Wizard erstellt Dir eine Klasse Connect (Connect.cs), die schon alle benötigten
Interfaces implementiert.
Dann hab ich aus den Referenzen einfach alles rausgeworfen, was mit Office zu tun hat.
Auch die Core!

Dann musst Du dich durch die MSDN wühlen und nachsehen, welche Eigenschaften und Methoden Du wie per Reflection zuweisen/aufrufen musst 🙂

Das war's eigentlich schon 🙂
Ach ja: Hilfreich ist es, einige Ausgaben per Debug.WriteLine(...) zu erzeugen.
Dann siehst Du genau, ob Dein AddIn fehlerhaften Code enhtält oder ob es magels z.B. Registrierung gar nicht erst geladen wird.

Und Debuggen geht eigentlich auch ganz einfach:
In den Projektoptionen einfach Word/Excel als 'zu startende Anwendung' angeben.

greetz
DaSchroeter

30.07.2007 - 13:34 Uhr

2 Tips hab ich noch, dann ist auch bei mir empty:

  1. Nimm das unsafe raus.
  2. Schau mal nach, ob UINT32 auch wirklich ein unsigned integer 32Bit ist. Ich hab da schon die dollsten Sachen erlebt 🙂
30.07.2007 - 13:14 Uhr

Mistsch****!
Genau sowas hab ich mir gedacht.

Werd dann wohl mal weitersuchen, ob es da einen praktikablen Workaround gibt 🙁

thnx
DaSchroeter

30.07.2007 - 13:02 Uhr

nimm statt OUT mal REF

30.07.2007 - 13:01 Uhr

Moin!

Ich verwende eher das hier um den Button hinzuzufügen.
http://msdn2.microsoft.com/de-de/library/microsoft.office.core.commandbarcontrols.add(VS.80).aspx

Das würde bei mir einem solchen Aufruf entsprechen:
CommandBarButton btn = Commandbars["Standard"].Controls.Add(...,true);

true bezieht sich hier auf Temporary. Ich setzte momentan sogar noch
btn.Temporary = true;
aber das bringt alles nichts.

Genauer: Excel/Word 2007 läuft, Excel 2003 läuft, Word 2003 lässt den Button drin 🙁

Noch ne Idee, oder schonmal was davon gehört?

thnx
DaSchroeter

30.07.2007 - 12:40 Uhr

Zu 1. kann ich erstmal nix sagen, aber zu 2.:
Du bekommst das File als Parameter in Deine Main Routine gereicht.


static void Main(string[] args){
//.....
}

30.07.2007 - 12:36 Uhr

Original von langalaxy
Bedeutet soviel wie, du legst einen Button an und der bleibt nach der Deinstallation?

Ja, aber um es klarzustellen: Der Button wird natürlich vom AddIn selbst angelegt.
Und theoretisch auch wieder entfernt. Der Uninstaller entfernt 'nur' die Registrierungseinträge.

Original von langalaxy
Wenn du den Button via CommanBar/CommandBarButton anlegst, kannst du Office mitteilen dass die CommandBar nur temporär hinzugefügt werden soll und nur in der aktuellen Instanz vorhanden ist. Vielleicht hilft dir das ja schon weiter.

Das wär genau das was ich brauche...kannst Du mir noch nen Tip geben wie ich das anstellen muss?
Ach ja: Ich verwende keine Referenzen auf die Office... DLLs. Das wird alles per Reflection erledigt: Das Abrufen der CommanBar/CommandBarButton Objekte, das Erstellen/Entfernen des Buttons,...

thnx
DaSchroeter

30.07.2007 - 12:15 Uhr

[DllImport("clallserial.dll")]
public extern static unsafe int clGetNumPorts(
            out uint numPorts); // kein pointer


uint numPorts = 0;
clGetNumPorts(out numPorts);

So sollte es aussehen

30.07.2007 - 12:07 Uhr

steht vielleicht irgendwo ein 'nullbyte' im string?
Wird 'aaaaaaa....aaa' (300 mal) auch abgeschnitten?

30.07.2007 - 11:59 Uhr

Moinsen,

hab ein kleines Problem mit meinem Office AddIn.
Vornewech: Der Installer läuft, das AddIn läuft.
Und zwar mit Word/Excel 03 und Word/Excel 07

Nun funktioniert aber der Uninstaller nicht richtig.
Ich verwende NSIS zur Erstellung der Registry Einträge
und zur Registrierung der Komponenten.

Die Office.Core Referenzen hab ich mittels Reflection umgangen.

Es werden im Prinzip nur die Einträge im Addins subkey in der Registry geschrieben.

Mit 2007 läuft auch alles prima, aber in Word/Excel 2003 bleibt der
von meinem AddIn erstellte Button (ach ja: das macht es) hängen.

Weiss jemand wo da noch überall was eingetragen wird/werden muss?

thnx
DaSchroeter

05.07.2007 - 11:27 Uhr

Dann musst Du auch diese Objekte für COM 'sichtbar' machen.
Genau wie die Klasse, die Deine COM-'Schnittstelle' bildet.

greetz
DaSchroeter

11.06.2007 - 09:47 Uhr

Zu 1. hab ich schon gefunden:
Einfach keinen Namen (leeren Namen) angeben, dann kommt (Default) oder (Standard) raus.

Zu 2.:
*PUSH* 🙂

11.06.2007 - 09:11 Uhr

Moin!

Bin grad auf zwei kleine Problemchen mit einem im Studio 2005 erstellten Setup-Projekt gestoßen:

  1. Gibt es eine Möglichkeit für einen Registry-Key (nicht Value!) den Standard-Wert zu setzen?
  2. Wie starte ich nach abgeschlossenem Setup (MSI mit /qb! gestartet) einen Link (http://...)?

thnx
DaSchroeter

18.04.2007 - 15:30 Uhr

Zum optimieren ist das zu wenig Info.
Zeig nochmal die gesamte Initialisierungsprozedur.

EDIT: Das Flush ist zwar schön, aber an dieser Stelle überflüssig, weil Du den Stream ja eh wieder schließt.

27.02.2007 - 11:40 Uhr

Was Du da gemacht hast ist nur Hin- und Herschubsen des 'Blocking Calls'.
Du blockierst den GUI Thread durch den Invoke Aufruf.

Du musst aber das Laden im (extra) Thread erledigen und die GUI nur über das Ergebnis benachrichtigen.

So sollte es gehen:


public Form1()
{
    InitializeComponent();
    Console.WriteLine("UI-Thread ist #{0}", Thread.CurrentThread.ManagedThreadId);
    Thread thread = new Thread(new ThreadStart(LoadVrmlInOwnThread));
    thread.Start();
}

delegate void VoidDelegate();

void Ready()
{
    if( InvokeRequired ){
        Invoke( new VoidDelegate(Ready),new object[0] );
        return;
    }
    Console.WriteLine("Loading ready");
}

void LoadVrmlInOwnThread()
{
    Console.WriteLine("Lade VRML in Thread #{0}", Thread.CurrentThread.ManagedThreadId);
    vrmlControl.loadFile("Gesamtlayout.wrl");
    Ready();
}

greetz
DaSchroeter

15.01.2007 - 11:58 Uhr

Warum nicht einfach so:


this.label.Height = (int)Math.Round(ns.Height);

Weil: Wenn Du mit Round arbeitest und dann immer draufaddierst, dann kann es schon vorkommen, dass sich die 'Fehlbeträge' derart aufsummieren, dass da ganze Zeilen bei zusammenkommen.

14.12.2006 - 11:14 Uhr

@herbivore: Warst schon wieder schneller 🙂

14.12.2006 - 11:14 Uhr

Hi!

Ich würde innerhalb des UserControl Click-Handler für die Label-Clicks erstellen,
die dann wiederum das Click-Event des UserControls auslösen.

Wenn Du die Click-Events im Konstruktor nach InitializeConmponents();
hinzufügst, dann müsste das auch im ComapactFramework gehen.

greetz
DaSchroeter

08.11.2006 - 08:25 Uhr

@frisch: Skin...hmmm...wenn ich dass noch wüsste 🙂 Irgendwas Vista-mäßiges 🙂 Und das Hintergrundbild: Die Google-Suche nach 'Babylon 5' bringt einiges zutage 🙂

Edit:
Hab auch erst so nen Grafik-Kram drauf, seit ich mir nen ADM64X2 mit 2GB RAM und 600GB SATA II HDs geleistet hab 🙂
Vorher war das alles schön brav ausgeschaltet 🙂

07.11.2006 - 20:23 Uhr

Hab extra mal die Symbole ausgeblendet, weil: So sollte es eigentlich aussehen 🙂

06.11.2006 - 12:47 Uhr

Hi!

Also ich würd sagen Try'N'Error 🙂
Oder Du lässt den aktuellen WebService eine DynDns Adresse mit der eigenen IP aktualisieren und connectest dorthin.

greetz
DaSchroeter

06.11.2006 - 09:28 Uhr

Mit

Main thisMain = new Main();

erstellst Du eine neue Instanz der Klasse Main.

Ich denke mal, dass dort im Konstruktor die ListBox gefüllt wird.
Aber

thisMain.listBox1.SelectedItem

ist natürlich null, da ja kein Eintrag selektiert ist.

greetz
DaSchroeter

06.11.2006 - 07:55 Uhr

Original von talla
Kannst du nicht einfach die Bitrate auslesen und aus der Dateigröße und Bitrate dann die Länge berechnen? (okay, funktioniert nur bei statischer Bitrate so einfach)

Das müsste prinzipiell auch bei VBR gehen. Muss nur (am Besten im Thread) einmal über die gesamte Datei für alle MP3 Header ausgeführt werden.
Hab das irgendwann schonmal so gemacht und das ging recht zügig.

Tipp: Bei der Gelegenheit gleich ne MD5 über den Dateinamen (und eine über die Header-Infos) und die Länge und evtl. andere Angaben in ner DB merken. Dann spart man sich den Kram in Zukunft 🙂

greetz
DaSchroeter

01.11.2006 - 15:57 Uhr

Hi!

Zuerst: Ich finde die Idee eines Wettbewerbs an sich und speziell die Aufgabenstellung sehr gut! Aus hier schon oft genannten Gründen 🙂

Ob ich mich beteiligen werde hängt ein bischen davon ab, ob ich im Nov genug Zeit habe.

Ich hätte aber noch eine Anregung:
Könnte man statt einen 'Gewinner' auszuloben vielleicht verschiedene Kategorien einführen?

Also z.B. 'Design', 'Idee', 'Coding-Style',...

Und dann für jede angegebene Lösung jede dieser Kategorien bewerten lassen?

Vorteile:

  1. Man kann genau sehen, wer in welcher Kategorie gut/schlecht ist.
  2. Man könnte über eine Gewichtung der Kategorien immer noch einen 'Gesamtgewinner' bestimmen.

Nachteil:
Ist evtl. ein wenig zu viel Aufwand für den ersten Wettbewerb.
Vielleicht für den nächsten, wenn die Beteiligung gut ist?

greetz
DaSchroeter

01.11.2006 - 13:59 Uhr

Ah..ok...dann hab ich jetzt echt was gelernt 🙂

Ich nehme hiermit alle meine (gutgemeinten, aber) unqualifizierten Bemerkungen zurück!

01.11.2006 - 13:54 Uhr

OnPaint...wieder was dazugelernt 🙂 -> Ändert aber nix, weil:

Du hast also eine Handler-Routine überschrieben. Das kann so eigentlich gar nicht funktionieren:
Das Event stammt aus Deiner Basisklasse, der Handler ist dort implementiert, das Event wird dort ausgelöst.
-> Die Basisklasse kennt Deine Ableitung ja gar nicht!

Warum machst Du nicht sowas:


this.Paint += new...

Geht das auch nicht?

greetz
DaSchroeter

01.11.2006 - 13:48 Uhr

Original von absolut
DaSchroeter:
Danke, werde mal die Registry durchforsten. Das mit dem Mini-Pop3 Client geht nicht, ich möchte die Emails im lokalen Email-Programm (bei mir Thunderbird) auswerten, und dies bei allen Email-Adressen (zur Zeit sechs Stück)

Verstehe den Zusammenhang nicht. POP3 kann doch die Mails online belassen!
Oder schreibst Du ein Thunderbird-PlugIn?
Oder geht es nur um die variablen eMail Konten? -> Importer schreiben

greetz
DaSchroeter

01.11.2006 - 13:45 Uhr

Hi!

Du kannst grundsätzlich nie von irgendwas ausgehen!

-> 5 Sekunden dauert es auf Deinem System, nicht auf jedem!
-> Wer sagt, dass der Rechner 'richtig' heruntergefahren wird!
-> Man kann Windows so einstellen, dass es schon nach 1 Sekunde alle Prozesse abschießt, wenn es herunterfahren will!
-> ....

Geht es um das Sichern von Settings? Oder Nutzdaten?
-> Erstere sollten keine 5 Sek brauchen.
-> Letztere sollten nicht erst bei Programmende gesichert werden.

greetz
DaSchroeter

01.11.2006 - 13:34 Uhr

Ähh...**On**Paint gibt es schonmal gar nicht (pfui Deulphi 🙂 ).
Paint heisst das Teil 🙂

Und dann ist das, was Du da schreibst ein Methodenrumpf -> Kein Event! Eher Handler, aber bestimmt nicht zugewiesen (Paint += new...).

01.11.2006 - 13:31 Uhr

Hi!

Ich glaube das wird vom eMail Programm in die Registry eingetragen.
Ist (dann) auf keinen fall 'sicher' -> Du bist drauf angewiesen, dass das eMail Programm da wirklich was einträgt.
Und Absender stehen da wohl eher nicht bei.

Du könntest aber nen Mini-POP3 Client schreiben, der das macht.
Gibt Classes dazu im Framework (2.0).
Oder such bei CodeProject.

greetz
DaSchroeter

01.11.2006 - 13:26 Uhr

OnPaint Methode überschrieben.

Einen EventHandler [...] für überschriebene Eventmethoden

Ich glaube hier geht was verquer 🙂

Also:
Hast Du das Event 'überschrieben'?

  • oder -
    Hast Du in Deinem Control einen Paint-Handler implementiert?
31.10.2006 - 08:56 Uhr

Meine Empfehlung:
Neues Form erstellen und eben implementieren.
Ist ja sooo viel nicht 🙂

30.10.2006 - 15:37 Uhr

Original von vicon

Original von vicon

textBox1.BackColor = Color.Green;  

hat bei mir wunderbar Funktioniert. ebenso ForeColor, BorderStyle usw

Jup, von TextBox, Button, ... aber sicherlich nicht von MessageBox 🙂
Weil: MessageBox.Show(...) erzeugt nen vordefinierten Dialog und zeigt ihn gleich an.
Und ich denke hier ist eben MessageBox.Show(...) gemeint.

greetz
DaSchroeter

[Edit]Ups, da war wieder mal einer schneller 🙂[/Edit]

30.10.2006 - 15:34 Uhr

Mal 'ne Frage:
Hast Du Pseudo-Code oder irgendwie sowas als Aufgabenstellung bekommen?
Ja? -> Poste mal!

Ich zumindest kann nicht so richtig was mit Deinem Problem anfangen 🙂

29.10.2006 - 13:28 Uhr

Die Calling Convention hat nichts (oder nicht nur) mit dem Prototypen zu tun.
Das hier sollte Dir weiterhelfen.

greetz
DaSchroeter

27.10.2006 - 15:40 Uhr

Hi!

Ist deine Connection ein Field? Oder 'nur' eine lokale Varible?
Weil wenn lokal, dann wird die Verbindung beim 'Aufräumen' der Instanz geschlossen.

greetz
DaSchroeter

27.10.2006 - 15:38 Uhr

Zur Not gäbe es ja auch noch diese Vorschau-Funktion 🙂

27.10.2006 - 13:36 Uhr

Mach das doch bitte mal mit Code-Tag klar...das kann ja kein Mensch lesen!

Edit: Na da war ich ja nicht der Erste 🙂

27.10.2006 - 13:27 Uhr

okay...ich geh mal davon aus, dass Du das hier meinst:
Arraylist le = new Arraylist();

Und dass le die Zeilen der LogFiles enthält.
Und dass Du nun einzelne 'Segmente' der Zeilen in einer Hashtable ablegen willst, um dann Summen drüber bilden zu können.

Richtig?

Dann musst Du die Zeilen erstmal zerlegen:
string[] segs = ((string)le[0]).Split(...);

Dann in die Hashtable werfen:
Hashtable ht = new Hashtable();
ht["seg1"] = segs[0];
ht["seg2"] = segs[1];
....

Oder jedenfalls so ähnlich oder so...weiss halt immer noch nicht so genau, wie du was machen willst.

greetz
DaSchroeter

27.10.2006 - 12:53 Uhr

COM allgemein: ja.
Lotus Notes: nieundnimmerwerdichbestimmtnichtwillichnixvonwissenhasseichwiediepestdankedernachfrage 🙂

27.10.2006 - 12:52 Uhr

Original von svenson
Das ist ungefähr so, als transportiert man seine Einkäufe von ALDI mit nem 16-achsigen Tieflader nach Hause....

LOL! Kann ich mir das ausborgen?
Wirklich treffend ausgedrückt! 🙂

27.10.2006 - 12:28 Uhr

Kommt halt drauf an, was Du mit den Daten machen willst:
Sind es Settings oder Nutzdaten?
Willst Du Queries drauf laufen lassen (z.B. Suchen)?

Statt dBase würd ich SqLite empfehlen, ist aber Ansichtsache 🙂

greetz
DaSchroeter

27.10.2006 - 12:25 Uhr

Hi!

Ich hab das schonmal gemacht, aber leider inzwischen den Arbeitgeber gewechselt und daher keinen Zugriff mehr auf den Code.

Aber grundsätzlich:
Thread(s) erstellen, die ein/mehrere Verzeichnisse überwachen und per Delegate deine App informieren.

Dazu:

  • Eine Liste der vorhandenen Dateien erstellen und merken.
    (evtl sichern für App-Start übergreifende Vergleiche)
  • Die aktuelle Dateiliste mit der gemerkten vergleichen.
  • Dabei auf Dateigröße und/oder Zeitpunkt der letzten Änderung achten.
  • Neue Dateien berücksichtigen.
  • Gelöschte Dateien berücksichtigen.

greetz
DaSchroeter

27.10.2006 - 12:20 Uhr

Wenn jemand die COM-API kennt, dann meldet er/sie sich schon...ein bischen Geduld bitte 🙂

Hast Du keine Beschreibung dafür gefunden?
Die Lotus Leutchen mal kontaktiert?

27.10.2006 - 12:13 Uhr

soweit so gut. aber was jetzt ? darein soll jetzt mein vector und ich hab nur die variable le, die meine daten enthält. wie soll das gehen? ich stell mir das so mit schubladen vor, aber wenn er nur einen variable hat wie soll er dann wissen wie er die aufteilt? mien lehrer hat gesagt ich soll das irgendwie mit nem switch case machen???

Logfile->ok!
Grafik->ok!
Vector->hä?
Schubladen?
Was ist denn in le? -> Wie sind die Daten da drin?

Das ist mir ein bischen zu konfus, glaub ich 🙂

greetz
DaSchroeter

27.10.2006 - 12:07 Uhr

Äh...da ist ne Datenbank fast overkill.
Vielleicht die Daten komplett im Speicher halten (List<T>) und als XML serialisieren?

27.10.2006 - 10:04 Uhr

Original von GarlandGreene
dann hat der Anwender aber bereits Daten geändert, sich mit dem Auftrag beschäftigt und Zeit vertrödelt. Da ist es tatsächlich besser, das System prüft vor Beginn der Bearbeitung, ob der Auftrag gesperrt werden kann, sperrt diesen dann und gibt erst danach die Bearbeitung frei. Eine Prüfung erst beim Speichern sorgt nur dafür, daß sich Mitarbeiter unnötig oft in die Quere kommen.

Ich meinte auch nicht automatisch beim Speichern, sondern automatisch bei der ersten Änderung 🙂