Laden...

Forenbeiträge von trib Ingesamt 708 Beiträge

16.09.2010 - 15:18 Uhr

Hallo,

es sollte eigentlich so wie du es geschrieben hast funktionieren, was ist tsmiDrucken eigentlich?

fz

Meine Glaskugel rät: ToolStripMenuItem

Worauf steht denn der Wert des tsmiDrucken Controls? Denn wenn du z.B. die Klasse mit dem Parameter initialisierst, steht dieser wie gewünscht auf "true" (Default).
Wird dann danach erst das ToolStrip initialisiert, wird das Property auf den Standardwert des Controls gesetzt und nicht auf den des Properties...

Gruß
TriB

16.09.2010 - 13:03 Uhr

Funktioniert bei mir auch nicht (mit keinem Browser). Im Gegensatz zu Bing-Instant.

Da Google die Seite automatisch von *.com auf *.de weiterleitet...

16.09.2010 - 10:22 Uhr

Guten Morgen Realnub,

ehrlich gesagt ist mir deine Anforderung noch nicht so ganz klar.
Du möchtest einen Verkauf mit dem naheliegensten Datum einer Retour verknüpfen?
Bzw. genau andersherum, damit keine Verkäufe ohne Rückgabe angezeigt werden...

Es gibt dort keine Möglichkeit das auch nur entfernt elegant zu lösen. Wie du schon selbst sagst, könnte es sein dass es 2 Verkaufs Daten zu einer Retour gibt oder andersherum.

Habt ihr jetzt ein Unternehmen, welches nur einmal pro Woche Artikel versendet o.Ä. könnte man ganz grob auf die Woche Filtern. So bekommst du auch ggf. mehrere Datensätze zu einem Zeitraum.

Gruß
TriB

13.09.2010 - 09:25 Uhr

Hallo zusammen,

MS hat mit mir den Fall gelöst. Es war die Anmeldung des SQL-Dienstes.
Mein SQL-Dienst hatte standardmäßig den "./sqladmin" eingetragen. Nach Umstellung auf mein Domänen-Benutzerkonto hat es funktioniert. (Lokaler Admin sollte ausreichen)

BTW. habe ich mich erstmal gegen eine Lösung mit der Notification entscheiden und gebe erstmal dem Polling auf eine Tabelle den Vorrang. Hat den Vorteil, das Daten, die angefallen sind während die Notifications nicht gelaufen sind abgearbeitet werden.

Gruß,
TriB

10.09.2010 - 10:29 Uhr

Auch wenn es nicht für mich war:

Vielen Dank ErfinderDesRades!!! Ein super Projekt 👍

Bin ebenfalls gerade dabei fleißig von Controls abzuleiten und mehrere Elemente auf einem Control zu vereinen. Wie man aber die Eigenschaften vernünftig manipuliert oder ergänzt war mich noch nicht so ganz klar.

Klasse Sache, dankeschön!

06.09.2010 - 13:06 Uhr

Hallo zusammen,

es wird also eine Kombination aus optischer Täuschung und bewusster Fehlinformation durch den Schatten sein.

Die verschiedenen Arten der Perspektive sollte jeder aus dem FF mit dem Beispiel eines Quaders kennen:

Geht der Würfel nun nach innen oder nach außen? 😁

06.09.2010 - 11:03 Uhr

Hallo zusammen,

endlich habe ich die Kommunikation mit der Waage geschafft.
Die ausgehenden Nachrichten waren von Anfang an im korrekten Format. Jedoch scheiterte es an einem kleine aber feinen Property.

ComPort.DtrEnable

"Data Terminal Ready" ist das Zauberwort. Dieser meldet dann im Hintergrund nach einem gesendeten Befehl, die Empfangsbereitschaft oder nach Empfang, die Bestätigung das die Kommunikation abgeschlossen ist.

Naiver Weise habe ich darauf vertraut, das dies schon über den Handshake und RTSenable geregelt wäre.
Somit hat die Waage so lange gewartet, bis sich das Programm als "frei" meldet und dann erst auf die Befehle geantwortet.

Gruß,
Thomas

06.09.2010 - 10:27 Uhr

Hallo herbivore,

in dem Screenshot von Word wurde Verdana verwendet. Also gibt es dort die entsprechenden Zeichen.
Einen Unterschied ob ich einen Button beschreibe oder im OnPaint eine Font zeichne, kann ich nicht erkennen.

Evtl. werde ich sonst dort doch ein Bild einfügen und die Zeichen anklickbar machen. Hat nur den Nachteil der Größe des Programms und ich kann keine Von-Bis Einschränkung vornehmen. Das kann ich aber auch später abfangen.

Gruß
TriB

03.09.2010 - 11:43 Uhr

Hallo The69,

also sehen möchte ich natürlich das Zeichen, was für die aktuelle Culture eingestellt ist.
Word zeigt das ja schließlich auch an. (siehe Anhang)
Wenn das nun "Verkehrt" oder unaussagekräftig ist, ist es nicht schlimm. In einem Programm muss man zur Kommunikation über eine externe Schnittstelle 2 Zeichen angeben die vor und nach dem eigentlichen Text versendet werden. Start- & Endzeichen eben.

Nun wird definiert, das es sich um das Zeichen 02 und 03 handelt. Der User klickt in das Feld, meine Form springt auf und er klickt auf das entsprechende Zeichen.

In der Ausgabe der Schnittstelle wird dies ebenfalls passend zur eingestellten Culture ausgegeben. (Externes Programm)

Das soll den Benutzer sensibilisieren, das er sich nicht jedes mal wundert was das für Kryptische Zeichen sind. Er hat sie dann ja selbst ausgesucht 😃

In der Regel gebe ich der Form dann auch nur die Zeichen mit, die man verwenden darf.
Z.B. 1-32
Die Möglichkeit von 0-255 ist eigentlich nur für eine evtl. spätere Verwendung eingebaut.

03.09.2010 - 10:02 Uhr

Hallo ihr Beiden,

