Beiträge von Spite82

    Wie sowas finzt würd mich grad interessieren mit Hilfe von CSS (siehe anderen Thread hier in der Programmierecke) da ich mich grad ein wenig mit CSS beschäftige (hab leider noch nirgends so richtig GUTE tutorials gefunden.....).

    Vielleict weißt du ein paar gute Links zum Thema CSS?
    Sorry falls ich hier das Thema ein wenig in die "Seite zerre" :)

    Ich werde hier auf jeden Fall noch ein wenig hereinschaun, was sich so tut, denn Menüs wollte ich auch schon mal mit so einem Effekt (hobbyhalber) bauen, bin damals aber kläglich gescheitert :)

    Lg
    Spite

    Finally hab ich eine "hybride" Version zusammengebaut :)

    Den Basis-Code der HTML-Datei generiere ich mittels simpler String-Befehle. Dabei setze ich zum schluss den WebBrowser.DocumentText. Was mir dabei auffiel war, dass dieser nicht "sofort" übernommen wurde. Durch das setzen des DocumentTextes werden anscheinend Events generiert, die dann das setzen übernehmen (Navigating usw....). Ich hab mir so geholfen:

    Code
    ///store the actual documenttext-length to determine when the update occured
                int docLength = browser.DocumentText.Length;
                ///set the new document text
                browser.DocumentText = sb.ToString();
                ///while the text wasn't updated let the application do other occuring events
                while (browser.DocumentText.Length == docLength)
                {
                    Application.DoEvents();
                }

    Durch das Application.DoEvents(); wird sichergestellt, dass trotz der Schleife Events abgearbeitet werden -> viola, nach dem 1.Durchlauf ist mein DocumentText gesetzt UND (was viel wichtiger ist) auch automatisch das Document.Body HtmlElement aktualisiert (dieses enthält fortan alle HtmlElement-Objekte.

    Nach dieser Erstellun ist es mir möglich normal HtmlElemente hinzuzufügen (HtmlElement.AppendChild), was ich persönlich sehr fein finde, denn so brauch ich mir nicht selbst was schreiben, was die Elemente an der richtigen Position einfügt :) :D.

    Zum Schluss hatte ich noch das Problem, dass ich ja wollte, dass die Page immer ganz nach unten Scrollt (zumindest zur Zeit).
    Dies habe ich so geschafft, falls es wen interessiert :):

    Code
    infoWebBrowser.Document.Body.ScrollTop = infoWebBrowser.Document.Body.ScrollRectangle.Bottom;

    Später werde ich noch sowas einbauen, dass nur ganz nach unten gescrollt wird, falls man nicht irgendwo in die Mitte hin gescrollt hat, dann soll es dort bleiben, auch wenn neue Logs auftauchen.

    Sodala - das wars hier erstmal - THX für eure Antworten auf jeden Fall!!

    Lg
    Spite

    Aaaaaalso:
    Ich bin jetzt mal umgestiegen vom Erstellen der html per HtmlElements (mit AppendChild usw....) auf eine "manuellere" Version, in der ich einen StringBuilder verwende.

    Das brachte mir zumindest mal die Möglichkeit diese "-Zeichen einzubauen. Und jetzt bin ich auch noch draufgekommen, dass hier der relative Verweis nicht funktioniert??!!?? Ich bau mir jetzt mit Hilfe von "Environment.CurrentDirectory" einen String zusammen, der dann relativ absolut :D zur Css-Datei zeigt - funzt.....

    Was ist das für ein "Schrott", dass man das nicht kammot per .Net machen kann, so, dass es auch funktioniert??

    wolfmann:
    Ja es gibt sicherlich einige nette Dinge da draußen, wie eben zB deinen Logger - aber ich werde sicherlich so ca. 10WebBrowser-Objekte verwenden in meinem Programm - mit unterschielichen Aufgaben!!! - Und dennoch hätte ich eben gerne eine Möglichkeit, den Stil einfach und global zu ändern - was ich ja jetzt auch geschafft habe - denn das Einbinden der Css funzt jetzt ;)

    Lg
    Spite

    Danke erstmals für eure Antowrten!

    Das mit den "-Zeichen kann ich mehr oder weniger nicht beeinflussen, da ich die Attribute, wie hier zu sehen, alle gleich setze:

    Zitat

    HtmlElement linkElem = doc.CreateElement("link");
    linkElem.SetAttribute("rel", "stylesheet");
    linkElem.SetAttribute("type", "text/css");
    linkElem.SetAttribute("href", "formate.css");

    (String-Operationen mal außen vor gelassen....)

    Ich habs jetzt auch schon mal versucht, die Css-Datei absolut anzugeben, mit keinerlei Änderung im Aussehen meines Tables.... sollte ich jetzt alle Styles manuell setzen?? Dann würde die Css ja wegfallen, was ich eigentlich als "kammot" angesehen habe....

    Da ich in meinem Programm einmal mehrere WebBrowser-Objekte haben werde wär das ja optimal um das Aussehen "global" zu steuern oder?
    Verstehe ich sowieso nicht, wieso es so "kompliziert" ist ein HTML-Dokument zu erstellen und dieses dann anzeigen zu lassen.... naja mal weiterprobieren...

    Lg
    Spite

    Hi ihr :)

    Ich habe mal wieder eine Frage an euch, die ich so nicht gefunden habe im Netz.... :(

    Es geht um ein C# .Net Programm, welches zB. verschiedene Aktionen/Ereignisse mitloggen soll. Ok, damit stehe ich vor einem Problem, denn ich habe mir gedacht, ich verwende für die Ausgabe ein WebBrowser-Objekt (Windows.Forms), damit ich mir alles Mögliche an der Ausgabe verändern kann, also z.B. Farbe, Text-Size, Font, Hintergrundfarbe, Textfarbe usw. - je nachdem, welcher Text mitzuloggen ist. Mit einer RichTextBox kann ich das alles ja nicht machen (bzw. nur sehr eingeschränkt).
    Nun hab ich es geschafft, mir ein kleines HtmlDocument zusammenzubauen mit einem Table, dem nach und nach die Logs hinzugefügt werden sollen.
    Soweit alles klar.
    Zuerst wird mein infoWebBrowser (WebBrowser-Objekt) initialisiert:

    Code
    infoWebBrowser.Navigate("about:blank");
                while (infoWebBrowser.Document.Body == null)
                {
                    Application.DoEvents();
                }
                //Code ist weiter unten zu finden
                myInfoLogger = new Logger(infoWebBrowser);

    und dann werden die Elemente hinzugefügt (noch ohne TableData-Elemente):

    Nur schaffe ich es jetzt leider absolut nicht in meinem Head des HtmlDocuments die Css-Datei richtig "einzubinden".
    Liegt es eventuell daran, dass bei meinem "Link"-Element bei "rel=" und bei "type=" im generierten HTML-Code die "-Zeichen fehlen, denn es steht dann sowas dort:

    Code
    <LINK rel=stylesheet type=text/css href="formate.css">

    ????
    Hat jemand eine Ahnung, wie das gehen könnte, bzw. was ich falsch mache??? Wenn ich den ".Style" von einzelnen Elementen manuell angebe, dann funktioniert alles..... Ich will es aber eben lieber extern in einer Datei, damit alle möglichen (später vorhandenen) WebBrowser darauf zugreifen können....


    Oder glaubt ihr, dass hier ist kompletter Schwachsinn und ich soll doch lieber eine RichTextBox nehmen?? Oder etwas ganz anderes???

    Lg
    Spite

    Danke anwesender :)
    Ja die .Cookie Property ist ein String (set und get) deshalb versteh ich das nicht ganz....
    Aber mit meinem "cookieString" geht es jetzt ja :)
    Und ja, da hab ich micht vertippt, sorry:

    Zitat

    cCon.Add(cCol);

    so muß es heißen :), das ist jetzt aber sowieso hinfällig :)

    Lg

    edit:
    Vielleicht hat es damit zu tun, dass mein HttpRequest in einem BackgroundWoker Thread durchgeführt wird?? Hat das eventuell Auswirkungen??

    Problem gelöst:

    Zitat

    request.Headers['Cookie'] = WebBrowser.Cookie


    funktionierte komischer weise nicht, aber einen String abspeichern:

    Zitat

    String cookieString = WebBrowser.Cookie;
    request.Headers['Cookie'] = cookieString


    funktioniert schon^^
    Komischkomisch....

    Hat jemand eine Ahnung, wieso das so ist?

    Lg
    Spite

    @all:

    Thx, für eure Bemühungen!
    Anscheinend liegt es an den Cookies, die zuerst vom Server gesendet werden, und ich diese nicht wieder mitgesendet habe -> "Ungüligte Session....".

    Nun hab ich aber noch ein Problem - ich habs zZ mal so geregelt:
    Ich hab jetzt einen WebBrowser und verwende HttpWebRequests, um den Source-Code von Seiten downzuloaden.
    Mein Login funktionier jetzt so, dass ich den Webbrowser die Anmeldung überlasse (redirect usw.), der dann die Hauptseite geöffnet hat. Im String WebBrowser.Cookie stehen dann die 3 Cookies getrennet mit "; " drinnen. Ich schaffe es jetzt allerdingds leider nicht diese meinem HttpRequest zu übergeben.

    Ich habs schon versucht einen CookieContainer zu erstellen aus dem String des WebBrowsers und dieses dann dem HttpWebRequest zuzuweisen. Das scheitert allerdings schon daran:

    Zweitens hab ich versucht einfach im HttpWebRequest sowas zu machen:

    Zitat

    request.Headers['Cookie'] = WebBrowser.Cookie <-dies wirft mir eine Exception....

    Hat jemand noch eine Idee zu den "shared Cookies"??

    Thx an alle erstmal :)
    Spite

    Danke ich seh mir das mal kurz an....
    ABER: optimal wäre: F
    Funktionalität einer WebBrowser-Control OHNE das Laden von jedweden Ressourcen (Bilder/Sounds) um Bandbreite einzusparen.... Ich programmiere grad C#/.NET und wäre froh, wenn man das irgendwie machen könnte, dass entweder meine funktionierende Variante mit WebBrowser keine Bilder herunterlädt ODER ich zB eben ein WebClient-Control verwende, welches bis jetzt allerdings nicht funktioniert..... (wegen der Weiterleitung, eventuelle Cookies usw.....)

    Gibts denn da keine Möglichkeiten das Ganze EINFACH zu bewerkstelligen?? Ich meine, ich kenne mich nicht so gut aus mit den ganzen HttpRequests usw....

    Vielleicht hilft noch eine kurze Beschreibung davon, was ich eigentlich machen will:
    Login bei einer Seite, nach Login wird man weitergeleitet und kommt zur Standardseite - OK, aber wenn ich sozusagen manuell die Weiterleitung mache und mir die URI zusammenbaue, dann komme ich immer auf eine Seite, wie: "ungültige Session_blablabl..."

    Das Alles soll im Hintergrund laufen, und dann will ich zusätzlich ein WebBrowser-Control haben, mit der ich auf der Seite auch herumsurfen kann..... (gleiche SessionID usw...)

    Sollte ich jetzt vielleicht 2 einzelne WebBrowser nehmen und einfach einen gar nicht anzeigen lassen oder wie??
    Bandbreite wäre halt mit einem WebClient und einem WebBrowser sehr viel besser ausgenutzt....

    Lg
    Spite

    Danke,

    aber ich programmier mir ein kleines Tool, mit dem ich Daten aus einer Webseite auslese.
    Dazu verwende ich zZ das "WebBrowser" - Objekt aus dem .NET-Framework. Vielleicht hätte ich das oben dazuschreiben sollen :) -> daher bringt mir die Einstellung im Firefox nichts...

    Danke trotzdem für deine Antwort!!

    Lg
    Spite

    Also wie der Titel es schon andeutet, geht es um das .net (c#).

    Ich will mich automatisch auf einer Seite einloggen und dann diverse informationen abfragen.
    Was mit dem WebBrowser gut geht hab ich sonst noch nicht hinbekommen.
    Der Nachteil mit dem Webbrowser ist, dass er alles herunterlädt, was er auch zum darstellen der Webseiten braucht (Bilder usw..., was ich allerdings gar nicht brauche....).
    Nun habe ich versucht das gleiche mit einem WebClient zu machen, mit dem Ergebnis, dass ich nach meinem "DownloadString(URI)" als String sozusagen nur sowas bekomme:

    Zitat

    <meta http-equiv='refresh' content='0; URL=...blablablaURL...>

    Das ist doch einfach ein redirect oder?
    Wie kann ich es jetzt bewerkstelligen, dass der WebClient automatisch zu der neuen Seite navigiert und dann dort den SourceCode downloaded??

    Ich hoffe es ist klar, was ich meine.... also beim WebBrowser hats dieses Problem nicht gegeben, denn die Weiterleitung hat dort anscheinend automatisch funktioniert.... wie kann man das auch mit einem WebClient machen??


    Oder besser mit HttpWebRequests und Responses arbeiten???
    Oder kann man dem Webbrowser beibringen keine Images usw. downzuloaden???
    Mir ist eigentlich egal, wie es dann im Endeffekt funktioniert... ;)

    Lg
    Spite

    Danke das wollte ich sogar schon machen, aber jetzt hab ich gott sei dank die Lösung!!! Nachdem ich ca. 5 Stunden oder so ;) gesucht habe, bin ich auf folgendes gestoßen:

    Ich kann das Paint Event verwenden um meinen eigenen Code auszuführen, also brauch ich gar nicht die OnPaint Methode :)

    in meiner "pictureBox1_Paint" erstelle ich ein neues Graphics Object (aus dem EventArgs heraus. Dann hab ich meine Funktionen so modifiziert, daß sie ein Graphics^ Objct übernehmen und in dieses wird dann hineingezeichnet!

    Funktioniert perfelkt! Kein flimmern, keinerlei Leistungseinbruch - wie geil ;)

    Lg
    Und danke trotzdem für deinen Tipp, denn das ist ja doch "so ähnlich"....

    Danke und lg
    Spite

    Hallo an alle,

    ich habe mal wieder eine Frage. Folgendes Szenario:

    Ich arbeite mit c++/.Net und Winforms. Ich habe eine pictureBox, in der ich ein selbst erstelltes Image anzeigen lasse. Ok, sehr fein -> resized automatisch usw.... Ich würde jetzt allerdings sehr gerne noch über das Image drüberzeichnen, was auch funktioniert, solange das Image nicht neu gezeichnet wird, denn dann ist alles drübergazeichnete wieder weg (irgendwie e klar)!

    Ich wüsste also gerne von euch, wie ich es anstelle, daß immer NACHDEM das Image gezeichnet wurde ich auch wieder meine Linien usw. drüberzeichnen kann. Wenn das jemand weiß, wäre das sehr optimal!!

    Ich denke es wird wahrscheinlich IRGENDEIN event geraised, wenn das Image neu zu zeichnen ist, aber welches??? Bzw. wenn ihr wisst welches, wie kann ich dann NACH dem neuzeichnen meine Linien drüberzeichnen?

    Hoffe jemand kennt das "Problem" und weiß, wie man sowas macht (vielleicht Paint Event?, aber wie?? oder oder oder.....) :)

    Lg
    Spite

    Ahh, jetzt hab ichs gefunden :) - Java...
    Naja wäre auch eine Möglichkeit, aber ich habe da an sowas wie SendMessage von Windows Forms gedacht, wär mir lieber....

    Naja, nachdem ich noch nichts dazu geschrieben habe (ein Programm meine ich) werde ich mir mal anschaun, wie man diese Methode auf "fremde" Handles anwendet...

    Lg
    Spite

    Hallo,

    ich habe wieder mal eine Frage an euch.
    Wie kann ich (bzw. ist es überhaupt möglich??) mittels Windows Forms zB. Mouse-Events zu simulieren?

    Ich habe im Internet schon einiges dazu gefunden, allerdings funktionieren die meisten Codeteile, die ich gefunden habe nur innerhalb des Programmes (es geht um Mouse-Events, nicht Keyboard-Events -> mittels SendInput()).

    Wie könnte ich jetzt zB einen Minesweeper-Solver bauen, der Mouse-Events benutzt?
    Oder wie wäre es in der Folge möglich, ein Programm zu schreiben, welches mit einem Javascript interagiert? (also richtige Mousposition für einen Klick herausfinden usw....)

    Ist zwar sicher nicht einfach, aber irgendwie muß es ja gehen, oder?
    Wenn wer Ideen hat - nur her damit.... :)

    Lg
    Spite

    Das is mir schon klar daß Javascript nicht Java ist ;)
    Naja, also eine *.js-Datei kanns ja auch sein oder??
    Dann steh der Code nicht direkt auf der Seite, oder lieg ich da falsch, und was ich meine ist jetzt, ein Klick, und da ist der Code ;)....

    Lg
    Spite

    Hallo an alle,

    ich habe da eine Frage an euch :)

    Wäre es irgendwie möglich an den Code eines, im Webbrowser ausgeführten, Javacodes zu kommen? Wäre hin und wieder recht cool, um zu sehen, wie bestimmte Dinge erstellt sind. Also nicht irgendwie den Quelltext der Seite durchforsten und irgendwie oberkompliziert usw...
    Was ich meine, ist: Gibt es etwas, womit man auf einen Klick sehen kann woher der Java-Wind weht???

    Wenn nicht - schade, aber was solls...

    Lg
    Spite

    Hallo,

    ich habe mal wieder eine Frage an euch.
    Ich habe ein kleines Programm geschrieben, (c++.net/Winforms)....
    Ich habe ein Texteingabefeld, in dem man Zahlen eingeben soll.
    Wenn Enter gedrückt wird wird die entsprechende Zahl als Text in einer ListBox ausgegeben (ist mir zumindest mal sehr einfach vorgekommen die ListBox zu nehmen, oder soll ich was anderes nehmen?)..
    Ok, allerdgins würde ich gerne die ausgegebenen Zahlen umfärben, je nach Zahl halt, zB "0" -> grün, "1" ->rot .......

    Geht das irgendwie??

    Ich hab nix dazu gefunden, wie man sowas machen kann....

    Lg
    Spite

    Noch eine Idee von mir:

    Kann es sein, daß dieser Fehler nur dann auftritt, wenn ein eigener Thread irgendwas macht?
    Sieht so aus:
    GUI ruft die render-Funktionen auf -> keine "Invalid Operation" -> alles ok
    GUI startet einen Thread welcher berechnungen durchführt -> "Invalid Operation", obwohl noch nichts passiert ist..... also gleich nach dem Aufruf der Funktion

    Kann das sein? Bzw, kann man das verhindern, oder sollte ich mal die Displaylisten mit meinem "Standard-Render-Thread" erstellen lassen?
    Ich hoffe es ist so halbwegs klar, was ich meine, bzw. liest sich das überhaupt wer durch ;)

    Lg
    Spite

    edit:
    Ja hab das gerade getestet, wenn ich den Render-Befehl aus einem eigenen Thread heraus gebe bekomme ich auch einen Error - hat jemand eine Ahnung, wie man das umgehen kann?