Laden...

Forenbeiträge von Coder007 Ingesamt 1.214 Beiträge

18.01.2012 - 22:36 Uhr

Verbindung zu einem anderen Client = Verbindung zu einer anderen IP? Dann ist es automatisch eine andere Vebrindung und die kriegt auch einen anderen Source Port. Oder versteh ich deine Frage falsch?

18.01.2012 - 21:19 Uhr

Ich persönlich habe keine Lust, den alten Thread durchzulesen und mir zusammenzureimen, was du gemacht hast und was bei dir nicht funktioniert. Mach am besten einen neuen Thread auf. Schreib aber auf jeden Fall, was du genau gemacht hast. Man kann zwar ein bisschen raten, woran das liegen könnte, aber wenn du deinen Code postest, sieht man vielleicht sofort, woran es liegt.

17.01.2012 - 20:43 Uhr

Es gibt außer regedit noch ein Kommandozeilentool reg, probiers mal damit.

16.01.2012 - 23:31 Uhr

Du brauchst da eigentlich gar kein unsafe, das sollte ohne weiteres gehen:


public extern static void Convert(double x, double y, ref double xout, ref double yout);

static void Main(string[] args)
{
double x=50.0;
double y=12.0;
double xout = 0;
double yout = 0;
Konverter.Convert(x, y, xout, yout);
}

14.01.2012 - 20:24 Uhr

Naja, unmöglich vielleicht nicht, aber auch nochmal ein gutes Stück umständlicher, als ich gedacht hätte. Da bräuchte man sogar eine zweite Ebene von Heuristik, um erkennen zu können (wieder aus den Strichinformationen zu den Zeichen), wie die Kurven zusammengehören. Dürfte aber immer noch machbar sein...

14.01.2012 - 18:57 Uhr

Es gibt auch Callbacks, schau hier:

Two-way remoting with Callbacks and Events

Ob das besser ist als Polling, musst du für deinen Fall selber entscheiden.

14.01.2012 - 18:52 Uhr

Ich könnte mir sogar vorstellen, dass man das über eine Heuristik relativ zuverlässig lösen könnte
Ne, das tut vorne und hinten nicht. Klar gibts gewisse Regeln wie die Strichreihenfolge normal sein sollte, aber es gibt bestimmt bald so viele Zeichen mit Ausnahmen wie Zeichen die streng die Regeln befolgen.

So habe ich das nicht gemeint. Nehmen wir z.B. das Schriftzeichen für Haus. Jetzt braucht man eine Tabelle, in der drin steht, in welcher Reihenfolge welche Striche zu zeichnen sind. Und ich gehe stark davon aus, dass solche Tabellen existieren. Man schaut in die Tabelle und stellt fest, dass als erstes der kleine Strich links oben zu zeichnen ist. Jetzt könnte man alle aus der Font Datei ausgelesenen Kurven analysieren und die Wahrscheinlichkeit ermitteln, dass eine bestimmte Kurve dem kleinen Strich oben entspricht. Oder dem mittleren horizontalen Strich. Da es pro Zeichen nicht besonders viele Kurven sein werden, denke ich wird man das relativ sicher bestimmen können. Zumindest halte ich diesen Ansatz für denkbar.

13.01.2012 - 22:11 Uhr

Warum schreibst du nicht einfach selber einen? Musst doch nur von TraceListener ableiten...

13.01.2012 - 21:32 Uhr

für mich gehört in einem perfekten Sourcecode jede Code-Zeile, die nicht trivial ist, d.h. in der nicht bloß eine Variableninitialisierung oder eine Wertzuweisung o.Ä. stattfindet, dokumentiert.

Das halte ich für deutlich übertrieben. Je mehr Erfahrung man hat, desto weniger interessieren einen die Kommentare. Und grob geschätzt (und vielleicht übertrieben) 98% vom Source ist meist nun mal mehr oder weniger Boiler Plate Code. Was für die Doku interessant ist, ist die API von den Bibliotheken, und die eigentliche Business Logik, damit man die Abläufe nachvollziehen kann. Und das macht nun mal einen relativ kleinen Anteil am Gesamtcode aus.

13.01.2012 - 21:18 Uhr

talla hat Recht, aber um deine Frage trotzdem zu beantworten - das geht, ist aber nicht ganz trivial. Die Daten zu einem Font kannst du dir über die GDI Funktion (nicht GDI+) GetFontData holen. Eine TTF Datei besteht aus verschiedenen Tabellen, die Strukturen sind im SDK nicht definiert, soweit ich weiß, das müsstest du selber machen. Im Buch "Windows Graphics Programming" ist es im Kapitel 14.4 ausführlich beschrieben. Da ist auch ein Beispiel, wo der Autor die Font Daten dekodiert und selber zeichnet. Und ich bin mir ziemlich sicher, dass es schon fertige Bibliotheken gibt, wenn nicht für C#, dann doch sicher für C/C++. Natürlich musst du auch beachten, was herbivoir gesagt hat. Wenn du einfach die B-Splines hinzeichnest, wirst du nicht die optimalen Ergebnisse bekommen.

Wegen der Strichreihenfolge... Keine Ahnung. Eigentlich könnte ich mir schon vorstellen, dass die Striche in korrekter Reihenfolge abgespeichert sind, weil sie in der chinesischen Schrift eine große Rolle spielen und die Leute, die die Fonts erstellen, das auch wissen. Muss aber natürlich nicht der Fall sein. Und was du von Hand als einen Stricht zeichnen würdest (oder zeichnen musst), besteht im Font vielleicht aus mehreren Strichen.
Ich bin mir zwar ziemlich sicher, dass man Tabellen finden kann, welches Zeichen mit welchen Strichen in welcher Reihenfolge gezeichnet werden muss, aber ich bin mir gar nicht sicher, ob man diese Informationen auch den Werten aus dem Font zuordnen kann. Ich könnte mir sogar vorstellen, dass man das über eine Heuristik relativ zuverlässig lösen könnte, aber so ohne weiteres wird es wohl nicht gehen...

12.01.2012 - 21:33 Uhr

Wenn ich das richtig sehe, hast du eigentlich zwei Fragen:

  • Angezeigten Namen ermitteln
  • Liste alle Implementierungen ermitteln

Wegen dem Namen kannst du einfach ToString überschreiben oder eine DisplayName Property hinzufügen.
Um die Liste zu ermitteln, habe ich nochmalerweise eine Art Service Repository, wo man sich die Liste der verfügbaren Implementierungen einer Schnittstelle holen kann. Die Implementierungen lade ich meist auch dynamisch aus Plugins.

12.01.2012 - 21:29 Uhr

Habs grad ausprobiert, mit


wmic path win32_videocontroller get AdapterRam

kriegt man zumindest den verfügbaren Speicher (aber auch weiteren Infos drüber, in welcher Form der Speicher verfügbar ist). Die Temperatur kriegt man auf die Weise nicht raus, wenn ich das richtig sehe. Also wirst du wohl über nvapi für Nvidia und das entsprechende Gegenpart bei AMD gehen müssen. Sind ja zum Glück nur zwei wichtige Hersteller 😉

10.01.2012 - 23:13 Uhr

Wenn jemand alles nur so kommentiert (RechnungDrucken() -> "Druckt Rechnung"), frag ich ihn ob er nen Clown zu viel gefressen hat. Wo ist da der Sinn?

Ich weiß nicht, wozu die ganze Diskussion gut sein soll. Ich glaube, ob, wie und warum man Kommentare schreiben sollte, wurde schon oft genug besprochen, nicht nur hier im Forum. Solche Kommentare wie oben schreibe ich nicht. Wenn sie jemand doch schreibt, von mir aus, stört mich auch nicht. Aber bei jedem komplexen Projekt gibt es mehr als genug Stellen, die man ausführlich dokumentieren muss. Es gibt Funktionen, die ein komplexes Verhalten aufweisen, das man kommentieren muss, ebenso die Parameter, und auch in einer Funktion selbst gibt es häufig genug Abläufe, die man einfach dokumentieren muss. Ich kaufe Martin C Robert nicht ab, dass man einfach jede Funktion in selbsterklärende Unterfunktionen zerlegen kann und schon muss man nichts mehr kommentieren. Das ist einfach Quatsch. Das geht bei 0815 Code, gettern und settern und sonstigem, aber jedes halbwegs komplexe System muss sowohl die Schnittstelle als auch die Implementierung in Form von Kommentaren dokumentieren, sonst ist es nicht wartbar.
Zu allen anderen Vorschlägen, wie Commit Kommentare kann ich nur sagen, dass sie eigentlich keinen interessieren. Wenn ich programmiere, will ich inline Infos haben, am besten in Form von Intellisense. Ich mag da nicht irgendwelche externen Dokus aufmachen und schon gar nicht im Versionsverwaltungslog schauen.

10.01.2012 - 22:41 Uhr

Also, die Parameter sind ints, keine longs. Was du an das Fenster schickst, kann ich dir nicht sagen, ich hoffe, du weißt, was du da tust... Aber wie man die SendMessage Funktion richtig importiert solltest du problemlos finden können.

09.01.2012 - 21:28 Uhr

Welche Klasse? Schau dir das ganze mal mit Spy++ an.

09.01.2012 - 21:02 Uhr

Ich versteh zwar nicht so ganz, was du machen willst, aber mir springt schon mal ins Auge, dass du den IntPtr mit null vergleichst. Warum sollte er null sein? Den musst mit IntPtr.Zero vergleichen.

08.01.2012 - 20:13 Uhr

Problem ist nur das "content-disposition" nicht entweder nichts, oder den Dateinamen sondern manchmal "attachment" + leerstelle + dateiname oder "attachment" + dateiname oder nur den Dateinamen.

Zumindest wie das Feld aufgebaut ist, ist definiert:

RFC 2183

07.01.2012 - 22:45 Uhr

Ich finde den Code auch schlecht gekapselt und schlecht strukturiert. Das könntest du ruhig mal etwas refaktorisieren...

Paar Punkte, die mir einfallen, wie du das ganze optimieren könntest:

  1. Ich würde den zum Zeichnen andersherum aufbauen. Du weißt, welche Tiles sichtbar sind. Das musst du nicht berechnen. Mein Profiler sagt, diese Prüfung braucht halb so viel Zeit wie das Zeichnen selber - das muss überhaupt nicht sein, diese ganzen Berechnung kannst du dir meiner Ansicht nach komplett sparen. Dann hättest du auch wesentlich weniger Schleifendurchläufe.

  2. Warum eigentlich die Layer? Was passiert, wenn sich zwei Tiles überlappen? Ich seh optisch keinen Unterschied. D.h. dann, dass du alle Layer mit dem obersten überschreibst. Das kannst du sicherlich auch optimieren, es sei denn, du willst dann irgendwann wirklich verschiedene Layer-modi, wie Transparenz, einführen.

  3. Das Skalieren könnte seine Zeit brauchen. Versucht, die Tiles nur einmal zu skalieren und dann zu cachen.

Dein Programm ist deutlich zu langsam. So langsam ist GDI nicht, das seh ich nicht ein. Die ganze Windows GUI (zumindest bis XP) und tausende selbstgeschriebener Komponenten (teilweise recht komplexe und animierte) basieren auf GDI. Für sowas sollte es absolut ausreichend sein.

07.01.2012 - 19:48 Uhr

Ich denke, für einen Map Editor sollte es schnell genug sein. Sicherlich zu langsam für Spiele, aber auf jeden Fall schnell genug für einen Editor.
Wie groß ist die Map und wieviele Layer hast du? Bist du sicher, dass dein Clipping Algorithmus richtig funktioniert?

07.01.2012 - 16:37 Uhr

Ich würde an der Stelle nicht zu viel Aufwand treiben. Ich kann dir sagen, wie das in subversion gelöst ist (die müssen an zig Stellen entscheiden, ob ein übergebener Pfad eine Url oder ein lokaler Pfad ist). Die prüfen im Endeffekt nur, ob der String mit ein paar Buchstaben + "://" anfängt. Das hat natürlich gewisse Einschränkungen und mag in deinem Fall vielleicht gar nicht reichen, aber etwas ähnliches würde ich auch bauen.

03.01.2012 - 19:00 Uhr

Ich würde die Files Tabelle eigentlich in die zwei Tabellen Files und Versions aufteilen. Ich weiß nicht, was du sonst noch für Felder hast, aber ich könnte mir durchaus vorstellen, dass es Felder gibt, die für alle Versionen einer Datei identisch sind, und welche, die sich pro Version unterscheiden (z.B. VersionsNummer, Datum, Kommentar).
Ansonsten könntest du dir vielleicht auch mit einem Trigger behelfen, wobei ich die Lösung nicht schön finde...

