Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

11

22.03.2013, 14:13

danke erstmal für die Antworten :)
Also die Mails waren evt. ein schlechtes Beispiel für meine GUI Probleme, da ja logischer weiße immer eine maximale Anzahl angezeigt werden soll.
Allerdings binde ich teilweise meinen Content direkt an die GUI Elemente, z.b. bei meiner EPG preview:
Je nach zoomstufe/dauer der einzelnen Filme brauche ich unterschiedlich viele Buttons.
Zurzeit gehe ich so vor: liegt ein TVEvent im dargestelltem Zeitraum, wird ein neuer Button angelegt und der Content (Tag Attribut) hinzugefügt.

Würde ich nun die Alten Buttons nicht mittels dispose() entfernen, sondern nur visible ändern hätte ich sehr schnell sehr viele ungenutzte Buttons, was bei einem Programm das 24/7 laufen soll nun wirklich nicht erwünscht ist ^.^
Außerdem hatte ich noch Doublebuffering in meiner Form aktiviert, um ein flimmern zu verhindern. Könnten es daran liegen, dass einige clicks nicht registriert werden ? (Bild wird neugezeichnet, altes nicht mehr abgefragt ?)
...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

12

22.03.2013, 14:51

Es sollten auch nie Buttons nur invisible gemacht und immer neue erzeugt werden, sondern die existierenden sollten wiederverwendet werden. Ob das in Deiner Software natürlich Sinn macht, ist mit so wenig Informationen über die Use-Cases schwer zu sagen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

13

22.03.2013, 15:29

Warum die Dinge bei dir flimmern und du Rendermethoden selbst aufrufen musst ist mir allerdings immer noch ein Rätsel. Meine Erfahrungen mit Windowsforms sahen da anders aus. Dein Buttonproblem ist ja aber an sich eine andere Geschichte. Zeig doch mal den Code, in welchem du einen Button hinzufügst und das Clickevent setzt. An sich muss da ja der Fehler liegen. Vermutlich.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

14

23.03.2013, 12:24

uhh code zeigen wollt ich eig. nicht, da er recht obfuscated ist. Er wurde so runter geschrieben wie es mir in den Sinn kam und es hat ja anfangs ohne Probleme funktioniert 8| . Ist auch schon ne weile her seitdem ich diesen Part geschrieben habe, aber ich versuche es mal zu erklären:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
...
//hier bekomme ich alle Events zwischen zeitpunkt A & B -> MovingEPG ist die verschiebung nach links bzw. rechts, zoom ist die zoomstufe
                TVEvent[] recEvents = ChannelList[i].getEvents(DateTime.Now.AddHours(movingEPG), DateTime.Now.AddHours(movingEPG + zoom));                
                for (int k = 0; k < recEvents.Length; k++)
                {
                    DateTime startTime = DateTime.Now.AddHours(movingEPG);//startzeit
                    int curdaymin = (startTime.Hour * 60) + startTime.Minute;//umrechnen in Minuten
                    double dur = (recEvents[k].duration / 60) * ((zoom/2)*5.5);//Duration in Minuten * Pixel position
                    double pixlstart = (recEvents[k].start.Hour * 60) + recEvents[k].start.Minute - curdaymin; //startzeeit in Minuten
                    if(recEvents[k].start.Day != startTime.Day)
                        pixlstart -= 24*60;
                    pixlstart = (pixlstart * (zoom/2)*5.5) + 140; //to Pixel
                    Label newevent = new Label();
                    newevent.Text = recEvents[k].title;
                    newevent.Size = new System.Drawing.Size((int)dur, 25);//duration                     
                    newevent.Location = new Point((int)pixlstart, 40 + (i * 30));  //location start position, Y Postion on Screen
                    newevent.BackColor = System.Drawing.Color.Transparent;
                    newevent.BackgroundImage = bar;
                    newevent.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    newevent.Font = new Font("Georgia", 8, FontStyle.Italic);
                    newevent.ForeColor = System.Drawing.Color.White;
                    newevent.Tag = recEvents[k];
                    newevent.Click += new System.EventHandler(event_clicked);
                    newevent.Visible = true;
                    newevent.Show();
...


In TVEvents übergebe ich mir ein Array der TVEvents, die sich für den Aktuellen Channel (der Code befindet sich in einer weiteren schleife, die alle Channel durchläuft) im dem Zeitraum (A,B) befinden.
A & B werden je nach Verschiebung (etwas hat den Command nach links/rechts aufgerufen) übergeben und bei B die Zoomstufe addiert.
Nun durchlaufe ich die Übergebenen TVEvents und berechne zuerst wie viele Minuten des Tages vergangen sind. Berechne die Dauer des Events und rechne sie direkt nach zoomstufe in Pixel um.
Berechne wann am tag das TVEvent beginnt (in Minuten), ziehe die bereits vergangenen Minuten ab und rechne sie ebenfalls in Pixel um.
Ursprünglich habe ich die Events, nur als Text angezeigt, sie aber mittels:

C#-Quelltext

1
2
newevent.Tag = recEvents[k];
newevent.Click += new System.EventHandler(event_clicked);

zum Button gemacht und das Event hinzugefügt, um beim Event zusatz Optionen (Aufnehmen, Sprache wikieintrag etc.) einzubauen.
Ist es schneller direkt ein Button zu erzeugen oder macht das kein unterschied ?
Soo gibt sicherlich noch ein haufen Fehler hier drin, wo liegen meine Denkfehler ? :dead:

Zitat

Warum die Dinge bei dir flimmern und du Rendermethoden selbst aufrufen musst ist mir allerdings immer noch ein Rätsel.
Also, das hier ist nur das obere Viertel des Forms, andere Breiche (Mail/wetter/Haus) müssn auch noch einiges zeichnen, ohne Doublebuffering kann man zuschaun wie sich die Seite langsam aufbaut -_-

LG
SD
...

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

15

23.03.2013, 13:40

Warum baust du dir deinen Button selbst zusammen? Kannst du nicht einfach fertige Buttons benutzen? Dann unterscheiden sich die Methoden für das Click Event. Auf der ersten Seite ist es eine andere als hier im Code. Nur für den Fall, dass du hier vielleicht anderen Code beim Aufruf erwarten könntest;) Weiß ich ja nicht:)
Dann hängst du den Button nicht in die Form ein. Muss man den Button nicht irgendeinem Panel in der Form hinzufügen? Du erstellst ihn zwar, aber machst ja nichts damit.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

