Laden...
B
Borg myCSharp.de - Member
Berlin, Germany Dabei seit 23.08.2006 1.529 Beiträge
Benutzerbeschreibung

Forenbeiträge von Borg Ingesamt 1.529 Beiträge

11.05.2007 - 14:07 Uhr

Die gedachte Verwendung dieser Methoden ist, sie den Cursor beim Eintritt auszublenden und beim Austritt wieder anzuzeigen. Deshalb werden die Aufrufe auch bilanziert.
Im Mausklick machst du doch bestimmt noch irgendwas anderes. Dann blendest du den Cursor beim Start aus und beim Beenden wieder ein. Das Control, bei dem er sichtbar sein soll, sollte beim Enter die alte Cursorform speichern, das Kreuz einstellen und den Cursor sichtbar schalten. Beim Leave entsprechend wieder ausschalten und den alten Cursor setzen.
Du verschränkst hier die Aufrufe der Methoden und bekommst daher Probleme.

Trotzdem frage ich mich, wozu du den Cursor bei einem Klick ausschalten willst.

10.05.2007 - 13:26 Uhr

Du kannst auch die BigInteger-Klasse von J# verwenden. Die ist bei jedem Framework dabei.

10.05.2007 - 13:13 Uhr

Zumindest im WinAPI war es so, dass der Cursor nur angezeigt wird, wenn genauso oft Show wie Hide aufgerufen wurde. Ich vermute, dass dieses Verhalten sich daher auch im Framework zeigt.

09.05.2007 - 23:28 Uhr

@herbivore: LOL

09.05.2007 - 23:21 Uhr

Ich würde beim Vergleich sämtliche alphanumerischen Zeichen entfernen. Auf ein solches Zeichen folgende Nullen werden auch entfernt. dadurch erhältst du die reine Nummer. Das einzige, was dann noch Probleme bereitet, sind gleiche Telefonnummern, die sich nur in der Angabe der Vorwahl unterscheiden (beispielsweise +49(030)12345678 zu 03012345678). Dieses Problem kann man ohne Liste der gültigen Vorwahlen kaum umgehen.

public string ConvertToComparablePhoneNumber( string PhoneNumber )
{
   StringBuilder Converted = new StringBuilder( PhoneNumber.Length );
   bool RemoveZero = true;
   for( int i = 0; i < PhoneNumber.Length; i++ )
   {
      if ( Char.IsDigit( PhoneNumber, i ) )
      {
         if (PhoneNumber[i] == '0')
         {
            if (!RemoveZero)
            {
               Converted.Add( PhoneNumber[i] );
            }
         }
         else
         {
            Converted.Add( PhoneNumber[i] );
            RemoveZero = false;
         }
      }
      else
      {
         RemoveZero = true;
      }
   }
   return Converted.ToString();
}
09.05.2007 - 22:49 Uhr

Nachricht von sarabande vom 09.05.2007 21:14:44
Keyboardevent greift nicht oder lässt sich nicht auflösen

Zitat:
Original von Borg
@sarabande: Bevor du jetzt mit Windows Messages ankommst:
Lies doch bitte mal einen Thread durch, bevor du postest. megamacy möchte einen (mit Steuerung behafteten) Mausklick auf eine bestimmte Koordinate in einem DirectX-Spiel simulieren. Also vermutlich in irgendeinem Spiel cheaten. Und das funktioniert nicht so wie gedacht.

Wenn mit der Koordinate (x/y) kein Ereignis verknüpft ist, kann es auch nicht fünktionieren. Voraussetzung ist auch, dass man SendInput, keybd_event, mouse_event oder SendMessage mit VK_* korrekt implementiert.

Zitat:
EDIT: Und nachdem du wegen bunt und fett und groß (vermutlich) eine Verwarnung bekommen hast, arbeitest du jetzt mit Asterik und Gänsefüßchen und der gleichen Aggressivität.

@Borg - ich mag dich auch nicht!

09.05.2007 - 10:50 Uhr

Ahhh, der fiese Weg-Editier-Teufel...

09.05.2007 - 10:49 Uhr

Wenn Test mehrmals vorkommt macht das nichts, da ist vorgesorgt.

Diese Aussage verstehe ich nicht. Wenn du ein eindeutiges Trennzeichen hast, reicht ein simples:

string[] blocks = File.ReadAllText( dateiname ).Split( trennzeichen );
string[][] inhalt = new string[][blocks.Length];
for( int i = 0; i < blocks.Length; i++ )
{
   inhalt[i] = blocks[i].Split( '\n' );
}

um das ganze zu splitten.

Meinst du mit deiner Aussage, das Test kein zulässiges Wort in der Beschreibung ist?

09.05.2007 - 10:36 Uhr

Diese Variable enthält nach der Zuweisung die Referenz

In diesem Fall ja nicht, da int. Daher enthält id eine eigenständige Kopie des Wertes und Synchronisation ist nicht erforderlich.

09.05.2007 - 10:33 Uhr

Da "Test" ein Wort ist, das auch einfach so im Text stehen kann, würde ich den Text von Hand splitten. Es wäre trotzdem empfehlenswert, ein anderes Trennzeichen zu verwenden.

09.05.2007 - 10:30 Uhr

@f.ritz:
Nein, da die Methode in jedem Thread eine eigene lokale Variable id hat.

09.05.2007 - 10:04 Uhr

EDIT: Zweiter.

08.05.2007 - 23:11 Uhr

Sehe ich ähnlich wie herbivore. Sprich doch mal mit den Chefs über die finanziellen Möglichkeiten, die sich dir bei der anderen Firma bieten.
Sie können nur auf drei Arten reagieren:

  1. sie haben Verständnis für deine Situation und wünschen dir alles Gute, da sie außer Stande sind dir soviel zu bezahlen,
  2. ihr verhandelt neu und findet einen Kompromiss oder
  3. sie machen dir Vorwürfe, so dass du eh nicht mehr bei ihnen arbeiten möchtest.

Auf jeden Fall solltest du dich nicht einfach so wegschleichen, sondern offen und ehrlich darüber reden.

08.05.2007 - 23:00 Uhr

Ich habe noch nie mit C# programmiert

Dann vergiss dein Projekt erst mal und fang an kleine Brötchen zu backen.
Und jeder Programmierer muss traditionell mit einem Hello-World-Programm beginnen...

08.05.2007 - 22:56 Uhr

Nun ja, die angegebenen Namen sprechen ja sehr deutlich aus, wofür sie verwendet werden.
Da die Runtime die Threads nur erzeugt, wenn sie auch benötigt werden, ist es logisch, dass sie nicht automatisch in jeder Applikation laufen.

08.05.2007 - 22:53 Uhr

Trotzdem bitte keine Crossposts.

08.05.2007 - 22:48 Uhr

Sorry, wenn ich dir mit diesen beiden Sätzen auf den Schlips getreten bin. Das war sicherlich nicht persönlich gemeint.

In deinem Ursprungspost klang es so, als ob du dir den Code nicht anschauen möchtest. Und auf diese Einstellung bezogen sich auch die beiden Zeilen.

Nur wenn du dir den Code angesehen hast und bis FormEx vorgedrungen bist, wieso hast du dann nicht einfach nachgefragt, was dort passiert?
Das hätte wahrscheinlich immer noch schneller zu Antworten geführt, da man als Antwortender nicht gezwungen wäre, den Code zu durchsuchen.

08.05.2007 - 22:25 Uhr

Als Beispiel könnte ein Downloadmanager dienen.
Diese lädt mehrere Dateien herunter und zeigt den Fortschritt in einem ListView an. Dann könnte man beim Start des asynchronen Downloads das zugehörige ListViewItem übergeben.
Der Download-Progress-Handler kann dann einfach im "mitgelieferten" ListView den Fortschritt ausgeben, ohne wissen zu müssen, was da eigentlich getan wird.
Noch deutlicher kann ich es dann fast nicht mehr beschreiben.

08.05.2007 - 22:19 Uhr

Wie wäre es mit einem Doppelklick auf die Spalte?

08.05.2007 - 22:17 Uhr

Ist ja auch nur eine deutlich erweiterbare Grundidee. Man kann ja trotzdem bestimmte Exceptions abfangen, indem man einfach spezifischere catch-Blöcke davor hängt.

08.05.2007 - 12:19 Uhr

Das Problem bei den ganzen asynchronen Methoden ist ja, dass du prinzipiell mehrere davon gleichzeitig ausführen kannst. Im Normalfall benutzen diese aber alle den gleichen Progress- bzw. Completed-Handler. Nur woher soll der Handler dann wissen, für welchen Transfer er jetzt aufgerufen wurde?
Ganz einfach: durch das beliebige Objekt, das allen async-Methoden mitgegeben werden kann. Das könnte zum Beispiel eine ID sein. In deinem Fall halt einfach ein String.

08.05.2007 - 12:07 Uhr

Dann schreib eine statische Klasse, der du die Exception übergibst und eventuell noch weitere Informationen.
Die Klasse entscheidet dann, wie welche Exception angezeigt werden soll.
Damit hast du den Code nur einmal und ansonsten in jedem try-catch nur den Aufruf der statischen Methode.

Also:

try { ... }
catch( Exception ex )
{
   ExceptionHandler.Handle( ex );
}

