Laden...

Forenbeiträge von Joetempes Ingesamt 888 Beiträge

18.10.2011 - 07:28 Uhr

Wenn du keine Verschachtelung hast, sollte es schon genügen das TableLayout DoubleBuffered zu machen:

How To Create a Flicker Free TableLayoutPanel

Auch noch interessant:

Empfohlene Vorgehensweisen für das TableLayoutPanel

22.09.2011 - 16:32 Uhr

Na wegen mir, bau ich Dir ein...

22.09.2011 - 14:43 Uhr

Hi Tom,

danke, habs an Hand Deines Log's gefixt und getestet.
Werde gleich das Team bitten es neu hoch zu laden.

EDIT: Neue Version wurde hoch geladen.
Trennzeichen zwischen Debug-Level und Message kann jetzt Leerzeichen oder Tab sein.

22.09.2011 - 13:42 Uhr

@All
Danke für Eure Hilfe, mittlerweile habe ich eine Zwischenlösung implementiert, wobei der RAM Verbrauch drastisch reduziert wurde, der VirtualMode richtig verwendet wird, und ~1MIO Zeile in ~1SEK gelesen werden.

@Abt
Das Probier ich in jedem Fall mal aus.

@Siassei
Ich denke so werd ich es machen.

22.09.2011 - 13:16 Uhr

Hab ein Update im Eröffnungsthread bereit gestellt.

Änderungen:

  • Flackern des Hintergrundes beim Resize entfernt
  • Permanente Datumsanzeige integriert
  • Letzte Position und Größe der Form bei schließen wird gespeichert und beim Laden gesetzt
  • Offene Files können aus DropDownButton fokusiert werden
  • Einzelne oder alle Dateien können über das Menu (x-Button) geschlossen werden
  • Konfigurierbar "minimize to tray" hinzugefügt
  • Sonstige Konfiguration in Tabs eingeteilt
  • BugFix StartWith DebugLevel
  • File einlesen und anzeigen optimiert
  • Suchfunktion geändert ohne Counter

Die wichtigste Änderung ist die Optimierung vom File Auslesen und Anzeigen.
Aktuell ist es jetzt so, das ein 200MB File bei mir in 4 Sec geladen wird und unter 600MB RAM verbraucht. Das ist noch lange nicht Optimum aber etwas womit man leben und arbeiten kann.

Durch Änderungen an der Konfiguration ist die alte Konfiguration jetzt ungültig.
Die Dokumentation hab ich noch nicht nach gezogen.

Hier mal eine Liste der Features die auf meiner ToDo Liste stehen:

  • StepByStep Suche implementieren
  • Suche "Ignore Case"
  • Save SearchPattern wenn erfolgreich
  • Higligthing Keywords contains--> konfigurierbar, auch mit ignore Case
  • Export Search Results to file
  • Große Files handeln, Files nicht in Speicher lesen
  • Vergleich 2er LogFiles zeilenweise auf Unterschiede --> DIFF
  • manueller Refresh
  • Notifiaction, wenn error oder so, konfigurierbar
  • Filter und Sortierfunktion nach DebugLevel
  • Schema Definition für LogFile-Format, ala log4Net

Viel Spaß damit!

22.09.2011 - 07:36 Uhr

Hallo ujr,

vielen Dank für den Hinweis zum VirtualMode, aber die ListView läuft bereits im VirtualMode. Vielleicht mach ich auch da noch was falsch, ich schau es mir in jedem Fall nochmal an.

Grüße

21.09.2011 - 14:39 Uhr

Hallo KrümelKuchen,

danke für Deine Tests.

1.
Der Bug wird ist im nächsten Release gefixt.

2.
Über die RAM Problematik bin ich mir bewusst und auch bereits auf Lösungssuche.
Als Erklärung: Es ist nicht wirklich oberhead den ich erzeuge, sondern einfach pro Zeile
ein ListViewItem mit 3 SubItems, die in der ListView gehalten werden.

3.
Filterfunktion / Sortierfunktion steht schon auf meinem Plan.

Grüße

21.09.2011 - 09:04 Uhr

Ob es Sinn macht, so einen CoverFlow für WPF zu implementieren, kann ich nicht sagen.
Wer es braucht, der machts halt, wobei das natürlich anders geht als in Windows Forms.
Allein schon weil man ja in WPF nicht wirklich zeichnet. Weiterhin gibt's für WPF auch genügend Beispiele inklusive Source-Code im Netz, einfach mal googeln.

Kannst ja die Links dann auch hier posten...

Grüße

Joe

19.09.2011 - 11:41 Uhr

