Laden...

Forenbeiträge von bra10 Ingesamt 27 Beiträge

11.03.2018 - 12:03 Uhr

Vielleicht ist es ein etwas merkwürdiges Anliegen, aber ich möchte jedes Mal, wenn die linke Maustaste gedrückt wird eine kleine wav-Sounddatei abspielen egal wo sich der Mauszeiger auf dem Bildschirm befindet. Nun hätte ich die Möglichkeit, das in jeder einzelnen Mausklickabfrage meines Programmes zu implementieren. Das ist aber verdammt umständlich. Gibt es einen globalen/formübergreifenden Maushandler, an den ich mich ranhängen kann?

Vielen Dank,
bra10

27.02.2015 - 17:10 Uhr

...für weitere Tipps bin ich weiterhin dankbar 😉

27.02.2015 - 16:42 Uhr

Ich habe bislang vorwiegend kleine Spielereien in C# mit XNA programmiert. Da muss man sich mit Events nicht groß auskennen. Nun arbeite ich mich gerade in WPF ein um ein kleines Spieleprojekt zu realisieren. Hierfür möchte ich, dass jedes Mal, wenn die linke Maustaste gedrückt wird, eine kleine Aktion ausführen wie z.B. einen Sound abspielen. Ich möchte hierfür dieses Event nicht an jedes anklickbare Element ranhängen, sondern möglichst nur ein einziges Mal.

Wie gehe ich vor?

07.05.2009 - 15:13 Uhr

Haben Sie ein Codebeispiel?

07.05.2009 - 14:22 Uhr

Ich habe ein kleines TCP-Chatprogramm zu Testzwecken geschrieben. Hierzu soll das Programm erst einmal im LAN nachschauen, ob schon ein Server auf dem entsprechenden Port arbeitet. Falls nicht, so startet das Programm selber einen Server und der nachfolgend eingeloggte User wird Client.

Hierzu muß ich nun die aktiven IP-Adressen im lokalen Netz in Erfahrung bringen. Wenn ich als Grundlage hierzu die eigene IP-Adresse nehme und die 255 weiteren möglichen einzeln durchpinge, so benötige ich hierfür indiskutabel viel Zeit.

Gibt es eine andere, insbesondere schnellere (!), Methode? Sind die IP-Adressen irgendwo (abfragbar) hinterlegt?

Vielen Dank,
Bra10

17.04.2009 - 07:32 Uhr

Erst einmal vielen Dank für die prompte Hilfestellung. ich hatte es ja schon geahnt, dass ich um eine (kleine) Datenbank nicht herumkomme...

16.04.2009 - 07:48 Uhr

Ich soll ein (kleineres) medzinisches Projekt planen. Nur muß ich im Rahmen dieses Projektes viele Daten speichern und kenne mich mit Datenbanken NULL aus.

Folgende Situation ist gegeben:

Patienten kommen in die Praxis und werden untersucht. Dabei werden unterschiedliche Untersuchungen (z.B. ein Belastungs-EKG) durchgeführt, evtl. auch Verlaufskontrollen. Jeweils nur eine Untersuchung pro Tag.

Mein bisheriger Lösungsweg hat nicht zum Ziel geführt:

Ich erstelle eine ArrayList der Klasse Patienten. In der Klasse Patienten sind die unterschiedlichen Untersuchungen als weitere Klassen (wegen der Folgeuntersuchungen wieder) als ArrayList hinterlegt. Das klappt alles hervorragend - nur leider nur bis ich die Daten abspeichern/serialisieren muß. Den XMLSerializer habe ich noch nicht erwogen.

Welcher Lösungsweg bietet sich für einen Programmierer mit keinen Datenbankkenntnissen hier an?

14.08.2007 - 18:24 Uhr

erst einmal vielen Dank für die vielen Infos.

Habe mir die Beta der Studioedition runtergeladen, lade gerade an der msdn. Bestellt habe ich mir das WPF-Buch von Adam Nathan.

also kann ich demnächst wohl durchstarten...

ich bin eigentlich guter Dinge, dass ich nicht bald wieder zu einem Kompromiss aus xna und winforms zurückgehe 😉

bra10

13.08.2007 - 18:32 Uhr

nach einem längeren Entscheidungsprozess habe ich mich nun doch dazu entschlossen mich in WPF einzuarbeiten, da es doch einige entscheidene Vorteile gegenüber WinForms besitzt.