// und
internal static class ExceptionHandler
{
   public static void Handle( Exception ex )
   {
      switch( ex.GetType() )
      {
         case typeof(DivideByZeroException):
            // ...
            break;
         case typeof(ArithmeticException):
            // ...
            break;
         // ...
         default:
            // ...
            break;
      }
   }
}
08.05.2007 - 12:01 Uhr

Am besten ist es, wenn du jede Zahl als einzelne Zeile schreibst und dann auch so wieder einliest.

List<int> Zahlen = ...

// schreiben
using ( StreamWriter writer = new StreamWriter("datei1.txt") )
{
   foreach( int Zahl in Zahlen )
   {
      writer.WriteLine( Zahl.ToString() );
   }
   writer.Flush();
   writer.Close();
}

// lesen
using ( StreamReader reader = new StreamReader("datei1.txt") )
{
   while (!reader.EndOfStream)
   {
      int Zahl = 0;
      if( int.TryParse( reader.ReadLine(), Zahl ) )
      {
         Zahlen.Add( Zahl );
      }
   }
   reader.Close();
}
08.05.2007 - 11:52 Uhr

Dazu gibt es das Event Validating.

08.05.2007 - 11:45 Uhr

Ok, hatte ich überlesen.

ABER:

Das Durchsuchen des Codes hat zehn Minuten gedauert. Runterladen, in VS öffnen, ein Form mit dem gewünschten Verhalten finden und dann in der Vererbungshierarchie immer weiter hinauf, bis man bei der Klasse FormEx ankommt.
Dort sieht man, dass die Klasse, immer wenn das Form deaktiviert wird, per SendMessage die Nachricht WM_NCACTIVATE mit wParam gleich 1 an das eigene Fensterhandle schickt. Laut Platform-SDK gibt der Parameter wParam dieser Nachricht an, ob der NC-Bereich des Fensters sich als aktiv (wParam == 1) oder inaktiv (wParam == 0) zeichnen soll.
Das ist also das ganze Geheimnis.

Und hat nicht länger gedauert als das Posten solch langer Texte.

08.05.2007 - 10:27 Uhr

Mit welcher IDE arbeitest du denn? Dann können wir dir auch besser helfen.

Bitte Posts vor dem Antworten lesen.

@Lara88:
Unterhalb des Projektmappenverzeichnisses hat jedes Projekt einen eigenen Ordner. Diesen kannst du einfach kopieren und die enthaltende .csproj-Datei öffnen.

08.05.2007 - 10:13 Uhr

Vermutlich Microsoft.Win32.SystemEvents.TimeChanged.

08.05.2007 - 10:11 Uhr

Ein klassischer Fall für's Openbook - Vergleichsoperatorn sind wirklich unterste Grundlagen.

Eher ein Vertipper für Syntaxfehler selbst lösen (Compilerfehlermeldungen)

08.05.2007 - 10:07 Uhr

Entweder - wie mitti schrieb - zyklisch alle Prozesse prüfen oder Reaktion auf das Öffenen eines Programms, aber wie?.

08.05.2007 - 10:02 Uhr

Hast du auch das probiert, was herbivore oben schrieb?

08.05.2007 - 09:58 Uhr

Wenn es sich nur um Polynome handelt, kannst du einfach die Koeffizienten in einem Vektor (double[]) abspeichern.
Aus f(x) = ax² + bx + c wird dann double[] f = new double[] { c, b, a }.
Bei einer geraden Funktion sind dann alle ungeraden Indize 0, bei einer ungeraden Funktion entsprechend alle geraden.

Berechnen mittels Horner-Schema:

public double Calculate( double[] polynom, double x )
{
   double y = 0.0;
   for ( int i = polynom.Length - 1; i >= 0; i-- )
   {
      y *= x;
      y += polynom[i];
   }
   return y;
}

Empfehlenswert ist dann natürlich eine eigene Klasse Polynom, welche die Berechnungen als Methoden implementiert.

Zum Zeichnen benutzt du einfach eine PictureBox und setzt das Koordinatensystem mittels Graphics.TranslateTransform und skalierst mittels Graphics.ScaleTransform.

08.05.2007 - 09:43 Uhr
  1. Du sendest erst den KeyDown von F4, dann den von Alt => Reihenfolge tauschen
  2. Du solltest alle vier Aktionen auf einmal senden => Alt-Down, F4-Down, F4-Up, Alt-Up
08.05.2007 - 09:35 Uhr

Du könntest über die WinAPI dem Button einen neuen Text zuweisen.
Allerdings

Wegen des Textes in einem Button wäre der Aufwand denke ich nicht gerechtfertigt.

Zumal sich die Bedeutung des Buttons nicht ändert.

08.05.2007 - 09:30 Uhr

Da du die externe Anwendung ja sicherlich per Process startest, wäre es naheliegend gewesen, dort auch zu suchen => Process.ExitCode

08.05.2007 - 08:54 Uhr

Paint .NET ist doch Open Source => Code.