16

28.03.2013, 23:17

Warum baust du dir deinen Button selbst zusammen? Kannst du nicht einfach fertige Buttons benutzen? Dann unterscheiden sich die Methoden für das Click Event. Auf der ersten Seite ist es eine andere als hier im Code. Nur für den Fall, dass du hier vielleicht anderen Code beim Aufruf erwarten könntest;) Weiß ich ja nicht:)
Dann hängst du den Button nicht in die Form ein. Muss man den Button nicht irgendeinem Panel in der Form hinzufügen? Du erstellst ihn zwar, aber machst ja nichts damit.
Erst einmal Danke für die Antwort :) Wie schon geschrieben waren es am Anfang alles nur Labels und dienten der Informationsausgabe (es wurde per Sprache gesteuert). Ich wollte dann nur zusätzlich noch das normale UI hinzufügen. Ja die verschiedenen Methoden sind beabsichtigt, so ist es übersichtlicher im Code.
Buttons werden auf die jeweiligen Panel hinzugefügt, habe die Zeile beim kopieren hierhin übersehen ;)
Da meiner Oberfläche jetzt aber noch weitere Elemente hinzugefügt werden sollen, werde ich denke ich nicht drumherum kommen die komplette GUI nocheinmal neu zu schreiben :dash:
Diesmal wollte ich aber im vorhinein den Aufbau und Inhalt planen...

Bis jetzt habe ich mich was die Bildschirmausgabe betraf nur auf .Net beschränkt.
Da ich nun aber vor einer Kernsanierung meines Codes stehe, suche ich nun eine Bibliothek die folgendes können sollte:
-Audio Files abspielen -> benutzte bis jetzt die Soundplayer Klasse welche nur .wav abspielt, mindestens .mp3 Dateien sollten unterstützt werden...
-Videos abspielen/streams anzeigen -> hierfür starte ich eigentlich immer den VLC Player und öffne die mkv datei bzw. den mpeg stream, damit bin ich eig. auch noch zufrieden, wäre also optional :D
-Leichte 3D implementierung -> wäre cool einen kleinen 3D Kopf anzuzeigen, sehr sehr toll wäre es, wenn sich die Lippen synchron zum ausgegeben text bewegen ^.^
-3D GUI Elemente welche leicht dynamisch angelegt werden können und leicht zu verwalten sind! Damit man sich etwas darunter vorstellen kann: so eine Funktions weiße wäre toll
-wäre nützlich wenn es schon was fertiges für Imap4 hätte, dass was ich zusammen gezimmert habe macht ab und zu Probleme :hmm:
-Ansätze für einen Chat bot (optional :D)

Also meiner Meinung nach stehen mir Unity und XNA zur Auswahl, kennt wer noch alternativen, was würdet ihr mir empfehlen ?


...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

29.03.2013, 07:24

Bei den Dir scheinbar zur Verfügung stehenden Kenntnissen und Anforderungen, lediglich Unity.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige