Wie schreibe ich am einfachsten einen News Scroller

iMarcG5

Mitglied
ich würde auch mal gerne was zu diesem Thema sagen.
Zunächst was zur Fragerei in diesem Forum und zweitens was zum Thread an sich!

Also:Ich spreche nun aus erfahrung, da ich in meiner Firma ins kalte Wasser geworfen wurde.
Ich hab noch nie mehr als Hello World programmiert und musste nun ein (doch recht großes) Programm schreiben in 3 Monaten.
Zunächst haben sich für mich viele Fragen aufgeworfen. Ich hab mir dann Visual C# Schritt für Schritt gekauft (kann ich nur empfehlen) und mal alles durchgemacht. Bis ich mich entschieden habe mal mit programmieren des Projekts anzufangen!

Falls es für Norbert und chironex etwas zu lange her ist, möchtre ich es nochmals erwähnen. AM ANFANG TUT MAN SICH SCHWER. es ist einfach so.
Bei einem muss ich recht geben: " Doch vorerst wäre ich mal damit zufrieden, wenn mir jemand ein Codebeispiel posten könnte." ist wirklich ein wenig dumm ausgedrückt. Es hat jhedoch den riochtigen hintergrund.
Für euch ist es kein Problem in 1 min schnell zu schreiben was er hören will. Dass ihr ihm dabei nicht postet was er später wirklich benutzt ist klar. d.h. er macht sich über euren Quellcode her und verändert ihn.
Das ist die beste art und wiese etwas zu lernen. Oder was meint ihr, warum es in den Lernbüchern auch so ist
und außerdem ist es wirklich so, dass hier oft irgendwas gesucht wird um rum zu mosern (achso ja... ich weis, dass ich nicht auf groß klein Schreibung achte)
ich fände ein klein wenig hilfreicheres miteinander wirklich gut.

Diese "da hast du nen link und schau wie du es schafft, denn ich hab es auch geschafft ohne dass mir jemand geholfen hat, weil alle schon immer so waren"- Mentalität ist wirklich erschreckend.
(Und dass das ich sage, der noch blutiger anfänger ist, das soll schon einiges bedeuten.)
Außerdem , wartet es einfach ab, gebt dem JJB 3 Monate und dann schaut er auch in der MSDN Library nach, weil er dann damit was anzufangen weiß.


Nun denn ... zum Thema:

Da ich ja wie gesagt auch nur anfänger bin, kann ich dir nur sagen wie ich es machen würde (maybe schlecht aber besser als nix.)

erstmal würde ich das ganze mit Threads machen, da sonst das dauernde aktualisieren zu viel Performance benötigt.
also:
Code:
using System.Threading; // nicht vergessen

dann den Thread deklarieren mit:
Code:
private Thread meinThread;

und dann muss du ihn erzeugen:
Code:
meinThread = new Thread(new ThreadStart(meineMethode)); //meineMethode ist die Methode die beim Thread aufgerufen wird
  meinThread.Name = "meinThread";

dann muss du in deiner Methode irgendwas machen damit dein Band läuft.
also:
Code:
private void meineMethode()
   {
   /*was du hioer machst bleibt dir selbst überlassen. 
  du könntest z.B. eine Laufvarible jedesmal wenn der Thread aufgerufen wird hochzählen
   und es dann als Pixel für dein Labekl in das du den Text schreibst nehmen
  (achtung, die Varible muss eine Klassen variable sein, da du sonst jedesmal beim
   Thread aufrufen die Variable zu null machst)
  
   Wo du das einlesen machst, bleibt dir überlassen.*/
   }

Also, das mein Vorschlag. Da ich nicht gegoogelt habe , weiß ich nicht ob es vielleicght eine Text.LaufVonRechtsNachLinks() - Klasse gibt, oder es anders besser geht, aber das kann uns Norbert Eder bestimmt besser sagen (der hats drauf)... v.a. wenn du mal was OO wissen willst ... hab zwar noch nie was gefragt, aber allgemein seine antworten.. Boah!!:eek:
naja.. vielleicht hab ich es auch mal so drauf.

PS: ein verbesserungsvorschlag wär net schlecht, dann würd ich auch was lernen

Achso ja, für Syntaxfehler garantier ich net... siehst du ja wenns net geht ;)

MfG Marc
 

Norbert Eder

Erfahrenes Mitglied
Du siehst das nicht ganz korrekt:

Jeder der anfängt hat es schwer - keine Frage. Nur manche setzen sich hin und sagen, dass sie jetzt Software-Entwickler sind, OHNE ihre Hausaufgaben zu machen. Und dazu gehört nun mal das Studium der Grundlagen.

Und wenn jemand daherkommt und meint "Gib mir mal Sourcecode, weil das gibts sicher eh schon tausendfach", dann stellts mir die Haare auf. Bekommt er dann einen Link von mir, dann soll er sich den durchlesen und DANN kann er nach den Dingen fragen die er nicht verstanden hat. Das kann doch nicht zu schwer sein?

Bevor mir hier Arroganz unterstellt wird: Ich sehe die Arroganz bei Leuten, die es sich nur einfach machen wollen. Als ich programmieren gelernt hab, hats das Internet noch nicht gegeben, ich hatte auch keine Gemeinschaft aus 100.000 Leuten die ich fragen konnte und es ging auch. Lesen ist da ein sehr entscheidender Faktor. Da habts es ihr heute eh viel einfacher, nur dass die meisten sich nicht mehr hinsetzen wollen um ein paar Artikel oder ein Buch zu lesen ..
 

JJB

Cogito ergo brumm
Also, wenn jemand meinen "Unterton" als Arrogant empfindet, möchte ich mich hier offiziell entschuldigen. Das ist mein Umgangston. Ich bin mir nicht bewußt, daß er eine derartige Wirkung hätte. Ich rede immer so. Und dabei denke ich mir nichts schlimmes. Mir hat man mal gesagt es würde etwas geschwollen klingen, aber von Arroganz wußte ich nichts.

Was meine Frage angeht. Ich habe eine legal erworbene MSDN und ein VS 2003 mit integrierter Hilfe. Und ich HABE gesucht. Sowohl in Google, als auch in der MSDN. Doch irgendwie habe ich bei Google nicht das richtige Suchwort getroffen und meine MSDN ist möglicherweise 2 Jahre zu alt.

Ich wußte, dass es für dieses Problem Lösungen in anderen Sprachen gibt (zB. HTML). Horizontale und Vertikale Scroller. Nur in C# habe ich das einfach nicht finden können. Und da das an sich etwas sehr gebräuchliches ist, war ich der Überzeugung, ich bin bloß zu blöd einen einfachen Befehl zu finden. Selbstgeschrieben habe ich das schon länger, doch das ruckelt, ist laufzeitabhängig und die Performance drückt die Verarbeitungsgeschwindigkeit, wenn der Text auch erst berechnet werden muß.

Zum Thema suchen und Googeln. Nur weil jemand noch keine Erfahrung hat, heißt das nicht, er ist zu blöd zu Googeln. Genauso wie es Norbert die Haare bei Fragen nach tausendfachem Sourcecode aufstellt, stellt es anderen die Haare auf bei Sätzen wie "geh mal Googeln". Es ist nur so, dass dieses ziellose umherstochern zwischen 354.852.985 Seiten nicht jedem das bringt was er sucht. Und daher wendet man sich gerne an ein Forum in welchem Leute sitzen, die das meist schon aus der Westentasche zaubern können. Das muß ja nicht direkt zum Problem passen, wie iMarcG bereits sagte. Man bastelt sich das zurecht. Und manchmal ist es ja nur eine Zeile an der es hakt.

Was ein Grundlagen Studium angeht, so hoffe ich dem Genüge getan zu haben. Ich habe 2 Jahre Turbo Pascal- & C-Programmierung gelernt und habe später in meinem Studium noch ca. 3 Jahre Projekt- & SW-Engineering, OO-Programmierung und sogar SW-Design gelernt. Doch das hilft einem in der Praxis oft wenig, da das Problem meist im Detail liegt.

Nochmal:
Ich will keinen mit Fragen belästigen oder verärgern, ich möchte keinen Unterton streuen und niemanden durch Abarten beleidigen. Ich suche nur etwas das ich andernorts ungenannter Gründe nicht finden konnte. Das soll wirklich niemanden kritisieren oer aufbringen.
 

Norbert Eder

Erfahrenes Mitglied
Du hättest ja eigentlich gleich sagen können, dass du schon einen Scroller hast, nur dass er eben flackert. Dann hätte ich folgendes gepostet:
Code:
SetStyle( ControlStyles.UserPaint, true );
SetStyle( ControlStyles.AllPaintingInWmPaint, true );
SetStyle( ControlStyles.DoubleBuffer, true );
SetStyle( ControlStyles.SupportsTransparentBackColor, true);
und die Sache wäre erledigt gewesen. Ach ja, musst in den Konstruktor deines Scrollers pasten.
 