Hallo,

Deine neuen Vorschläge nehme ich alle an, danke.

In den Statusleisten werden Exceptions angezeigt.
Zieh mal z.B. c:\pagefile.sys in den LogViewer.

Ich hab auch schon wieder eine ganze Sammliung an Punkten die hinzu kommen.

Grüße

19.09.2011 - 11:34 Uhr

Hallo,

ich möchte mit meinem LogViewer große Files einlesen können.

Und zwar so wie das der TotalCommander (F3) oder der LogViewer Baretail macht.

D.h. egal wie groß das File ist, es ist erstens sofort anschaubar, und zweitens wird auch nichts in den RAM geladen.

Wie machen die das?

Aktuell verfolge ich den Ansatz alle Zeilen einzeln auszulesen, so schaffe ich auch 50.000 Zeile / Sekunde, aber das kommt nicht annähernd an das oben beschriebene Verhalten ran.

Grüße

Joe

19.09.2011 - 07:56 Uhr

Hallo wackelkontakt,

mein Ziel war es einen Apple CoverFlow nach zu implementieren.
Dafür habe ich ein .NET 2.0 Windows Forms CustomControl erstellt, wobei die Idee sehr simple, die Umsetzung nicht ganz trivial, und das Ergebnis sehr gut ist.

Skizziert sieht die Implementierung so aus:

  • OnPaint überschreiben
  • Angabe ob horizontaler oder vertikaler CoverFlow
  • Maus-Events überschreiben
  • Positionen berechnen und merken, daraus Index erzeugen
  • Grenzen berechnen und auswerten
  • Zwei Listen halten mit (Groß & Klein)
  • Bild was in der Mitte ist Groß anzeigen
  • Aktion auslösen, wenn zentrales Bild gewechselt wird --> Event

Ich bezweifle das Dir das wirklich was nutzt, die Sourcen kann ich nicht raus rücken,
ein Video könnte ich aber erzeugen, dann könntest du das Teil mal in Action sehen?

Grüße

17.09.2011 - 08:36 Uhr

@ pdelvo

Teilweise geschieht das schon.
Beim jetzigen Stand des des LogViewer's wird davon ausgegangen, das eine Log-Zeile folgendes Format hat:
"TIMESTAMP<LEERZEICHEN>DEBUGLEVEL<LEERZEICHEN>MESSAGE"
Um eine Zeile korrekt zerlegen zu können, müssen die verwendeten Zeitstempelformate angelegt werden. Entweder das Format wird über die TextBox selbst definiert, oder es kann aus der ComboBox ausgewählt werden.
Ist auch das Debug-Level korrekt konfiguriert, wird der Inhalt der Zeile auf die 3 Spalten aufgeteilt. Sollte die Zeile nicht zerlegt werden können, wird einfach die ganze Zeile in eine Spalte geschrieben. Eine beliebige Format-Definition, so wie es z.B. Log4Net macht steht bereits auf meiner ToDo-Liste.

@ Lumbra

Ja Baretail kenne ich, das hatte ich mir auch angesehen, da fehlte mir aber einiges.

@ tom-essen

Gibts im nächsten Release.

16.09.2011 - 13:55 Uhr

Und hier noch ein Screenshot.

16.09.2011 - 13:42 Uhr

Hallo Community,

hier, von mir, für Euch, zur freien Benutzung, mein Projekt: TraceEye, ein Log-Datei-Betrachter (LogViewer) mit vielen nützlichen Features.

Features:

· .NET 2.0 Applikation
· Portable, keine Installation nötig
· RealTime-Logging mit Pause,- Stop,- und Clear-Funktion
· Kein hoher Speicherverbrauch bei großen LogFiles
· Schnelles einlesen von LogFiles
· Parallele Log-Anzeige durch MDI-Technologie
· Windows & Linux Datei Unterstützung (\r\n, \r)
· Drag & Drop Log-Files
· Anzeige von letzter Änderung, Zeilennummer, Filegröße und Encoding
· Auto Encoding Detection
· Files von History öffnen
· Letzte geöffnete Files automatisch öffnen
· Multilanguage (DE, ENG)
· Diverse persistente Konfigurationsmöglichkeiten:
o TimeStamp Format
o Debug-Level (Name und Farbe)
o Gui Design (Farbe, Shading-Winkel, Schrift)
· XML-Konfiguration
· Debug-Level Notification
· Keyword Highlighting
· Autosave Position und Größe der MainGui
· Anzeige der Log-Zeilen in Spalten (Line, TimeStamp, Debug-Level, Message)
· Automatische Anordnung paralleler Log-Files (H, V, C)
· Vergleich zweier Files
· Notiz-Fenster mit Save-Funktion
· Optional Minimize ins SysTray
· Detail-View, mit Copy-Möglichkeit
· Suchfunktion mittels regulären Ausdrücken
· Suchergebnis-Highlighting
· komfortables Eventlog auslesen (Filterungen, Suche)
· Dokumentation