Ich arbeite zur Zeit mit VS C#2005 Exp.Ed. und XNA GSE und bin gerade bei "Vorarbeiten" für ein mittelgroßes, relativ grafiklastiges Projekt in dem ich XNA mangels GUI-Unterstüzung nicht einsetzen möchte.

Meine beiden Fragen:

  1. Wenn ich Visual Studio C# 2008 beta runterlade und installiere, habe ich dann alles gleich an Bord und kann gleich mit WPF durchstarten oder muß ich noch verschiedene Komponenten nachinstallieren?

  2. Kann ich Visual Studio C# 2008 parallel zu meinem o.g. Setup (C# EE + XNA GSE) installiert haben, da ich auch zukünftig einige kleine Dinge mit XNA programmieren möchte?

Vielen Dank,

bra10

12.08.2007 - 10:24 Uhr

Hallo winSharp93,

ja ich weiß. MDX2beta ist ja auch schon rausgeschmissen worden aber mit MDX bietet XNA (noch) deutliche Vorteile. Über WPF habe ich mich noch nicht informiert, benötige ich dafür nicht Vista? eigentlich wollte ich noch 1-2 Jahre auf XP weiterarbeiten...

Es wäre schon schön, wennich mein jetziges Projekt unter MDX realisieren könnte.

bra

12.08.2007 - 09:57 Uhr

Ich habe erstmals eine Anwendung in der ich relativ schnell viele Grafikobjekte darstellen muß. Ich habe mich daher entschlossen mich ein wenig in MDX einzuarbeiten (mit dem Managed Direct X9-Buch von Tom Miller). XNA habe ich nicht gewählt, da auf der Form auch viele WinForms, dargestellt werden müssen.

  1. Ich erstelle nun testweise eine Windows Applikation, auf die Form kommt ein panel (panel1) und nur ein button (button1).

  2. Ich initialisiere eine device...


private Device device = null;
...
public void InitializeGraphics()
{
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed = true;
presentParams.SwapEffect = SwapEffect.Discard;
device = new Device(0, DeviceType.Hardware, this.panel1, 
         CreateFlags.SoftwareVertexProcessing, presentParams);
}

... ich gebe dort nicht die Form sondern das panel1 als "Zeichenoberfläche" an.

Gezeichnet wird in OnPaint


protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
device.Clear(ClearFlags.Target, System.Drawing.Color.CornflowerBlue, 1.0f, 0);
...
}

Nun das Problem: Panel1 funktioniert einwandfrei, jedoch sind alle WinForms weiß bzw. im Debbuging-Modus transparent dargestellt. Drücke ich jetzt auf button1 oder verändere z.B. die Größe des Windows, so wird dieser normal dargestellt. Ändere ich die Größe des Windows im Programm führt dieses nicht zu dem erwünschten Effekt.

Welches Problem liegt hier vor und wie kann ich es beheben?

Vielen Dank,
braten

11.08.2007 - 15:07 Uhr

Ich wollte abschließend einmal berichten.

Letztlich hat folgender Ansatz gut funktioniert:

Ich habe die Karte zu den Rändern hin zunächst einfach prozentual abgesenkt. Direkt am Kartenrand (x=0, y=0 oder x=XSize, y=YSize) auf 0% (=100% Absenkung), an der Grenze zur Absenkung (x=border, y=border, x=XSize-border, y=YSize-border) gar nicht. An den Kanten war das überhaupt gar kein Problem, in den Ecken ist es etwas frickeliger.

Anschließend habe ich die Randbereiche um eine zweite Perlin Noise Map zufällig weiter abgesenkt.

Die Aufsplittung einer Map in viele kleine PerlinNoise-Tiles oder das rüberkopieren waren also nicht notwendig - manchmal ist es eben doch einfacher als man zunächst denkt 😉

Weiter geht es nun mit der Erstellung von Flüssen auf der Karte...

Viele Grüsse!
bra

10.08.2007 - 21:26 Uhr

ja, so meinte ich das eigentlich auch. Ich finde das erst einmal einen praktikableren Ansatz als meinen; werde dann mal loslegen und beizeiten berichten!

Vielen Dank.

Bra

10.08.2007 - 20:02 Uhr

meinst Du damit, dass Du eine zufällige Perlin Noise Map "darüberlegen" würdest um ein natürliches Bild zu bekommen oder was meinst Du mit "Absenkung selbst wieder mit Perlin Noise berechnen"?

10.08.2007 - 19:52 Uhr

Hallo herbivore,

vielen Dank für die schnelle Anwort (wie immer!).

Das könnte eine gute Lösungsmögichkeit darstellen. Nur bei Landmassen die sich zum Rand hin verbreitern müsste man stärker absenken um einen natürlichen Festland-Schelf zu bekommen.

bra10

10.08.2007 - 18:51 Uhr

Hallo herbivore.

Das Löschen der Landmassen stellt kein Problem dar. Leider sind gerade die großen Landmassen diejenigen, die über den Ränder hinausragen und nach dem Löschen derselben bleibt einem nur noch eine Inselwelt a la Polynesien 🙁

bra10

10.08.2007 - 16:48 Uhr

Hallo!

Ich beschäftige mich momentan ein wenig mit der Generierung von heightmaps. Man stösst dabei relativ zügig auf den genialen Perlin Noise Algorithmus. Vom Grundprinzip funktioniert er auch prächtig: Wenn meine heightmap-Werte (zwischen 0-255) einen gewissen Schwellenwert (in meinem Fall 20) überschreiten, dann werden Landmassen unterschiedliche Höhe dargestellt. Alle Werte darunter befinden sich sozusagen unter der Wasseroberfläche.
Nun mein Problem: Ich möchte eigentlich eine realistische plane Landkarte generieren. Perlin Noise errechnet mir aber schon im Randbereich "Landmassen" raus wo eigentlich Wasser sein müsste. Die "Kontinente" sind daher nicht komplett, sondern durch den Randbereich abgeschnitten.
Bevor ich einen ganz komplizierten Weg gehe (z.B. Erkennung von kompletten, nicht abgeschnittenen, Landmassen und überkopieren in eine andere Karte) würde ich gerne von Euch wissen, ob es da noch andere (praktikablere) Lösungswege gibt.

Vielen Dank schon einmal im Vorraus!

Bra10

14.07.2007 - 17:46 Uhr

ich würde gerne der aufgerufenen Eventmethode (timerTick) über EventArgs gewisse Informationen zukommen lasse (in diesem konkreten Fall der Status einer bool-Variable). Wenn ich keine WinForms-Events benutze funktioniert das auch einwandfrei indem ich wie oben beschrieben eine eigene EventArgs-Klasse mit den entsprechenden Parametern ableite.

Natürlich kann ich auch eine "globale" bool-Variable setzen, auf die dann alle mögliche Methoden (u.a. timerTick) Zugriff haben - das finde ich aber... was soll ich sagen... weniger elegant 😉.

Bra10

14.07.2007 - 16:50 Uhr

o.k., ich sehe es ein...

dann muß ich es anders lösen.

Bra10

14.07.2007 - 13:13 Uhr

schade eigentlich...

gibt es denn eine Möglichkeit, EventArgs direkt "in" System.Windows.Forms.Timer zu überschreiben und eine bool-Variable hinzuzufügen?

Bra10

14.07.2007 - 12:50 Uhr

Ich muß noch einmal nerven... Ich dachte ich hätte das Thema Delegat/Events nun einigermaßen verstanden... dem ist wohl nicht so.

Ich habe einen Timer (tmr_timer). Wenn das Timer.Tick-Event ausgelöst wird möchte ich mit EventArgs einen eigenen bool-Parameter übergeben. Hierfür leite ich zunächst meine eigene EventArgsKlasse ReaktionArgs ab...


public class ReaktionArgs : EventArgs
{
      public bool erfolg;
      public ReaktionArgs(bool erfolg)
      {
          this.erfolg = erfolg;
      }
}

... und erstelle direkt anschließend einen entsprechenden Delegaten:


public delegate void ReaktionEventHandler(object sender, ReaktionArgs e); 

im Konstruktor meiner Klasse hänge ich die Methode timerTick an das Event tmr_timer.Tick meines Timers


this.tmr_timer.Tick += new ReaktionEventHandler(this.timerTick);

Aufrufe erfolgen dann mit


timerTick(this, new ReaktionArgs(true));

an die Methode