31.12.2011 - 19:23 Uhr

Probiers halt aus. Wenn das schnell genug läuft, würde ich keine redundaten Informationen speichern (premature optimization ist the root of all evil ist ein beliebtes Zitat hier im Forum). Kommt drauf an, wieviele Datensätze du erwartest. Wenn es sich um paar hundert oder paar tausend handelt, ist es kein Problem. Bei mehreren zehntausend weiß ichs nicht. Bei Aggregaten über Milliarden von Datensätzen würd ich schon erwarten, dass es ein bisschen was dauert... Dann kannst vielleicht noch eine zusätzliche Statistics Tabelle einführen, die die vorberechneten Daten hält und ab und zu aktualisiert wird.

31.12.2011 - 00:44 Uhr

Damit würde ich jede Änderung mitbekommen und zeichnen können.

Das ist eben nicht elegant. Natürlich kann deine Klasse ein Event wie StepProcessed anbieten, es spricht grundsätzlich nichts dagegen. Aber grade das Zeichnen würde ich davon entkoppeln. Dann mach halt einen Timer, der alle 25 ms neuzeichnet. Mehr Bilder pro Sekunde kann das menschliche Auge eh nicht unterscheiden.

30.12.2011 - 01:10 Uhr

Das leitet der Compiler aus der Methodensignatur her. Ist das Fluent NHibernate? Dann will die Id Methode eine Func<T, Object> haben, also weiß der Compiler, dass der einzige Parameter den Typ T, also Customer hat.

29.12.2011 - 23:01 Uhr

googlet man stundenlang.

Das lernt man jahrelang. Und zur Softwarearchitektur gehört auch viel mehr dazu, als nur multi-tier Architektur. Und man braucht auch viel Erfahrung, um sich die Architektur einer größeren Anwendung vorstellen und durchdenken zu können.

Interessante Bücher über Softwarearchitektur gibts einige... multi-tier Architekturen sind recht grundlegend und werden wohl in den meisten Büchern vorkommen. Ich könnte dir vielleicht Patterns of Enterprise Software Architectures von Martin Fowler empfehlen. Es ist nicht ganz aktuell und einige Muster sind schon überholt, aber es ist fast schon sowas wie ein Klassiker.

29.12.2011 - 22:17 Uhr

warum findet man nicht^s in büchern wie "Microsoft Visual C# 2010 - Das Entwicklerbuch: Grundlagen, Techniken, Profi-Know-how" über diese thema

Wahrscheinlich, weil Programmieren != Softwareentwicklung. Die Frage finde ich aber in der Tat auch interessant. Ich habe vor gefühlten Jahrhunderten mit Delphi angefangen. Hatte damals nicht mal Internet und habe viele Bücher gelesen (nicht nur Delphi, auch Java, VB und C++). Und tatsächlich hat kein einziges Buch, das ich damals in die Finger bekommen habe, Architektur auch nur mit einem Wort erwähnt. Dabei gibt es genug Bücher, die sich ausschließlich mit Architektur befassen. Trotzdem werden die Themen wie Programmieren und Softwarearchitektur sehr selten miteinander vermischt. Ich könnte mir als Grund auch vorstellen, dass Fortgeschrittene eigentlich nie Programmierbücher lesen. Ich überflieg ab und zu ein Buch, wenn ich eine neue Programmiersprache lerne, aber da interessiert mich dann wirklich eher die Syntax, die Standardbibliotheken und ich will dabei generell ein Gefühl für die Sprache und die best practices in der Sprache bekommen. Ich les die Bücher ja nicht mehr, um Programmieren zu lernen, und schon gar nicht, um etwas über Architektur zu lernen. Vielleicht ist es auch ein Grund, warum niemand so allumfassende Bücher schreibt.
Mit .NET und WPF schauts aber eigentlich schon wieder anders aus (oder sollte es zumindest), weil MVVM bei WPF eigentlich fast ein Muss ist.

28.12.2011 - 18:13 Uhr

Ich habe auch kein Problem damit, dass es VB.NET ist. Das Problem ist, dass es Grundlagen sind 😉 Es wurde schon oft genug besprochen, warum Grundlagenfragen im Forum nicht erwünscht sind. Schau [Hinweis] Wie poste ich richtig?, Punkt 1.1.1. Die Syntax musst du selber beherrschen. Auch den Unterschied zwischen Schnittstellen und Klassen musst du dir selber aneignen. Wenn du das nicht tust und immer nur konkrete Fragen stellst, wirst du immer nur über Probleme stolpern.
Außerdem seh ich nicht, was es mit Windows-Forms zu tun hat.

Wenn du von einer Klasse ableiten willst, lautet das Schlüsselwort Inherits und nicht Implements. Was du jetzt konkret machen willst, musst du schon selber wissen.

28.12.2011 - 17:40 Uhr

Das Problem ist, dass du versuchst eine Klasse und keine Schnittstelle zu implementieren. Das ist absolut grundlegend, die Sprachsyntax musst du schon beherrschen (und C# ist natürlich sowieso nicht).

28.12.2011 - 17:06 Uhr

Ich denke, das beste wäre für dich jetzt einfach, das ganze mal auszuprobieren. In Dateien würde ich die Daten erstmal nicht schreiben, wenn du sie eh komplett im Speicher haben willst. Da kanst die Daten auch direkt durchschieben. Viel Aufwand ist es nicht, das mal auszuprobieren. Dann kannst ja sehen, ob du mit der Performance zufrieden bist, oder nicht. Bei solchen Batcherverarbeitungen ist die Geschwindigkeit meist eh nebensächlich.

27.12.2011 - 22:28 Uhr

Da ist es meiner Meinung nach schneller, die Tabellen lieber 10 mal direkt neu zu laden...

Da ist was allerdings was dran...

27.12.2011 - 17:47 Uhr

Irgendwie musst du die Daten natürlich serialisieren. Das kommt auch drauf an, was du übertragen willst, und wie häufig sich das ändert.
Ich würde sowas wahrscheinlich so performant wie möglich realisieren wollen. Wahrscheinlich einfache DTO Klassen für die Objekte definieren und sie möglichst einfach über WCF oder .NET Remoting rüberschieben.

27.12.2011 - 16:45 Uhr

Ich habe mir gedacht, zur Verarbeitung könnte ich ein 64 Bit Applikation erstellen und zur Datenbeschaffung ein 32 Bit Applikation..

Wenn du dein Problem unbedingt auf diese Weise lösen willst, kannst es schon so machen, hast ja die Lösung selber vorgeschlagen. Du könntest eine Art Client-Server Architektur aufbauen. Dabei wäre ein Programm 32 bittg und würde die Daten an das 64 Bit Programm weiterreichen. Das sollte kein Problem sein. Ich habs ja schon im ersten Post geschrieben, so lange weder du noch der Treiber die Daten cached, ist die Größe kein Problem. Und wenn dein 32 Bit Programm die Daten nur an das 64 Bit Programm durchschiebt, sollte es funktionieren.

26.12.2011 - 18:59 Uhr

Das hat damit nichts zu tun, und warum Task schneller ist als Thread leuchtet mir so auch nicht ein, das kommt auf deinen Code an, den du uns vorenthalten hast. Der Text bei Galileo Computing ist etwas irreführend. Auch Tasks basieren auf Threads. Sie sind nur (meist) etwas einfacher zu verwenden.
Wie kommst du drauf, dass man keine hinreichende Synchronisierung mit Threads umsetzen kann? Selbstverständlich kann man das, nur ist es unter Umständen sehr tricky. Wobei das mit Tasks nicht unbedingt einfacher gehen muss - das Task Konzept kann man auch rein mit Threads nachbauen.

26.12.2011 - 16:49 Uhr

Es macht auf jeden Fall wesentlich mehr Sinn, sowas von der Datenbank erledigen zu lassen und nicht selber. Wenn die Datenbank das nicht kann, kannst dir die Datenbank auch sparen. Dein Beispiel schaut jetzt auch überhaupt nicht kompliziert aus, bist du sicher, dass die Datenbank das nicht kann? Kann sein, dass es bei Progress etwas anders funktioniert, hatte mit deren Produkten nicht viel zu tun, fand das alles aber recht gewöhnungsbedürftig.
Aber selbst wenn du alle Daten mit SELECT * FROM Table holst, reicht auch ein 32 Bit Treiber. Du musst die Daten ja trotzdem selber cachen in deinem Programm, der Treiber schiebt sie nur durch. Aber so wie ich das sehe, versuchst du selber eine Datenbank nachzubauen, obwohl du schon eine benutzt, und davon kann ich nur nochmals abraten.

25.12.2011 - 20:04 Uhr

Somit werd ich OutOfMemoryException schnell begegnen..

Warum? Was meinst du mit Verarbeiten? Wenn du eine Batchverarbeitung meinst, ist es kein Problem. Der Treiber cached nicht alle Daten und du hoffentlich auch nicht. Wenn du keine Batchverarbeitung hast, sondern wirklich alle Daten gleichzeitig haben willst, dann denk lieber nochmal drüber nach, ob du sie wirklich gleichzeitig haben willst.

25.12.2011 - 17:18 Uhr

und im gegenzug habt ihr einen ganz hübschen scheduler for free, der ja sicher ausbaufähig ist 😃

Ist ja nicht so, dass es bisher keine Scheduler Controls geben würde 😉 Und einige sind sogar wartbarer als deiner. z.B. hab ich mal einen von Codeproject benutzt (will ihn grad nicht raussuchen), da konnte man einfach eigene Styles implementieren und ein paar waren schon vorimplementiert. Bei dir sind sogar teilweise Farben, Schriften usw. hartkodiert im Quelltext. Und auch sonst ist vieles hartkodiert und schlecht erweiterbar/wartbar. Also, nur begrenzt ausbaufähig... Und überhaupt ist da die Businesslogik schlecht gekapselt. Vielleicht will ich die Termine vom Chrissi ja im Gegensatz zu dir nicht blau darstellen 😉 Du hast zwar dzau geschrieben, das ist temporär, aber eigentlich das ist das falsche Vorgehen. Erst muss man die Software durchdenken und entsprechend aufbauen und erst dann anfangen irgendwas zu coden, damit man sofort was sehen kann... Um das ganze aber etwas abzumilden: ich hab schon oft wesentlich schilmmeren Code gesehen.

Ich hab grad einen Profiler drüber laufen lassen (die kostenlose Version vom EQATEC Profiler). Das Bild ist eigentlich recht klar. 64% der Zeit wird in OnPaint in der Methode DrawDays verbraten, und davon 100% in der Methode DrawDay. Was mir da sofort auffällt ist, dass du in einer Schleife GDI+ Objekte erstellst und sofort wieder freigibst (das haben auch andere schon angemerkt). Das macht sicehr keinen Sinn. Kann gut sein, dass es 90% der Zeit in Anspruch nimmt.

21.12.2011 - 21:36 Uhr

Das ist ja nun wirklich eine Anfängerfrage. Lass das -1 bei < weg. Das hat nicht mal mit Programmierung zu tun, es ist auch so offensichtlich, dass du auf die Weise das letzte Element nie bekommst.

20.12.2011 - 21:33 Uhr

Das Problem hatte ich vor Jahren auch mal. Damals hatte php nicht mal direkt SOAP Unterstützung und ich hab irgendeine Bibliothek verwendet, um die WSDL Dateien aus PHP Klassen zu generieren und hatte dabei genau dasselbe Problem. Ich hab die WSDL Dateien damals einfach von Hand angepasst.

19.12.2011 - 23:58 Uhr

Das ist das, was du in Regedit als "Standard" oder eben default siehst. Den Wert kriegst du raus, wenn du bei GetValue "" oder null übergibst. Also, erst den Wert auslesen. Also, sowas in etwa:


RegistryKey classesRoot = Registry.ClassesRoot;
RegistryKey parentKey = classesRoot.OpenSubKey(keyName);
string realKeyName = parentKey.GetValue("");
RegistryKey realParentKey = classesRoot.OpenSubKey(realKEyName);

Und dann machst du mit realParentKey weiter wie bisher.

19.12.2011 - 21:24 Uhr

oder so.

Oder so ist immer ganz schlecht. Dir muss erstmal genau klar sein, was du eigentlich machst. Das wie ist dann eher nebensächlich und erschließt sich oft schon von selbst, wenn das was erstmal klar ist. Mit deiner Beschreibung kann man wenig anfangen. Es gibt viele Möglichkeiten, einen "Web-Chat" umzusetzen. Dir muss erstmal der technische Hintergrund klar sein, wie das funktioniert. Wenn das von einem Bekannten betrieben wird, kannst ihn ja einfach fragen. Sonst kannst dir auch den Quelltext der Seite anschauen und dir zusammenreimen, wie das funktioniert. Aber fragen ist besser, weil vielleicht gibt es noch mehr Möglichkeiten, mit dem Chat zu interagieren, nicht nur die Web Gui. Und bei sowas musst du natürlich aufpassen, ob die AGBs es überhaupt erlauben, so etwas zu machen.

19.12.2011 - 21:21 Uhr

Der shell Knoten kommt nicht unterhalb des Knotens mit der Erweiterung, sondern unterhalb des Knotens, auf den er in seinem default Eintrag verweist. z.B.:

.bmp -> IrfanView.Bmp

IrfanView.Bmp
shell
open
command

19.12.2011 - 21:01 Uhr

Ich glaube schon, dass es im Sinne von WPF ist, Controls aus anderen Controls aufzubauen. Dann kannst du auch relativ einfach den Style von den einzelnen Elementen überschreiben, und musst es beim Zeichnen nicht berücksichtigen. Da tust du dich bei Winforms mit dem Zeichnen leichter, weils gar keine Styles gibt. Und wenn du dein Control entsprechend aufbaust, kann der Benutzer vielleicht auch ein eigenes Template aufbauen und die Cells durch eigene Controls ersetzen, so wie er das haben möchte, das wär schon flexibel.

Ich würde aber auch sicher nicht behaupten, dass Winforms eine aussterbende Technologie ist. Das ist schon etabliert und für 99% der Anwendungen völlig ausreichend. Bei sehr vielen Programmen ist die GUI eher nebensächlich und WPF ist da einfach nur zusätzlicher Aufwand, der sich nicht lohnt und ich kenn auch sehr viele professionelle .NET Entwickler, die sich damit nie befasst haben.

18.12.2011 - 19:48 Uhr

In der aktuellen c´t (1/2012) gibt es ein kleines Tutorial.

17.12.2011 - 18:21 Uhr

Ich brauche aber eine Referenz (bzw. "Alias") darauf, damit der Wert im Array auch geändert wird.

Das habe ich überlesen, sorry. Das geht dann nicht. Auch Boxing bringt es dir nichts, weil das ist dann auch nur eine Kopie, verpackt in ein Objekt.

17.12.2011 - 18:00 Uhr

Eine Enumeration wirst du noch schneller kopieren können, als eine Referenz. Enums werden wohl 4 Byte brauchen, Referenzen unter .NET 12 Byte.

15.12.2011 - 21:01 Uhr

Das Problem ist jetzt, dass die Kleinbuchstaben vor den Großbuchstaben kommen? Dann wirst du wahrscheinlich den Vergleich selber machen müssen... gfoidl hat dir ja schon einen Link gepostet. Du brauchst ja im Endeffekt nur sowas in der Art:


int customCompareStrings(string s1, string s2)
{
  for (int i = 0; i < s1.Length && i <s2.Length; i++)
  {
    ...
    //compare characters
  }
}

Dann vergleichst du alle Zeichen und kannst dabei selber entscheiden, was größer ist und was kleiner. Und dann rufst du list.Sort(customCompareStrings) auf.

15.12.2011 - 20:34 Uhr

Was ist jetzt eigentlich das Problem? Die ganz normale Sort Methode würde das so sortieren, wie du es angegeben hast. Du hast irgendwo deine List<string>, die sagen wir "list" heißt, dann rufst du list.Sort() auf und sie ist sortiert.

12.12.2011 - 16:47 Uhr

Der Google Übersetzer ist nicht mehr kostenlos.

Warum brauchst du eine API? Reicht dir nicht einfach eine große Wortliste, wo du dann zufällig ein Wort rausholst? Wortlisten findet man ja eigentlich problemlos.

12.12.2011 - 15:43 Uhr

Das ist in der XML Spezifikation ist definiert, deine Datei ist nicht gülitg.