danke für die schnellen Antworten!

Performance-technisch ist diese Lösung sicherlich nicht das Optimum, ganz klar.
Aber auch nachdem ich neben dem Dezimalwert auch noch den Hex-wert anzeige, startet die Form in ca. eine halben Sekunde.
Empfinde ich persönlich an diesem lahmen Rechner als unproblematisch.

Auch wenn das nur als kleines Goodie gedacht war, bin ich ja hier angemeldet um mich weiter zu entwickeln 😃
Also wie stelle ich mir deinen Ansatz vor, herbivore? Eine Picturebox, ein Raster zeichnen, die einzelnen Felder im Click-Event per Position bestimmen. Alles kein Problem, aber dann stehe ich doch wieder vor dem selben Problem mit den Sonderzeichen.

Oder soll ich gleich ein klickbares Bild nehmen?

@pogo: Das ist ein oft genutzes Tool 😃
Ein User soll später Zeilenabschlusszeichen auswählen. Dazu muss ich ihm nur eine bestimmte Auswahl von Zeichen anzeigen und diese auch direkt in das Eingabefeld übernehmen. Daher leider nicht so praktikabel.

02.09.2010 - 15:49 Uhr

Hallo zusammen,

ich möchte mir gerne eine ASCII-Tabelle anzeigen und wenn ich auf das entsprechende Zeichen drücke, soll mir der Dezimalwert zurückgeliefert werden.
Grundsätzlich kein Problem, jedoch werden mir natürlich nicht alle Sonderzeichen ausgegeben. Bei Linefeed, Carriage Return oder DEL ist das klar. Aber manche lassen sich durchaus ausgeben.
Dort müsste ich ja eigentlich mit Encoding arbeiten, dachte ich zuerst. Aber eigentlich bin ich ja schon im korrekten Format, wie man an den funktionierenden Zeichen sehen kann.

Daher die Frage: Was muss ich tun, damit die Zeichen 0-32, 141-144, usw. angezeigt werden?

In der Forensuche & bei Mr. Google habe ich irgendwie nur Typenkonvertierungen oder Bild->ASCII Konverter gefunden 8o

Der Code ist simpel wie einfach:

 private void CreateKeys(int from, int to)
        {
            int x = 0;
            int y = marginHeight;
            int duration = 1;
            for (int i = from; i <= to; i++)
            {
                Label lbl = new Label();
                lbl.Name = "lblChar_" + i.ToString();
                lbl.Text = i.ToString();
                lbl.Width = lblWidth;
                lbl.Height = lblHeight;
                lbl.Location = new Point(x, y);
                this.Controls.Add(lbl);

                Button btn = new Button();
                btn.Name = "btnChar_" + i.ToString();
                btn.Text = ((char)i).ToString();                
                btn.Width = btnWidth;
                btn.Height = btnHeight;
                btn.Location = new Point(x + lblWidth, y);
                btn.Click += new EventHandler(btn_Click);                
                this.Controls.Add(btn);

                if (duration % rows == 0)
                {
                    x += lblWidth + btnWidth + marginWidth;
                    y = marginHeight;
                }
                else
                    y += btnHeight + marginHeight;
                duration += 1;
            }
            this.Width = x + lblWidth + btnWidth + marginWidth;
            this.Height = y + lblHeight + marginHeight;
        }
26.08.2010 - 16:55 Uhr

Hallo TBR,

so etwas ähnliches habe ich auch vor längerem mal realisiert. Ich speicher die Tasten und Mausklicks. Dann kann man eine Wiederholungsrate einstellen und das Programm spielt diese dann immer wieder ab.

Oft gibt es so fiese Kopiervorgänge oder Modifikationen auf Tabellenebene, die >100 mal die selbe Aktion erfordern...

Dort ist es nun so, das man zwingend die richtigen Tastennamen benötigt und auch Shift, Alt oder Strg abfangen muss. Zwar möchtest du ungern die Tasten alle in einer Case- oder If-Anweisung durchgehen, jedoch ist das schlussendlich einfacher.

Es ist nur nötig bestimmte ASCII-Ranges abzuarbeiten.
Zwischen Zeichen 65 & 122 kannst du einfach ein char erstellen. Das ist dann von A-z.
49 - 57 ist 1-0.
Nun kannst du die restlichen Keys, die für dich von interesse sind "per Hand" abfragen und dein gewünschtes Zeichen ausgeben.


if(Enum.GetName(typeof(Keys), KeyCode) == "Delete")
						keyBuffer += "{Del}";
					else if(Enum.GetName(typeof(Keys), KeyCode) == "Insert")
						keyBuffer += "{INSERT}";
					else if(Enum.GetName(typeof(Keys), KeyCode) == "Home")
						keyBuffer += "{HOME}";
					else if(Enum.GetName(typeof(Keys), KeyCode) == "End")
						keyBuffer += "{END}";
					else if(Enum.GetName(typeof(Keys), KeyCode) == "Tab")
						keyBuffer += "{TAB}";

(Ich habe absichtlich die etwas umständlichere Variante gewählt, aber so sieht man gleich welcher Key gemeint ist)

24.08.2010 - 11:28 Uhr

Das letzte Statement lässt mein Programm einfrieren...

cmd.CommandText = string.Format("alter database  [{0}] set enable_broker WITH ROLLBACK IMMEDIATE;", DataBase, userName);

Werde damit mal etwas rumprobieren!

Bis dato habe ich noch keine Antwort von MS. Die werten noch Logs vom Profiler aus.
Soweit alles noch beim alten 😦

24.08.2010 - 11:15 Uhr

andere Daten wie Kennzeichen.

...werden automatisiert unkenntlich gemacht. Genauso wie Gesichter.
(mo# war schneller) [schon wieder ein Post...]
Auch in den USA wurden von Anfang an Gesichter und Kennzeichen unkenntlich gemacht. Aber das ist auch oftmals schiefgegangen. Die Ergebnisse werden aufgrund der schieren Menge nicht manuell kontrolliert.

@herbivore, das stimmt schon. Siehe Bielefeld 😄 Aber es waren schon viele Großstädte von Anfang an gut erkennbar.
Sicherlich geht GSV einen großen Schritt weiter aber die Digitalisierung ist in allen Bereichen kaum aufzuhalten. Da finde ich so Sachen wie ELENA schlimmer!

Leider habe ich immer öfter das Gefühl, das irgendwelche Politiker sich wichtig machen wollen ohne sich genug in das Thema eingearbeitet zu haben. Ähnlich Frau von der Leyen bei der Stopp-Schild Debatte, die nun auch sang & klanglos untergegangen ist.
Willkommen bei der Polemik...

24.08.2010 - 09:49 Uhr

Guten Tag zusammen,

jedes Mal frage ich mich bei den Diskussionen über Street View:
Wo waren die Marktschreier bei Google Earth? Dort hat niemand sich aufgeregt, das man in den Garten schauen kann. Das die Stadt die Dachfläche & Bebauungsfläche neu berechnen kann. Griechenland aktuell nach Pools im Garten sucht (Pool-Steuer), usw.

Dort waren alle begeistert und fanden es toll, dass man bei der Routenberechnung auch Gebäude sehen konnte. Oder man sein Urlaubsziel im voraus inspizieren konnte.

Kaum geht Google einen Schritt weiter regen sich alle auf. Gerade die Politiker, die immer wieder bestätigt haben, dass sie sich vorher nicht (ausreichend) informieren schreien am lautesten.

Generell halte ich GSV für eine nette Sache. Die Navigation wird mit echten Bildern revolutioniert. Die Suche nach Gebäuden, U-Bahn Haltestellen oder anderen POI´s wird vereinfacht. Wer ein Problem hat, das sein Haus (Was jeder von der Straße aus sehen kann) im Internet zu sehen ist, kann es verpixeln. Reicht doch imho aus...

Klar schafft sich Google damit ein riesen Kapital und wahrscheinlich ist es nichtmal geplant in absehbarer Zeit Geld mit GSV zu verdienen. Aber man muss sich vorstellen, das Google so viel Gewinn macht, dass die nicht wissen wohin mit der Kohle. Da werden auch mal Millarden jedes Jahr in YouTube gesteckt, ohne das ein Cent dabei herauskommt. Zukunftsorientiert haben sie aber ein unglaubliches Grundkapital geschaffen und lagern das Geld "auf der Hohen Kante". So stell ich mir das mit GSV auch gerade vor 😃

17.08.2010 - 08:39 Uhr

Es ist so wie erwartet:
Auf dem 2005er Server den Service Broker gestartet, den Server im Programm geändert und es funktioniert.
Selbiger Code auf 2008 klappt nicht.

So wie ich das sehe ist das ein MS Problem. Dann sollen die sich darum kümmern 😃

16.08.2010 - 15:49 Uhr

Hey denkt an die Firewall 🙂

Die sollte bei der 127.0.0.1 keine Rolle spielen 😁
Bzw. hätte es dann bei FZelle vorher auch nicht funktionieren dürfen.
(Wie er gerade selbst bestätigt)

Werde nun mal einen Test auf SQL2005 fahren. Wenn das dort Problemlos hinhaut, gibts nen Call bei MS.

16.08.2010 - 13:44 Uhr

Hallo Lennart,

erstmal vielen Dank für den Link. Dort steht ja einiges drin 😃

(Hab selbst schnell geschaut:
>
)

Ansonsten:

  • haste mal auf dem SQL Server beim Service Broker geschaut ob die Registrierung deiner Anwendung klappt?
  • Sonst keine Exceptions beim Ausführen des Codes?

Es gibt anscheinend mehrere SQL-Befehle, die den Broker aktivieren, den Port mitgeben, dessen Endpoint oder die Authentificationsarten setzen.
Dort habe ich nun so einiges ausprobiert, ohne Erfolg.
Mittlerweile steige ich dort auch immer weniger durch, habe ich das Gefühl 😦

Starte ich nun meine Anwendung mit dem Standardport (1433) bekomme ich keine Exception, der User ist in der Session-Tabelle zu finden und dessen GUID ist unter der Datenbank/Service Broker/Dienste im MgtStudio zu finden.

Erscheint mir als funktionstüchtig soweit. Ändere ich z.B. den Port auf einen selbst definierten Endpoint, so bekomme ich gleich eine Exception "Fehler während des Anmeldevorgangs".

Gefühlt, habe ich nun das gesamte Internet abgesucht und lande immer wieder bei den selben Tutorials, die ich penibel befolgt habe.

So langsam mache ich mir schon über eine Alternative Gedanken, aber es ist äußerst unschön aktiv die Tabelle alle paar Sekunden auf eine Veränderung zu überprüfen 😦

12.08.2010 - 12:40 Uhr


>

Hallo Viper78,
danke für deinen Tipp, aber den Broker habe ich bereits aktiviert.
Auch die anderen Voraussetzungen für den SQL-Server sollten soweit gegeben sein.

12.08.2010 - 11:44 Uhr

Das war eigentlich nur zu Testzwecken, ob das command überhaupt ausgeführt werden kann.
Habe es mal komplett auskommentiert, damit das ExecuteReader() dem Ganzen nicht in die Quere kommt.. Also gibt es nur noch die Zuweisung:

[...]
            command = new SqlCommand(SqlStatement, connection);
            SqlDependency.Start("Data Source="+DataServer+";database="+DataBase+");
            SqlDependency dependency = new SqlDependency(command);
            dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

So wird doch die Verbindung samt SQL-Statement an das dependency übergeben und das Event registriert. Genauso wurde das auch in den beiden oben genannten Tutorials gemacht.

Leider immer noch kein Event. SQL-Seitig führe ich die Änderung an der Tabelle direkt aus und nicht über Stored Procedures o.Ä.

12.08.2010 - 11:06 Uhr

Hallo FZelle,

den Code habe ich gerade etwas überarbeitet. Es war noch eine Klasse dazwischen, welche mir die Variablen gefüllt hat.

Prinzipiell übergebe ich den Verbindungsstring aus DataServer und DataBase.
Das Select Statement stellt dann die letztendlich zu überwachende Tabelle dar.

Ein Zugriff ist möglich, da die Funktion Message mir jedes mal brav einen Wert liefert.
(Die Funktion macht nichts anderes als ein Console.WriteLine, was demnächst dann in ein ErrorLog geschrieben wird)
Das Event wird aber nie ausgeführt.

Hoffe nun ist es klarer 😃

12.08.2010 - 08:55 Uhr

verwendetes Datenbanksystem: SQL 2008 Prof.

Guten Morgen zusammen,

ich möchte gerne eine Tabelle auf neue Datensätze überwachen und habe relativ schnell SQLDependency gefunden. Zuerst habe ich per Management Studio den ServiceBroker für die Datenbank aktiviert.
Dann habe ich den Code aus der MSDN kopiert (zumindest was nötig war).
Als dies noch nicht funktioniert hat, habe ich nach weiteren Tutorials gesucht und meinen Code abgeglichen bzw. ersetzt. Leider ohne Erfolg.

Eine Verbindung zur Datenbank kann ich auf jeden Fall aufbauen und auch Datensätze einfügen.

Variablen:


public void Inspection_Start()
{
            DataServer = @"127.0.0.1,1433";
            DataBase = @"Demo Database";
            SqlStatement = "SELECT [timestamp]" +
                              ",[EntryNo]" +
                              ",[Status]" +
                              "FROM [dbo].[Test$Queue]";

          connection = new SqlConnection("Data Source="+DataServer+";database="+DataBase+");
            connection.Open();
            command = new SqlCommand(SqlStatement, connection);
            command.Notification = null;

            SqlDependency.Start("Data Source="+DataServer+";database="+DataBase+");
            SqlDependency dependency = new SqlDependency(command);
            dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

            //Testausgabe ob die Verbindung funktioniert
            string ev = "";
            using (SqlDataReader rdr = command.ExecuteReader())
            {
                while (rdr.Read())
                {
                    ev = rdr.GetInt64(1).ToString() + " " + rdr.GetString(2);

                }
            }
            Message("Letzte Zeile: " + ev);
}

Das Event:

private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            Message("Daten wurden geändert...");
            Message(string.Format("{0} {1} {2}", e.Source, e.Type,e.Info));
        }

Leider passiert einfach nix 😦

Muss ich noch mehr Einstellungen am SQL-Server vornehmen? Oder gibt es ein Problem mit dem SQL2008? Die meisten Tutorials gelten schließlich für '05.

Gruß,
TriB

EDIT: Die ersten beiden Codes zusammengeführt und angepasst.

23.07.2010 - 12:17 Uhr

Und schon wieder mal was von mir.
Die o.g. Problem habe ich nun behoben. Ziemlich dreckig aber es läuft.
Damit ich wieder in den richtigen Haupt-Thread zurückgelange schieße ich den anderen mit einem Dispose() ab.
Finde ich zwar äußerst fies, aber es funktioniert.

Nun habe ich meine eigentliche DLL, die sich um alle Einstellungen des COM-Ports kümmert fertig.
Eine Vielzahl von Geräten habe ich schon erfolgreich getestet.

Die oben bereits angesprochene Waage funktioniert aber immer noch nicht.
Es existiert ein ziemlich verbugtes Programm, welches sich momentan um die Abfrage von Gewichten kümmert. Dank des "Free Serial Port Monitor"´s konnte ich jegliche Kommunikation zur Waage auslesen.
Diese ist 1:1 identisch mit meinen Verbindungseinstellungen und dem Befehl zum versenden des Gewichtes ebenfalls.

Einzig der Handshake wird nicht angezeigt. (Habe einfach mal nacheinander alle durchgetestet). Die mäßige Doku sagt aber, dass die Waage alle Arten unterstützt.
Die Zeilenendzeichen schicke ich als HexCode mit (0D 0A), denn WriteLine hat nur ein Zeichen mitgesendet.
Die Übertragungsart Text ist ebenfalls fehlgeschlagen. Dort liefert Environment.NewLine meine passenden Zeichen.

Nun habe ich quasi alle Kombinationen von Einstellungen und Übertragungsarten durch und bin am Ende meines Lateins angekommen.
Hat irgendwer noch eine Idee, sei sich noch so verrückt?

Gruß,
TriB

22.07.2010 - 14:07 Uhr

Hallo Mighty Panther,

hast du mal auf deinen Webservice Verweis mit der rechten Maustaste geklickt und "Verweis aktualisieren" ausgewählt?
Dann sollte sich die Klasse Updaten und schon im Visual Studio alle Unterschiede/Kollisionen rot unterlegen. Geänderte Klassennamen, Typen, ect.

Es müssen ja nicht alle Änderungen offensichtlich sein. Evtl. wurde der Typ irgendeines Parameters geändert. Das sieht man dann nicht sofort.

Der Webservice Funktioniert in der Regel so lange, selbst mit Veränderungen der Programmierung, bis ein direktes Problem auftritt. Denn die Klassen werden in dem Moment modelliert, in dem du den Webverweis hinzufügst oder aktualisierst.
Wird nun eine Funktion gelöscht, die du nie benutzt wirst du das garnicht mitbekommen.
Benutzt du aber eine Funktion oder ein geändertes Parameter, meldet dies der Webservice über eine SOAP Nachricht.

Gruß
TriB

21.07.2010 - 08:52 Uhr

OK, Step 1 habe ich soweit abgeschlossen!

Nun habe ich ein ganz anderes Problem!

Und zwar warte ich auf das DataRecive-Event und möchte dann den Rückgabewert verarbeiten und die Form schließen.
Jedoch friert das Programm ohne jegliche Meldung ein.

DataRecive:

if (txtKeyNumber.InvokeRequired)
                    txtKeyNumber.Invoke(new EventHandler(delegate { txtKeyNumber.Text = dataToRecieve + msg; }));

Und dann habe ich im txtKeyNumber_TextChanged Event die Überprüfung eingebaut.
->Ich weiß, alles andere als elegant aber nun sollte ich mich doch wieder im richtigen Thread befinden, oder?
Es dauert ewig lange bis nun die Textbox gefüllt wird und dann steht das Programm einfach.

Das kann doch nicht so schwer sein von dem DataRecive-Event in den Haupt Thread zurück zu kehren 😦
Bzw. meine ich, hat das am Anfang auch noch ohne Invoke funktioniert...

EDIT:
Also ich konnte das Problem nun eingrenzen. Schuld ist einzig das this.Close().
Das gibt einen Threadübergreifende Exception. Ist ja auch logisch!
Nun versuche ich das abzufangen und das Programm bleibt hängen:

if (this.InvokeRequired)
                    this.Invoke(new MethodCloseProgram(CloseProgram));
                else
                    this.Close();

private delegate void MethodCloseProgram();

 private void CloseProgram()
        {
            this.Close();
        }

Keine Ahnung warum das nicht fuktioniert. Es wird auch das FormClosing Event durchlaufen, die Form bleibt aber stehen und lässt sich nicht mehr bedienen 😦

19.07.2010 - 16:03 Uhr

Meine Vorschläge schon mal probiert?

Nein, da habe ich glatt drüber gelesen 😁

Dein Template habe ich schon vor längerem runtergeladen und auch damit schon getestet. Damit bekomme ich überhaupt keine Rückmeldung. Egal was ich einstelle und egal was ich mit und ohne Endzeichen verschicke. das Output-Feld bleibt immer leer 🙁

Oha!!! Wärend ich gerade getippt habe, dachte ich: Versuchst du doch mal in meinem Tool (habe da quasi jeden Parameter über eine Einrichtung zu setzen und eine Menge Hex2Ascii, Ascii2Ansi Funktionen integriert).

Und siehe da: Gebe ich ein "0D" mit, bekomme ich auch brav eine Antwort!
Zwar weiß ich jetzt noch nicht was ich damit anfangen kann, da die Rückgabe z.B. so aussieht: "09 30 23 00 20 FF 40 00 10 95" und eine Übersetzung per Ascii-Tabelle ein grauenhaftes Ergebis liefert, aber das soll ein anderes Problem sein 🙂

Meine Waagen-Problematik werde ich am Donnerstag angehen. Dort mag auch dein Entscheidender Tipp mit dem Endzeichen das Problem sein!

Merci!!!!

19.07.2010 - 14:44 Uhr

Ja klar. Das habe ich alles schon versucht.
Von dem einen Gerät habe ich ja bereits alle möglichen Datenblätter. Ich weiß welchen Code ich versenden muss und was dann als Ergebnis zurück kommen müsste.
(Das ist leider eine sehr große Waage, die ich nicht hier vor Ort habe).
Per Hyper Terminal funktioniert es auch, nur per SerialPort in C# nicht.

Das Screenshot oben stammt von einem RFID Lesegerät. Wie ich mittlerweile herausgefunden habe, scheint es sich dort aber "nur" um ein Konvertierungsproblem zu handeln.

19.07.2010 - 11:05 Uhr

Hallo zusammen,

bei einem Modell bin ich nun einen kleinen Schritt weiter.
Anscheinend wird hier garnicht dauerhaft ein Ergebnis gesendet, sondern das mitgelieferte Programm sendet alle paar Sekunden eine Anfrage. Dies würde natürlich erklären warum da nix ankommt.

Dank dem super Programm "Free Serial Port Monitor" kann man im Hintergrund alle mit Loggen. Daher sehe ich folgende ein und Ausgaben: (Siehe Dateianhang)

Jedoch bin ich mit noch nicht ganz im klaren darüber, wie ich das ganze zu konvertieren habe um die Befehle selbst abzusenden. Sieht ein bisschen willkürlich aus was dort gesendet und empfangen wird.
Bis zu der Stelle, an der die 2 Zeilen zurückgemeldet werden macht das Programm nix.
Die 2 Zeilen sollten 08000000200173200307 zurückliefern...

Schicke ich manuell 03 14 01 16 hin, bekomme ich "6C 88" zurück.
Alles äußerst konfus 8o

19.07.2010 - 08:54 Uhr

Guten Morgen Community,

mir ist bewusst, dass es schon unzählige Threads bzgl. COM gibt.
Die habe ich jetzt auch mehr oder weniger alle gelesen... 😃

Die "normale" Kommunikation funktioniert in meinem Projekt wunderbar.
Z.B. Schicke ich dem Gerät ein Zeichen und bekomme eine Antwort zurück.
Manche Geräte liefern auch einfach nur ein Echo.
Dann habe ich Geräte, die aktiv von sich aus Daten senden. Dort sieht es dann schon wieder ganz anders aus.

Ein Barcode Scanner klappt ebenfalls wie gewünscht, jedoch habe ich nun 2 Geräte die absolut kein Feedback geben wollen.
Von einem habe ich sogar die gesamte Dokumentation mit Beispielen usw.

Hyper Terminal zeigt mir auch brav die Daten an, nur sträubt sich mein comPort_DataRecided() Event.

Im Konstruktor setze ich die etlichen Einstellungen und weise das Event zu:

comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);

Das Event selbst wir dann garnicht erst ausgeführt:

 void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {            
              string msg = comPort.ReadExisting();
        }

Irgendwie verstehe ich das Ganze nicht. Bei vielen Geräten klappt es genau so und manche schreiben in HyperTerminal die Seiten voll und nix kommt in C# an.

Hatte Jemand schonmal ein ähnliches Problem?

Gruß,
Thomas

01.07.2010 - 10:19 Uhr

Hallo dilsemann,

am einfachsten macht man es wie hier:
Im Forum nachsehen was es so schönes gibt, und dann den Links folgen 😃
Ein gutes Forum ist z.B. http://www.pocketpc.ch/

Der Vor-Nachteil von WM ist eben, das es die Programme überall frei im Internet verstreut sind.

01.07.2010 - 09:56 Uhr

Hallo zusammen,

ich versuche mich auch fit zu halten. Dazu gehe ich 1-2 mal die Woche Joggen.
(Einmal im Jahr vor ner Art Wettkampf auch 5x die Woche).
Dann geht es 2x die Woche zum Judo (Kombination aus Kraft- und Ausdauertraining).
Zu guter Letzt alle paar Woche Squash oder Fußball.

Skaten und Radfahren, wie es gerade so passt.

BTW. das Gute alte Klischee mit dem ITler der im Keller unter Neonlich, der seine Tastatur auf dem Wanst ablegt, ist schon lange passé.
Mittlerweile kenne ich fast nur Programmierer, die Sport in irgendeiner Form betreiben.
Vom Tischtennis bis zum Triathlon 😃

05.05.2010 - 10:41 Uhr

Hallo zusammen,

ein bisschen kann ich telnet schon beipflichten.
Aktuell habe ich ebenfalls ein Problem mit einer Seriellen Schnittstelle. (Historische Gründe halten mich von einer Abkürzung durch doppel-S ab...^^)

Hyperterminal zeigt brav Werte im Dauerversand an.
Verbinde ich meinen Port mit den identischen Einstellungen, so passiert nix.
Mittlerweile habe ich etliche Einstellungen & Konfigurationen in das Programm eingebaut (Handshake, encoding, RTSenable, Zeilenendzeichen, usw.). Leider ebenfalls ohne Erfolg.

Mit anderen Geräten funktioniert es wunderbar. Ob per Send() oder Polling der Daten.

Gibt es noch irgendein Kennzeichen welches Hyperterminal setzt?

Gruß
TriB

03.05.2010 - 16:18 Uhr

Hallo zusammen,

mal was ganz anderes:
Wenn es nun "nur" noch Phone 7 gibt, was passiert mit den ganzen MDE-Geräten???
Wird doch noch eine Embedded/CE Version am Leben gehalten oder kann ich bald meinen Scanner an Facebook knüpfen? 😄

Der Übergang zwischen MDE und Handy verläuft mittlerweile fließend. Da würde ich gerne mal wissen, was MS sich dafür ausgedacht hat.

06.04.2010 - 11:36 Uhr

Daß es 'große' Programme vormachen, macht das ganze allerdings nicht besser 8)

Es muss ja auch jeder sein eigenes Rad neu erfinden^^

Eine Kombination aus beidem könnte doch die Lösung darstellen. Anstatt das XML-Dokument zu sperren legt man eine eigene Datei an. Ist diese bei einem Programmabsturz immer noch vorhanden, prüft man auf die Erstellungszeit und löscht diese ggf.

So hat man nicht das von KenchU beschriebene Problem die Datei per Hand löschen zu müssen.

Sicherlich alles andere als schön aber die Alternativen die mir sonst einfielen:1.Der letzte der auf Speichern Drückt gewinnt (wie bei z.B. MS Access) 1.Einer sperrt nur seinen Datensatz, die anderen bekommen eine Meldung das dieser noch bearbeitet wird (RowLock)

Gruß TriB

24.03.2010 - 09:36 Uhr

Wie Ihr schon angesprochen habt, wollen die Hersteller alle wieder weg von einem Standard (Java).
Darin sehe ich ebenfalls ausschließlich Nachteile. Der einzige Vorteil liegt auf Seiten des Herstellers, der nun kontrollieren kann welche Software installiert ist und eine nette Marge vom Verkauf über seinen Shop zu erwarten hat.

Die Frage ist aber: Warum ist das so? Java stirbt aus. Nun muss eine Alternative her. MS möchte sein .NET Framework nach vorne bringen (obwohl beim 7Phone XNA noch zusätzlich von nöten ist). Diese ist aber genauso wenig Plattformübergreifend wie bei Apple. Von MONO mal abgesehen.

Keiner würde je dem anderen nachgeben. Das ist wahrscheinlich auch der Grund, das Nokia Unmengen an Geldern in neue Plattformen investiert, die auf Linux basieren (Weg von Symbian).
Im Moment streuen alle wieder auseinander um wahrscheinlich, nachdem sich ein Monopol auf ein System gebildet hat, ein oder zwei neue Standards bilden.

Palm scheint es gerade nicht zu schaffen sich wieder zu etablieren, auch wenn sich die Funktionen wie Zucker lesen und Blackberry lebt fast nur noch ausschließlich von seinen Geschäftskunden.

Ich glaube, das natürlich das iPhone und eine weitere Plattform das Rennen machen werden (imho aber nicht WinPhone sondern eher Android) Der Rest wird sich wieder im "Nicht-Touchscreen" oder "Nicht-Smartphone" Segment ansiedeln.

Ein unausweichlicher Trend wird dann aber das Hacken der Firmwares werden. Die Community hackt zum einen mittlerweile alles, zum anderen demonstriert sie damit ihren Unmut über fehlende Funktionen und die Bevormundung durch die Konzerne.
Das zusammen gibt sicherlich eine gute Mischung, bei der Jeder >>sein<< OS finden wird 😃

22.03.2010 - 12:13 Uhr

Hallo zusammen,

als WM6.5 User war ich ziemlich geschockt als ich gelesen habe was alles WP7 nicht kann.
Die Idee einer kompletten Neuentwicklung war langsam nötig. WM baute immer noch auf einer embedded Lösung auf und wurde von Version zu Version weiter verbastelt.

Das Grundkonzept halte ich zwar immer noch für vernünftig (.Net Framework, unterstützung zwischen den Versionen, ect.) jedoch ist das OS in Sachen Geschwindigkeit und Fingerbedienung am Ende des Lebenszyklusses angekommen.

Was liegt dann näher als WIN7-mäßig einen Neuanfang (nur ohne die Beta, also Vista) zu starten. Das man aber die Funktionen, weswegen man sich für WM und nicht Apple, Android, Symbian oder Palm OS (gibt ja noch etliche mehr...) entscheidet.

Dazu kommen noch das Design, was ich total langweilig finde. Schwarzer Grund, weiße Schrift. Toll, willkommen im DOS mit Multitouch 👍

Zuerst dachte ich, das ist eine riesen Finte um der Konkurrenz dann überraschend am release Tag zu zeigen wo MS den Hammer versteckt hat. Aber die SDK zeigt mir, das es nicht so ist.

Dumm gelaufen, damit gibt es dann bald nur noch das iPhone und Android...

08.03.2010 - 15:59 Uhr

Sehe ich genauso, ist aber nicht Teil des Threads 😉

Wie schon erwähnt wurde, macht es Sinn das iPhone auch bei T-Mobbel zu kaufen. Ein Kollege hat ein gebrauchtes gekauft und war nicht in der Lage dafür einen passenden Flat-Vertrag zu finden. Weder bei O2, noch bei T selbst.
Schlussendlich hat er nun einen neuen Vertrag mit dem 3Gs abgeschlossen...

Mit einer 300MB-Flat, die bei jedem anderen Telefon völlig ausreicht, sollte man beim iPhone auch vorsichtig sein. Das kommuniziert so viel von allein, das man auch ohne aktives Surfen in den Bereich jenseits der 500Mb kommen kann.

08.03.2010 - 15:39 Uhr

Wahrscheinlich ist es einfacher die Funktionen einer Eingabeaufforderung in einer Windowsform nachzubilden und dann dort zu zeichnen, als die Konsole irgendwie zu manipulieren.

Bzw. gibt es massig fertige Projekte, die eine CMD darstellen. Also würde ich es so probieren...

02.03.2010 - 09:27 Uhr

Mal eine blöde Frage:

Wie zeigst du das Excel-Sheet überhaupt an? Wenn ich per Navigate() einen Pfad zu einer Excel-Datei angebe kommt jedes Mal der "Speichern unter"-Dialog.

Es gab mal ein Control, welches alle Office Dokumente einschl. 2007 anzeigen konnte. Dies war aber leider nur im Beta Status und flackerte extrem, wenn man damit arbeiten wollte. Nannte sich AxDSOFramer Control.

Gruß
TriB

01.03.2010 - 11:50 Uhr

Hallo shainsen,

in der Regel reicht es aus, wenn die DLL im selben Ordner wie das Programm liegt.
Du kannst bei deiner Installationsroutine die DLL hinzufügen. Dann wird diese zum einen automatisch mit kopiert und zum anderen auch im System vernünftig registriert.

Einfach das Installations-Projekt auswählen und per Rechte Maustaste -> Hinzufügen -> Assembly die DLL auswählen.

Gruß
TriB

26.02.2010 - 09:34 Uhr

Hallo zusammen,

also ohne die Daten zwischen dem Server und den Empfangsgeräte zu bearbeiten, halte ich das nicht für möglich.
Dein Browser sendet einen Request. Dieser wird verarbeitet und ein Respone zurück gesand. Nun müsste man diesen Response abgreifen, bevor dieser von deinem Anbieter an dich weiter geroutet wird. Und das halte ich ohne eigenen Server (_Im Internet und nicht Zuhause, natürlich _ 😁 ) o.Ä. für nicht möglich.

Man kann sicherlich auch 2 Response abschicken und dann von jedem Request nur die Hälfte abgreifen aber deine Leitung wird dann sogar mit dem doppelten Traffic belastet.

Meine Empfehlung wäre auch wie von Campac68 vorgeschlagen z.B. einen Messanger über die eine und den Browser über die andere Leitung zu schicken.

UMTS oder HSDPA gibt es bei euch auch nicht?

Gruß
TriB

24.02.2010 - 15:42 Uhr

Danke, das hat mir absolut weitergeholfen:


>

Ist auch quasi das, was Th69 meinte. Den Code von dN!3L hatte ich ja ähnlich schon, nur noch nicht so umfangreich.

Jetzt kann ich den Prozess, die Anwendung und das aktive Fenster schließen:
Hat alles in vielen Fällen eine unterschiedliche Auswirkung.


public bool ProzessBeenden(string Processname)
        {
            foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcesses())
            {                
                if (process.ProcessName == Processname && analogy || process.ProcessName.IndexOf(Processname) > 0 && !analogy)
                {
                    KillProcess(process);
                    return true;
                }                
            }
            return false;
        }

 public bool AktivesFensterBeenden()
        {
            IntPtr hwnd = Win32.GetForegroundWindow();
            KillProcess(GetProcessByHandle(hwnd));
            return true;
        }

       public bool AnwendungBeenden(string Anwendungsname)
        {
            int nDeshWndHandle = Win32.GetDesktopWindow();
            int nChildHandle = Win32.GetWindow(nDeshWndHandle, Win32.GW_CHILD);

            while (nChildHandle != 0)
            {
                 [...]
            }
        }