Anmerkungen:

· Alle Fragen über die Funktionsweise sollten durch die zugehörige Dokumentation beantwortet werden. Falls was unklar ist, fragt einfach nach.
· Über Feedback jeglicher Art freu ich mich natürlich, bei nachvollziebarem Bedarf würde ich auch fehlende nützliche Funktionen nach implementieren.

Viel Spaß damit!

**:::

15.09.2011 - 07:44 Uhr

Hallo,

ich hab 2 Vorschläge für Dich:

1.
http://wpfbookcontrol.codeplex.com/

2.
Du entwickelts Dir einen eigenen CoverFlow, wobei Du die Elemente einfach im OnPaint zeichnest. Wie bereits erwähnt musst Du dann die ganzen Maus-Events behandeln.
Hab ich auch gemacht, sieht aus und verhält sich wie beim iPhone.

Grüße

03.09.2011 - 12:12 Uhr

Version 2.0.11 wurde released.

30.08.2011 - 14:42 Uhr

Hab keine Lösung, aber in jedem Fall kannst Du Dir folgende Zeilen sparen:

  • reader.Dispose();
  • cmd.Dispose();
  • con.Close();

...oder natürlich die "Using"s.

09.08.2011 - 11:58 Uhr

Für's 2010er Studio hab ich es leider nicht mehr hinbekommen.
Hab aber eine, für mich ausreichende, Alternative gefunden:

1.Open the file AssemblyInfo.cs
2.Change [assembly: AssemblyVersion("1.0.0.0")] to [assembly:
AssemblyVersion("1.0.*")]
3.Remove [assembly: AssemblyFileVersion("1.0.0.0")]
4.Rebuild the project and verify that the version is incremented properly by viewing the properties of the newly compiled assembly

22.07.2011 - 09:37 Uhr

Und wenn das letztlich dazu führt, dass tatsächlich noch "einige nette Geschichten zu 'Hello World'" erzählt werden, würds mich freuen. Also immer her mit dem Spaß.

441x Hello World

18.07.2011 - 07:38 Uhr

Ist Emulator wirklich das richtige Wort dafür?

15.07.2011 - 08:54 Uhr

Hallo herbivore,

...Das Arbeitsverzeichnis sollte auf das Verzeichnis zeigen, in dem der Benutzer seine (Daten-)Dateien/Dokumente hat.

Na dann spricht ja nichts dagegen, das so zu machen.

Davon abgesehen muss du das Arbeitsverzeichnis vermutlich eh nur kurz ändern und kannst es sofort nach ShowHelp wieder zurücksetzen, denn ich vermute, der Viewer wird als eigener Prozess laufen. Ein Prozess erbt (kopiert) beim Start die Einstellungen des Elternprozesses, läuft anschließend aber unabhängig vom Elternprozess.

Das funktioniert leider nicht. Wenn ich nach dem Öffnen des Help-Dialoges,
wieder das originale/ alte Arbeitsverzeichnis setze, tritt der Fehler wieder auf.

Grüße

14.07.2011 - 15:19 Uhr

Hallo herbivore,

also zuerst mal, so funktionierts, danke.

In die Richtung gingen meine Gedanken auch, allerdings ging ich davon aus, das es kritisch sei, einfach mein Arbeitsverzeichnis zu ändern. Nach ein paar oberflächlichen Tests, sieht es so aus, als ob es kein Problem wäre.

Fällt Dir was ein, auf das ich in jedem Fall achten sollte?

Grüße

14.07.2011 - 14:26 Uhr

Hallo,

folgende Unschönheit, auf die ich mir keinen Reim machen kann.

Ich habe eine hilfe.chm Datei (mit Help&Manual 5 erstellt), in dieser verlinke auf eine PDF-Datei, welche relativ im selben Verzeichnis liegt wie die hilfe.chm Datei.

Fall der funktioniert:
Ich öffne jetzt das hilfe.chm File, klicke auf den Link und das PDF öffnet sich.

Fall der nicht funktioniert:
Ich rufe das hilfe.chm File aus meinem Programm auf, klicke auf den Link und nichts passiert, obwohl das hilfe.chm File ja schon zu öffnen geht, und die PDF-Datei daneben liegt.

Interessant ist noch, auf File-Ebene sieht das so aus:

bin\
--- Doku\
------ hilfe.chm
------ PDF-Datei
--- Program.exe

Kopiere ich das um in:

bin\
--- Doku\
------ hilfe.chm
--- PDF-Datei
--- Program.exe

..funktioniert auch der Link auf die PDF-Datei, aus der hilfe.chm Datei, aus dem Programm geöffnet.

Hier mein Aufruf:


            string path = string.Format(CultureInfo.CurrentCulture, @"{0}\Doku\hilfe.chm", AppDomain.CurrentDomain.BaseDirectory);

            if(File.Exists(path))
            {
                Help.ShowHelp(this, path);
            }

Ideen?

11.07.2011 - 15:50 Uhr

Wenn du keine externen Libs einbinden willst, dann nimm doch die Charts
aus dem System.Windows.Forms.DataVisualization.Charting-Namespace".

Wenn du .NET 4.0 verwenden kannst, würde ich behaupten geht es gar nicht besser.

Sample Environment

11.07.2011 - 13:47 Uhr

Generell muss man beides machen: Registrieren und Kopieren.
Die Reihenfolge sollte egal sein, Windows macht auch nichts anderes.

27.05.2011 - 15:22 Uhr

Aus meiner persönlichen Erfahrung kann ich Dir sagen, dass der Markt für diese Art von Projekte sehr sehr sehr klein ist.

21.04.2011 - 12:54 Uhr

Genau so ist es, und es gibt keine Alternative.

07.04.2011 - 14:57 Uhr

Und für die serielle SS empfehle ich Dir das noch:
Template SerialPort

Sieht reichlich wüst aus in Deiner Form1.cs.

21.03.2011 - 15:58 Uhr

Im Notfall selber schnell was schreiben:

Alle *.cs Files einsammeln, öffnen, und an Drucker senden.

20.03.2011 - 18:11 Uhr

Ich habe zwar das Problem im Moment ausgetrickst, in dem ich über eine bool Variable die Entscheidung checked/unchecked entscheide und setze. Das ist doch aber bestimmt nicht sauber programmiert!!!???

Doch, wie sonst? Controls selbst kann man nicht serialisieren, also serialisiert man Eigenschaften.

18.03.2011 - 11:40 Uhr

Hier nochwas zum Thema:
FIX for RTB Undo

17.03.2011 - 07:35 Uhr

Ich gebe die Aufgabe ab, 24h sind mir zu kurz....

16.03.2011 - 10:07 Uhr

Hallo zommi,

der Konstruktor an sich ging nicht zu öffnen, es folgte eine Exception vom Reflactor.
Es ging nur so, wie in meinem angehängten Bild.

Also, ich überleg mir was...

16.03.2011 - 09:19 Uhr

Also wie du das mit den -10 rausgefunden hast bleibt mir ein Rätsel.

16.03.2011 - 08:42 Uhr

Lösung:

Der geheime Text lautet "Bankgeheimnis".
Das Passwort ist "lkgnjokfejjop";

Vorgehensweise:
Reflektor!

Code:


namespace PW_hack
{
    static class Program
    {
        private static int numberA;
        private static int numberB;
        private static int numberC;
        private static int baseCharacter = 0x6d;
        private static string CryptedText = "Cctjjcjlqpqgp";

        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static void Main()
        {
            string refPass = Program.ReferencePassword();
            string refPassDecry = Program.Decrypt(refPass);

            string hashRef = Program.HashPassword(refPass);
            string hashEntered = Program.HashPassword("lkgnjokfejjop");

            bool result = hashRef == hashEntered; //Strike?
        }

        private static string ReferencePassword()
        {
            //Stupid Check removed...

            int[] numArray = new int[] { 11, 0x17, 0x3e, -11, 0x1f, -22, 0x18, 0x48, 0x53, 0x1f, 0x20, -24, -33 };
            numberA = 3;
            numberB = 7;
            numberC = -10; // hier auf -10 gesetzt, wie im Dissasebler gesehen (numberA + numberB = -10)

            StringBuilder builder = new StringBuilder();
            for(int i = 0; i < numArray.Length; i++)
            {
                char ch = (char)(baseCharacter + (numArray[i] / numberC));
                builder.Append(ch);
            }
            return builder.ToString();
        }

        private static string Decrypt(string password)
        {
            StringBuilder builder = new StringBuilder();
            for(int i = 0; i < Math.Min(password.Length, CryptedText.Length); i++)
            {
                builder.Append((char)((CryptedText[i] + password[i]) - baseCharacter));
            }
            return builder.ToString();
        }

        private static string HashPassword(string password)
        {
            byte[] bytes = Encoding.ASCII.GetBytes(password);
            return BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(bytes));
        }
    }
}

Comment:
Das war ne sehr schöne Aufgabe, hat mir wirklich Spaß gemacht und meinem Chef 1h meiner Arbeitszeit gekostet.

Ich überleg mir was neues (Das ich das noch erlebe...).

13.03.2011 - 07:34 Uhr

Du musst den Auslöse-Event (Z.B. Elsapsed) abbonieren...

11.03.2011 - 07:23 Uhr

WMI ist ein gutes Stichwort, damit kommst Du an die Soundkarte...

WMI-Reader

02.03.2011 - 07:33 Uhr

Habe meinen alten Code mit Deinem verglichen, hier die Unterschiede:

Folgende Sachen noch mitangeben:


process.StartInfo.WorkingDirectory = ...;

Und die Argumente noch erweitern um Angabe von:

"-cp " + CLASSPATH + ";" + STARTJAR + " " + MAINCLASS

Ich habe damals sehr lange dran gesessen beliebige Java-Programme über die Process-Klasse starten zu können, aber so lief es dann.

01.03.2011 - 13:36 Uhr

Hallo Bernd ich arbeite hier mit VS-2008 da gibt es ContextSwitchDeadlock doch noch...

Und im VS-2010 gibt es ContextSwitchDeadlock auch noch,
witzig wenn einem sein eigener Post die Lösung bringt...

09.02.2011 - 13:03 Uhr

In der gewünschten Klasse von P_A den Namespace von P_B hinzufügen (using).

08.02.2011 - 09:04 Uhr

Naja, "batch-pdf-silent-druck" ist schon trivial, nur das TIFF macht das Problem.

08.02.2011 - 08:43 Uhr

Ich mach das aktuell so:


/// <summary>
        /// Druckt ein PDF Dokument 
        /// </summary>
        /// <param name="path">Pfad zum Dokument</param>
        public static void PrintPDFFile(string path)
        {
            FileInfo fileInfo = new FileInfo(path);
            if(!fileInfo.Exists)
            {
                throw new FileNotFoundException();
            }

            int id = 0;

            try
            {
                using(Process proc = new Process())
                {
                    proc.StartInfo.Verb = "print";
                    proc.StartInfo.FileName = path;
                    proc.StartInfo.CreateNoWindow = true;
                    proc.StartInfo.UseShellExecute = true;
                    proc.StartInfo.ErrorDialog = true;
                    proc.Start();

                    id = proc.Id;
                    proc.WaitForExit(10000);
                }
            }
            catch
            {
                //IGNORE 
            }
            finally
            {
                HelperUtils.killProcessById(id);
            }
        }

        /// <summary>
        /// Beendet einen Prozess an Hand seiner Id
        /// </summary>
        /// <param name="id">ProcessId</param>
        private static void killProcessById(int id)
        {
            foreach(Process p in Process.GetProcesses())
            {
                if(p.Id == id)
                {
                    p.Kill();
                    break;
                }
            }
        }

08.02.2011 - 08:30 Uhr

Wie zum Geier kann ich mit iTextsharp PDF zu Tiff konvertieren?

Ups, das geht tatsächlich nicht mit iTextSharp, nur umgedreht.
Aufgrund der Fehlinformation die ich Dir lieferte hab ich grad mal ausgiebig gegoogelt.
Ich habe keine freie Bibliothek gefunden, die PDF zu TIFF konvertieren kann, kommerzielle Bibliotheken gibt es reichlich.

Eine Idee hab ich allerdings noch, wie wäre folgendes:

Mit iTextSharp die PDF-Files einlesen, diese als JPG abspeichern, und die JPGs wieder zu einem TIFF konvertieren. Hab ich selbst noch nicht gemacht, sollte aber funktionieren.

Konvertierung von JPG zu TIFF sollte z.B. hiermit möglich sein:

FreeImage Project

07.02.2011 - 15:54 Uhr

iTextsharp ist OpenSource und steht unter LGPL.
D.h. meines Erachtens es kann auch in kommerziellen Projekten verwendet werden.
Oder hab ich das falsch verstanden?

Ansonsten würde ich Dir auch den Weg vom Schlingel empfehlen, ist eine saubere, robuste und einfache Lösung.

07.02.2011 - 08:42 Uhr

Hier gibt's schicke geshadete Controls:

http://ascendnet.codeplex.com/