05.05.2007 - 18:41 Uhr

Ich hab in einem Programm ... das Gefühl, dass float nicht genau genug ist

Nur ein Gefühl oder Gewissheit? PointF wird ja nur bei der Ausgabe verwendet. Und wozu du dort mehr als 53Bit Genauigkeit brauchst ist mir etwas schleierhaft.

05.05.2007 - 11:09 Uhr

Du konvertierst erst nach der Division in einen float. Das bringt dann aber nichts mehr. Konvertiere vor der Division.

05.05.2007 - 10:47 Uhr

Wenn du alle structs jeweils mit LayoutKind.Explicit definierst, sollte es eigentlich gehen.

05.05.2007 - 10:43 Uhr

Dann ist offensichtlich das klassische Startmenü eingestellt.
Aber warten wir es einfach ab, ich vermute, Sp666dy wird uns an Kreativität überraschen.

04.05.2007 - 15:16 Uhr

@herbivore:
Da bringt doch nichts. Jetzt kommt gleich die Antwort, dass es im Startmenü kein Einstellungen gibt, da Sp666dy Windows XP und nicht wie du 2000 bnutzt...

04.05.2007 - 15:13 Uhr

Du musst sie ja nicht komplett einlesen. Es ist jedoch das flexibelste, wenn du an beliebiger Stelle Zeilen einfügen willst.

04.05.2007 - 15:11 Uhr

Ich frage mich nur gerade, ob es wirklich sinnvoll ist bei Daten, die in der Steinzeit liegen (so ca. 10000 Jahre her), über Monat und Tag zu reden...

04.05.2007 - 15:05 Uhr

Gerade mathematische Berechnungen mit single oder double sollten aber nicht durchgeführt werden, da diese auf die FPU ausgelagert werden und der Thread während der Bearbeitung blockiert wird.

Ansonsten kannst du doch einfach eine while-Schleife benutzen, die eine boolesche Variable testet. Dann brauchst du diese bloß auf false setzen und der Spuk hat ein Ende...

02.05.2007 - 21:20 Uhr

Für solche Fälle nicht den Timer aus System.Windows.Forms sondern den aus System.Threading verwenden. Der läuft unabhängig vom GUI (weil nicht über die MessageLoop).

02.05.2007 - 21:13 Uhr

WMI, Klasse Win32_Service, Property StartMode

02.05.2007 - 17:30 Uhr

Und wer soll dann entscheiden, wann welcher Wert zu verwenden ist?
Kurz gesagt: Nein.

02.05.2007 - 17:24 Uhr

da muss ich allerdings aufpassen dass die nutzdaten nie größer als 256 bytes sind

Wie kommst du denn darauf? Diese Einschränkung hat der Code nicht.

Aber du hast insofern Recht, als dass das Array sehr unübersichtlich ist.
Daher könntest du auch eine Liste verwenden, in der die erlaubten Zeichen eingetragen sind.
Allerdings muss dann bei jedem Zeichen (Byte) die Liste durchsucht werden, was die Laufzeit deutlich erhöht.

Und um ein derartiges Array von bool zu erstellen, kannst du dir ja eine eigene kleine Hilfsmethode schreiben. Es hat ja niemand verlangt, dass du das von Hand machst.

02.05.2007 - 17:16 Uhr

Du könntest mit den FileWatcher schauen wann auf die msn.exe zugeriffen wird.

Ein Lesezugriff bedeutet aber nicht, dass sie auch gestartet wird (Virenscanner, Dateieigenschaften u.v.a.). Daher hilft das nur bedingt.

@Sp666dy:
Es hilft nun mal alles nichts. Entweder gibst du dir mehr Mühe oder du machst weiter wie bisher und hoffst, dass sich immer welche finden, die dir Code anbieten. Ich würde mich nicht drauf verlassen.
Du hast jetzt zwei Lösungswege vorgestellt bekommen. Entweder kontrollierst du regelmäßig alle Prozesse oder du lässt Windows den Start loggen und rufst das Log ab. Der einfachere Weg ist sicherlich der erste. Daher: setz deinen A... in Bewegung und versuch das auf die Beine zu stellen. Letztendlich ist es ja bloß eine Schleife in einem Timerhandler.

02.05.2007 - 13:10 Uhr

Nein, die ProcessStartInfo sind wirklich nur Framework intern zum Starten gedacht, d.h. sie reflektieren keine Eigenschaften existierender Prozesse.

Daher: WMI, Klasse: root\CIMV2\Win32_Process, Property: CommandLine

02.05.2007 - 09:44 Uhr

Hau doch mal alle Daten der CDs auf eine DVD. Direkt jede CD-Root in die DVD-Root. Zumindest getrennt sollte es bei den beiden Installations- und den drei Doku-CDs gehen.