private void KillProcess(System.Diagnostics.Process process)
        {
            if (!process.CloseMainWindow())
            process.Close();

            process.WaitForExit(1000);
            if (!process.HasExited)
            process.Kill();
        }

(AnwendungBeenden ist etwas länger, daher habe ich die mal etwas beschnitten)

Vielen Dank an alle 👍

24.02.2010 - 13:53 Uhr

Hallo dN!3L,

danke für deine Antwort.

Das beenden per process.Kill oder process.Close ist kein Problem. Jedoch bin ich dann auf den Prozessnamen angewiesen, der bei mehreren Programmen gleich ist.
z.B. WINWORD.exe

Kill ich diesen Prozess, so weiß ich nicht welches Dokument ich schließe.
Daher möchte ich lieber den Window Handle "Neues Dokument - Microsoft Word" beenden. Das geht aber leider nur imho per:

SetForegroundWindow(Handle);
System.Windows.Forms.SendKeys.SendWait("%{F4}");
24.02.2010 - 11:29 Uhr

Mahlzeit zusammen,

wie man ein externes Programm schließen kann stellt eigentlich kein Problem dar.
Es gibt mehrere Möglichkeiten, den Prozess oder das Fenster killen.

Nun möchte ich quasi die eierlegende Wollmilchsau, die beide Arten unterstützt 😁

Wenn man per process.Kill() arbeitet, ist es egal ob das Programm gerade arbeitet, weitere Fenster geöffnet hat o.Ä.

Möchte man aber z.B. eine bestimme Instanz eines Programms beenden, reicht der process.Name nicht aus. Da sucht man dann nach dem Window Handle.
Ansich auch kein Problem, jedoch gestaltet sich das beenden dann etwas schwieriger:

Ein SendKeys.Send("%{F4}") ruft ggf. eine Fehlermeldung hervor. Also SendKeys.SendWait benutzen und in einen eigenen Thread auslagern. Das Problem an der Sache ist aber, dass das zu schließende Programm noch einen Dialog offen hat. Dann wird nur dieser geschlossen 🙁
Wie kann ich das einigermaßen elegant lösen?

Gruß
TriB

17.02.2010 - 10:27 Uhr

Da empfehle ich doch gleich mal die MS SQL Reporting Services.
Ist beim SQL Server dabei, wenn man vorher den IIS installiert hat. Erstellt werden die Reports mit Visual Studio.
Diese können auf einem Server öffentlich abgelegt und per Active Directory verwaltet werden.

Integration in C# ist ebenfalls einfach möglich (Auch wenn du das nicht willst 😉 )

Erstellt werden können die Reports per Wizard. SQL Kenntnisse erleichtern einem aber je nach Anforderung das Leben.

Gruß
TriB

10.02.2010 - 09:59 Uhr

Hallo zusammen,

tja wer kennt das nicht mit dem Brett vor dem Kopf...
Als ich noch geraucht habe war es ganz praktisch mal vom Schreibtisch weg zu kommen und an die (zweifelhafte) frische Luft zu gelangen. Das reicht oftmals schon aus um selbst auf den Trichter zu gelangen.
Wenn nicht, tritt das von Single Malt beschriebene Prinzip ein. Man quatscht mit anderen darüber und während man erklärt passiert das ach... SO könnte das doch gehen Phänomen 🙂

Nun gehe ich einfach nen Kaffee holen und quatsche kurz mit Kollegen. Da fehlt zwar der Sauerstoff, es klappt aber auch ganz gut.

Blöd ist immer nur am Ende des Tages, wenn man Revue passieren lässt was man den ganzen Tag gemacht hat -> Fehlersuche... 8o

02.02.2010 - 12:03 Uhr

Hi,

also ich habe das wie folgt gelöst:
(Der Code stammt zum teil von Dreamin Code, zum Teil auch aus anderen Quellen die ich leider nicht mehr alle nachvollziehen kann)

void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            switch (CurrentTransmissionType)
            {
                case TransmissionType.Text:
                    //read data waiting in the buffer
                    string msg = comPort.ReadExisting();
                    //display the data to the user
                    DisplayData(MessageType.Incoming, msg);
                    break;
                case TransmissionType.Hex:
                    int bytes = comPort.BytesToRead;
                    byte[] comBuffer = new byte[bytes];
                    comPort.Read(comBuffer, 0, bytes);
                    //display the data to the user
                    DisplayData(MessageType.Incoming, ByteToHex(comBuffer));
                    break;
                default:
                    string str = comPort.ReadExisting();
                    //display the data to the user
                    DisplayData(MessageType.Incoming, str);
                    break;
            }
        }

Die Funktionen machen dann dies:


private string ByteToHex(byte[] comByte)
        {
            StringBuilder builder = new StringBuilder(comByte.Length * 3);
            foreach (byte data in comByte)
                //convert the byte to a string and add to the stringbuilder
                builder.Append(Convert.ToString(data, 16).PadLeft(2, '0').PadRight(3, ' '));
            //remove last ' '
            builder.Remove(builder.Length - 1, 1);
            //return the converted value
            return builder.ToString().ToUpper();
        }

01.02.2010 - 13:14 Uhr

Hallo Doltsche,

unter DreaminCode gibt es ein nettes Tutorial, Hauptaugenmerk solltest du auf den folgenden Punkt setzten:

You will notice in this method we call three methods:

    * HexToByte
    * ByteToHex
    * DisplayData

Anhand dieses Tutorials habe ich ein ComPort verarbeitendes Programm geschrieben, das man vollständig konfigurieren kann und die Ergebniswerte fast unbegrenzt konvertieren kann. Leider ist nur die Schnittstelle in C# gelöst, daher kann ich dir keinen Code zur Verfügung stellen.

Hoffe so bringt dich das aber schon weiter!
TriB

01.02.2010 - 13:05 Uhr
DateTime lastDay = firstDay.AddDays(-1);  

Das ist allerdings nur der letzte Tag des Vormonats. Um die des aktuellen Monats oder anderer Monate zu erhalten muss man vorher per AddMonth(+-X) den Monat manipulieren.

Persönlich habe ich mir angewöhnt den 31.12. per Hand zu programmieren. Denn dort kann ggf. der Jahreswechsel zu ungewollten Ergebnissen führen.

Gruß
TriB

26.01.2010 - 11:02 Uhr

Hallo Funnygamer,

eine detailliertere Nachricht bekommst du, wenn du die Exception selbst abfängst.
Das solltest du imho sowieso tun, da es immer wieder vorkommen kann, das ein anderes Programm den Port sperrt.

Einfach einen try-catch Block einbauen und schauen was dieser als Nachricht liefert.
Welches Programm aber nun auf den Port zugreift, bekommst du so aber nicht raus.
Vielleicht ist der Port Hardwaremäßig auch für Fremdanwendungen gesperrt?!?

try
            {
                if (comPort.IsOpen) 
                        comPort.Close();
                comPort.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

Gruß TriB