private void timerTick(object sender, ReaktionArgs e)
{ ... }

Für die Zeile: "this.tmr_timer.Tick += new ReaktionEventHandler(this.timerTick);" bekomme ich folgende Fehlermeldung:
Fehler1: Eine implizite Konvertierung vom Typ "Reaktionstest.Reaktion.ReaktionEventHandler" in "System.EventHandler" ist nicht möglich.

Was habe ich da falsch gemacht? Warum soll ich überhaupt konvertieren? Kann ich an tmr_timer.Tick nur EventArgs übergeben und keine hiervon abgeleiteten Klassen?

bin ratlos...

Bra10

14.07.2007 - 11:24 Uhr

hat geklappt!

Ein Dank an euch beiden!

Bra10

14.07.2007 - 10:10 Uhr

Ich habe zu Lernzwecken ein kleines "Reaktions-Spiel" geschrieben. In einer Textbox sollen dazu untereinander die Zeiten (in ms) geschrieben werden. Die Zeiten sind 3- bzw. 4-stellig (tick_stop). Hierzu verlängere ich den Ausgabestring (zeiten) der Textbox (tbx_times) nach jedem korrekten Mousclick:


zeiten += String.Concat(Convert.ToString(tick_stop), "\n"); 
tbx_times.Text = zeiten; 

Leider funktioniert die \n-Ausgabe ja nicht unter WinForms. Ich möchte auch eine saubere Lösung programmieren und z.B. nicht den string um die richtige Anzahl von Leerzeichen verlängern, so dass die neue Zeit in der nächsten Zeile erscheint.

Welche Lösung gibt es für dieses (kleine) Problem?

Schon einmal vielen Dank für die Hilfe!

Bra10

03.07.2007 - 13:18 Uhr

Vielen Dankl SeboStone,

nach der Auslagerung funktioniert es prächtig!

...wie gesagt: ein super forum!!!

bra10

03.07.2007 - 12:59 Uhr

Mit dem Timer ist das ganze kein größeres Problem. Ich möchte das ganze (nicht nur aus Lernzwecken) jedoch gerne in einen Thread verpacken...

Bra10

03.07.2007 - 12:17 Uhr

hallo herbivore,

erst einmal vorweg: ein super forum!!

leider bin ich anscheinend zu doof für dieses thread-thema und .net. ich habe doch schon ein extra-thread für die progressbar-veränderungen erstellt. warum blockiert dann mein haupt-thread? weil die Nebenthreadfunction über Invoke nun vom Haupthread (GUI-Thread) behandelt wird?

Gebe ich dem Hauptthread nicht genügend zeit, wenn ich den Nebenthread für 200ms schlafen lege?

Bra10

03.07.2007 - 11:38 Uhr

Hallo,

bin ein ziemlicher Newbie in der Programmierung im Allgemeinen und erst Recht .net.

Mein Problem:

Ich starte einen Thread, der hier als Beispiel eine ProgressBar durchlaufen lässt und aktualisiert. Hierbei blockiert die Anwendung ("keine Rückmeldung"). Ich dachte, durch Thread.Sleep(ms) kann ich dem Hauptthread mehr Ressourcen überlassen, aber anscheinend hängt die Anwendung in der endlosen While-Threadschleife.

Leider konnte mir die FAQ: meine GUI blockiert auch nicht helfen.

Was muß ich am u.g. Code ändern?

Vielen Dank im Vorraus!

Bar10


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace invoke
{
    public partial class Form1 : Form
    {
        public Thread tr;
        public int i = 0;

        public Form1()
        {
            InitializeComponent();

            tr = StartThread();
            tr.Start();
        }

        private Thread StartThread()
        {
            ThreadStart ThreadDelegate = new ThreadStart(ThreadFunction);
            Thread tr = new Thread(ThreadDelegate);
            return tr;
        }

        private void ThreadFunction()
        {
            while (true)
            {
                i++;
                if (i == 100)
                    i = 0;
                
                Thread.Sleep(200);
                
                if (progressBar1.InvokeRequired)
                {
                    progressBar1.Invoke(new MethodInvoker(ThreadFunction));
                    Thread.Sleep(50);
                    break;
                }
                else
                {
                    progressBar1.Value = i;
                    progressBar1.Update();
                }
            }
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            tr.Abort();
        }
    }
}