JJB

Cogito ergo brumm
Irgendwie macht Double Buffering keinen Unterschied.
Ich lade eine RTB mit Text, dann kommt ein Thread und entnimmt dem Text die erste Zeile und schreibt den Text erneut. An diese Stelle blinkt der Text. Und wenn die Frequenz in den Bereich 500ms geht. Dann kann man vom TExt kaum mehr was erkennen, weil alles blinkt und flimmert. Selbst bei 1s oder 2s Zeitdauer blinkt es jedesmal wenn der Text neu geschrieben wurde. Was mache ich hier falsch, doer wie vermeide ich dieses blöde blinken der RTB beim Text schreiben ?

Jemand eine Idee ?
 

Christian Kusmanow

Erfahrenes Mitglied
Hallo JJB!

Ich denke mal Du hast SuspendLayout() & ResumeLayout() nicht vergessen, oder?
Wie zeichnest Du den das überhaupt? Sprichst Du die RichTextBox von dem anderen Thread aus an,
oder hast dem Thread das Graphics Objekt als Referenz mitgegeben?
Kannst mal bitte ein Beispiel posten wenns jetzt nicht daran lag.

MfG, cosmo
 

JJB

Cogito ergo brumm
Es mag unglaublich klingen, aber ich bin mittlerweile soweit, dass ich den Text und die Grafiken in die RTB zeichne und diese dann 13 mal um ein Pixel hochschiebe. Dann schiebe ich die RTB wieder um 13 Pixel nach unten und verschiebe eine Line an das Ende. Das ganze sorgt dafür, dass der Text inkl. Grafik einigermaßen sauber nach oben wandert. Allerdings eben mit Flackern. ist ziemlich dämlcih das so zu machen, aber ich habe einfach kein TopIndent gefunden.

Das mit des Suspend und Resume werde ich mal ausprobieren.
Das kommt mir irgendwie bekannt vor, ist aber schon zu lange her.

Danke !

------------------
(edit)

Das mit dem Suspend hat nichts gebracht.
Das Problem mit dem Flackern liegt daran, dass man beim Beschreiben der RTB zusieht wie der ganze Text an einem vorbeifliegt. Wenn man danach den Cursor wieder an den Anfang setzt sieht man das Geflimmer sogar doppelt.
Ich hab es so gelöst, dass ich die RTB für die Zeit des Beschreibens unsichtbar gemacht habe und danach wieder anzeige. Dadurch sehe ich den Flimmernden Text nicht. Vorrausgesetzt ich lade die Box nicht häufiger als alle 40-50ms.
Nun flimmert der Text nicht mehr, aber die Box verschwindet natürlich immer für einen kurzen Augenblick. Das reicht um den Hintergrund zu sehen und wenn der nicht weiß ist fällt es auf. Also habe ich eine leere RTB hinter die RTB gelegt und nun sehe ich einen Augenblick lang den weißen Hintergrund, der sich von meiner RTB nicht unterscheidet. Und der Text kommt so schnell wieder, dass es nicht auffällt dass er ausgeblendet wurde.

So funktioniert es. Allerdings ist das natürlich kein empfehlenswerter Scroller, der die ganze Box hin und her schüttelt. Ich konnte das Schütteln durch ein Panel verbergen und durch die hintere RTB sieht man einen richtigen Rahmen, elegant ist es trotzdem nicht. Nur funktionell.

Wenn irgendwann mal jemand eine elegantere Variante zusammenstellt, würde mich das sehr interessieren.

Soweit... Thema abgehakt denke ich.
 
Zuletzt bearbeitet:

Christian Kusmanow

Erfahrenes Mitglied
JJB hat gesagt.:
Es mag unglaublich klingen, aber ich bin mittlerweile soweit, dass ich den Text und die Grafiken in die RTB zeichne
Warum dann überhaupt noch eine RTB?
Diese erfüllt doch dann ihren Zweck nicht mehr.
Ein Label oder Panel währ doch da ausreichend, oder?
JJB hat gesagt.:
Das mit des Suspend und Resume werde ich mal ausprobieren.
Das kommt mir irgendwie bekannt vor, ist aber schon zu lange her.
Siehe TreeView ;)

MfG, cosmo