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:
Folgender Link aus dem PDF funktioniert nicht:
Der Vollständigkeit halber:
What version of the .NET Framework is included in what version of the OS?
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.
@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.
Hab ein Update im Eröffnungsthread bereit gestellt.
Änderungen:
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:
Viel Spaß damit!
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
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
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
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
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
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:
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
DataSet ?
@ 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.
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!
**:::
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
Version 2.0.11 wurde released.
Hab keine Lösung, aber in jedem Fall kannst Du Dir folgende Zeilen sparen:
...oder natürlich die "Using"s.
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
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ß.
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
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
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?
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.
Generell muss man beides machen: Registrieren und Kopieren.
Die Reihenfolge sollte egal sein, Windows macht auch nichts anderes.
Schau mal hier, Posts ab 12.01.11:
Aus meiner persönlichen Erfahrung kann ich Dir sagen, dass der Markt für diese Art von Projekte sehr sehr sehr klein ist.
Genau so ist es, und es gibt keine Alternative.
Und für die serielle SS empfehle ich Dir das noch:
Template SerialPort
Sieht reichlich wüst aus in Deiner Form1.cs.
Im Notfall selber schnell was schreiben:
Alle *.cs Files einsammeln, öffnen, und an Drucker senden.
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.
Ich gebe die Aufgabe ab, 24h sind mir zu kurz....
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...
Also wie du das mit den -10 rausgefunden hast bleibt mir ein Rätsel.
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...).
Du musst den Auslöse-Event (Z.B. Elsapsed) abbonieren...
WMI ist ein gutes Stichwort, damit kommst Du an die Soundkarte...
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.
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...
In der gewünschten Klasse von P_A den Namespace von P_B hinzufügen (using).
Naja, "batch-pdf-silent-druck" ist schon trivial, nur das TIFF macht das Problem.
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;
}
}
}
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:
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.
Hier gibt's schicke geshadete Controls:
Vielleicht kannst du dir das hier anpassen: