Laden...
B
Big Al myCSharp.de - Member
Student Mannheim Dabei seit 25.02.2006 342 Beiträge
Benutzerbeschreibung

Forenbeiträge von Big Al Ingesamt 342 Beiträge

10.03.2010 - 19:41 Uhr

Hi,
ich glaube, du missverstehst uns, denn das innere Objekt muss doch nur dann das Verschieben abfangen, wenn der Mauszeiger wirklich auf ihm drauf ist.
Ich mein das so wie auf dem Bild, das ich angehängt habe.
Wenn das nicht so gemeint ist, dann mach doch auch mal ein Bild.

10.03.2010 - 08:50 Uhr

Hallo freundblase,
warum testest du nicht einfach, ob die Maus über dem eingebetteten Element liegt. Wenn ja, dann wird nur das verschoben. Wenn nicht, dann testest du, ob die Maus über dem übergeordneten Element ist. Wenn ja, wird das verschoben und wenn nicht, dann wird halt gar nichts gemacht. Am besten, du weist den Elementen einen Z-Wert zu, damit du schnell siehtst, was "oben" ist und ausgewählt werden soll. So müsste das doch am besten gelöst sein, oder habe ich was falsch verstanden?
Viele Grüße,
Big Al

08.03.2010 - 19:19 Uhr

Hi daniel.ge,
hast du es schon mal mit Regex versucht? Damit dürfte es kein Problem sein, den gesuchten Wert zu finden.
Big Al

//edit: da das dein erster Post ist, denke ich, dass dir das vielleicht weiterhilft:
Regex Tutorial von webstarg

09.12.2009 - 12:13 Uhr

Hallo Fabian,
ich hab das iTeufel Radio von Teufel. Das ist vom Klang her super und hat eine Weckfunktion und Radio, leider ist das Display aber sehr hell und kann nicht ausgeschaltet werden. Das stört ein bisschen, wenn es im Schlafzimmer steht. Ich hab nur nen iPod Touch, ob es mit dem iPhone 3GS funktioniert, weiß ich nicht.
Grüße,
Big Al

26.10.2009 - 20:22 Uhr

Hallo Leute,
eine neue Version ist online (siehe allererster Beitrag), aber ich kann jetzt nicht so viel von den Vorzügen schwärmen, weil ich unterwegs bin und den Beitrag mit meinem iPod schreibe. Mehr Infos und eine Screenshot gibt es nächstes Wochenende.
Big Al

//edit: So, jetzt ist ein neuer Screenshot und ein neuer Update-Eintrag da

22.10.2009 - 09:09 Uhr

Hi,
tut mir leid, dass ich erst so spät reagiere, ich hatte in letzter Zeit kein Internet.
Ich muss sagen, dass ich das Programm ein bisschen stiefmütterlich behandelt habe. Manchmal bastle ich noch ein bisschen, aber viel passiert garde nicht. Das liegt besonders daran, dass ich noch keinen Weg gefunden habe, formweite Shortcuts ohne Menü hinzubekommen.
Eine Struktur stellt man mit einer Klasse dar und setzt dann die Eigenschaft "Klasse" auf false. Ein bisschen unintuitiv, das stimmt schon.
Big Al

24.09.2009 - 17:37 Uhr

Hi,
so kann das ja schonmal gar nicht funktionieren, weil du den Stream ausliest, bevor du überhaupt das Programm startest. Da ist er natürlich leer.
Ansonsten in der MSDN:

Sie müssen UseShellExecute auf false festlegen, wenn Sie RedirectStandardOutput auf true festlegen möchten. Andernfalls löst das Lesen aus dem StandardOutput-Stream eine Ausnahme aus.

Grüße,
Big Al

08.06.2009 - 18:17 Uhr

Hallo ihr beiden,
ich glaube, winsharp93 hat Recht. Seht euch hierzu mal das hier an:
Junfeng Zhang's Windows Programming Notes : Don't do Shell Extension Handlers in .NET
Grüße,
Big Al

09.05.2009 - 17:01 Uhr

Hi,
@rechner: Ich glaube, dass deine Methode nur mit WinForms funktioniert.
@Wanginator: Hab leider grade kein Beispiel parat, aber es müsste ein Event namens PreviewMouseDown geben, das du in der Form auswerten kannst, ohne dass der Button das Event blockiert. Versuch auch mal VisualTreeHelper.HitTest.
Big Al

09.05.2009 - 10:44 Uhr

Hi Wanginator,
Wieso benutzt du nicht HitTesting, um den Button herauszufinden? Das ist mit WPF doch noch viel einfacher als mit WinForms.
Big Al

23.04.2009 - 10:29 Uhr

Hi winsharp93,
würdest du den Code der ViewModelFactory vielleicht veröffentlichen? Der würde mich nämlich sehr interessieren.
Viele Grüße,
Big Al

21.04.2009 - 20:19 Uhr

OK, ich weiß ja, dass du keinen Blödsinn programmierst, also werde ich das einfach auch so machen, bis ein besserer Vorschlag kommt.
Vielen Dank!

21.04.2009 - 20:09 Uhr

Hallo WinSharp93,
vielen Dank für das Beispiel. An diese Methode habe ich schon gedacht, aber ist es dann richtig, dass das ViewModel das gewrappte Model nach außen hin zeigt? Ich dachte, dass sollte versteckt sein. Bin ich da vielleicht etwas zu streng vorgegangen?
Big Al

21.04.2009 - 19:47 Uhr

Hallo,
auch ich beschäftige mich gerade mit dem MVVM-Pattern und stehe vor einem Problem:
Ich habe in meinem Model eine Klasse Room, die eine Collection von Items enthält. Also in einem Raum sind mehrere Gegenstände. Wenn ich das jetzt in ein ViewModel packe, habe ich ein ItemViewModel und ein RoomViewModel. In diesem habe ich dann eine ObservableCollection<Item>.
Wie kann ich nun, wenn in diese ein ItemViewModel eingefügt wird, der darunterliegenden Klasse Room ein normales Item in die Collection<Item> einfügen? Irgendwie muss ja das ItemViewModel "ausgepackt" werden, um das Model zu aktualisieren.
Genauso ist es auch bei einfachen Properties. Wie stellt man es an, einer ViewModel-Klasse ein Property zu geben, dessen Typ wiederum ein ViewModel ist und wie leitet man dessen Wert an die gewrappte Model-Klasse weiter?
Viele Grüße,
Big Al

05.02.2009 - 17:45 Uhr

Hi,
ja, das Problem ist mir aufgefallen. Es liegt daran, dass Icons, wenn sie mit GDI+ gezwichnet werden, irgendwie nie gezoomt werden können. Keine Ahnung warum und eine Lösung habe ich auch nicht gefunden.
Big Al

03.01.2009 - 17:38 Uhr

Hi,
wenn ich das richtig verstehe, möchtest du so etwas wie Enso programmieren (oder hast es schon). Das solltest du dir vielleicht mal ansehen:
Enso
Grüße,
Big Al

13.12.2008 - 18:14 Uhr

Hey,
vielen Dank, das ist wirklich um einiges kürzer!
Leider funktioniert das Laden im Hintergrund noch immer nicht.
Selbst wenn ich die SetMaterial()-Methode im ProgressChanged-EventHandler aufrufe, gibt es einen CrossThreadCall in der SetMaterial()-Methode.
Ich hänge mal das Projekt an. Das ist jetzt alles erst einmal quick 'n dirty, denn ich möchte zuerst das Laden der Bilder verbessern. Es wird im "Eigene Bilder"-Ordner nach Bildern gesucht und dort müssen zumindest 3 Bilder vorhanden sein (Wie gesagt, quick 'n dirty 😄)
Bin für alle Vorschläge sehr dankbar!
Big Al

13.12.2008 - 07:58 Uhr

Hi,
also das BackgroundWorker-Problem ist gelöst, ich wusste nicht, dass man die GUI-Zugriffe nur im ProgressChanged- oder RunWorkerCompleted-EventHandler und nicht in der DoWork-Methode machen darf.
Big Al

11.12.2008 - 21:21 Uhr

Hi,
also ohne es getestet zu haben:


private void Window_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            double x, y;

            x = e.GetPosition(this).X;
            y = e.GetPosition(this).Y;

            DoubleAnimation xanim = new DoubleAnimation((x, new                      
            System.Windows.Duration(TimeSpan.FromSeconds(2)));

            DoubleAnimation yanim = new DoubleAnimation((y, new 
            System.Windows.Duration(TimeSpan.FromSeconds(2)));

            player.BeginAnimation(Canvas.LeftProperty, xanim);
            player.BeginAnimation(Canvas.TopProperty, yanim);
        }

So sollte es ungefähr funktionieren.
Viele Grüße,
Big Al

11.12.2008 - 17:27 Uhr

So, es sieht so aus:
Mein Code des Button-Click-Events:


        delegate void PageLoadDelegate(int pageNr);
        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            CreatePage();
            PageLoadDelegate del = new PageLoadDelegate(LoadImageForPage);
            del.BeginInvoke(pages.Count - 1, null, null);
        }

Der Code zum Festlegen des Materials, in dem es zu einer TargetInvokationException kommt, obwohl ich den Dispatcher benutze:


delegate void SetMaterialDelegate();
        public void SetMaterial(Material material, Material backMaterial)
        {
            Model.Dispatcher.BeginInvoke((SetMaterialDelegate)delegate()
            {
                GeometryModel3D geomodel = ((GeometryModel3D)Model.Content);
                geomodel.Dispatcher.BeginInvoke((SetMaterialDelegate)delegate()
                {
                    try
                    {
                        geomodel.Material = material;
                        geomodel.BackMaterial = backMaterial;
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                    }
                });
            });
}

Wenn gewünscht kann ich auch mal das ganze Projekt posten.
Grüße,
Big Al

11.12.2008 - 17:16 Uhr

Hi,
erst mal danke für deine Hilfe. Im zweiten Thread geht es aber um WinForms, ich benutze aber WPF. Außerdem sollte der BackgroundWorker eigentlich die Aufrufe automatisch an den UI-Thread weiterleiten. Siehe hierzu:
WPF Multithreading with BackgroundWorker
Allerdings scheint es trotzdem nicht zu funktionieren. Ich muss nochmal genau gucken, welche Exceptions geworfen werden und werde meine Ergebnisse hier mitteilen.
Viele Grüße,
Big Al

11.12.2008 - 11:43 Uhr

Hi,
aber wie kann es daran liegen, wenn die komplette LoadImages() Methode ausgeführt wird und ihre Laufzeit gemessen werden kann? Die Form hängt sich seltsamerweise nach dem Laden auf.

//Edit: Ich habs auch schon mit einem BackgroundWorker probiert, allerdings hängt der sich dann auf, wenn ich die Materialien zuweisen möchte, obwohl er mit WPF durch den DispatcherSynchronizationContext eigentlich gut funktionieren würde.

11.12.2008 - 09:46 Uhr

Hi,
ich programmiere gerade einen Bildbetrachter, der die Bilder eines Ordners in Buchform darstellt. Durch dieses Buch kann man dann durchblättern und die Bilder sollen dynamisch geladen werden, wenn man ein paar Seiten umblättert.
Jetzt wollte ich anfangs schonmal 10 Bilder im Vorraus laden und tue das in der LoadImages() Methode, die in dem WindowLoaded-Event aufgerufen wird. Allerdings bleibt das Fenster immer nach (nicht während!) dem Laden der Bilder hängen.
Die Stopwatch zeigt immer an, dass das Laden der Bilder ca. 550 Millisekunden dauert und dann bleibt die Form für ca. 30 Sekunden schwarz.
Außerdem habe ich festgestellt, dass die Properties DecodePixelHeight und DecodePixelWidth überhaupt keine Auswirkungen haben. Auch wenn das Bild ein anderes Seitenverhältnis hat, wird es mit dem richtigen geladen. Außerdem ändern sich die Ladezeiten nicht. Sogar wenn ich beide auf 1 setze, bleibt die Zeit gleich.
Hier ist mal der Code zum Laden der Bilder:

Images: List<string> mit den Pfaden zu den Bildern
pages: List<BookPage> mit den einzelnen Seiten (Die Geometrie wird schon vorher erstellt) und dann in der LoadImages Methode über SetMaterial bemalt


        System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            sw.Start();
            LoadImages();
            sw.Stop();
            System.Diagnostics.Debug.WriteLine(sw.ElapsedMilliseconds.ToString() + " Milliseconds");//immer circa 550 Millisekunden
        }

        void LoadImages()
        {
            int imgIndex = 0;
            for (int x = 0; x <= 10; x++)
            {
                BitmapImage img1 = new BitmapImage();
                img1.CacheOption = BitmapCacheOption.OnLoad;
                img1.DecodePixelHeight = 100;
                img1.DecodePixelWidth = 100;
                img1.BeginInit();
                img1.UriSource = new Uri(Images[imgIndex]);
                img1.EndInit();

                imgIndex++;
                if (imgIndex == Images.Count)
                    break;

                BitmapImage img2 = new BitmapImage();
                img2.CacheOption = BitmapCacheOption.OnLoad;
                img2.DecodePixelHeight = 100;
                img2.DecodePixelWidth = 100;
                img2.BeginInit();
                img2.UriSource = new Uri(Images[imgIndex]);
                img2.EndInit();

                pages[x].SetMaterial(new DiffuseMaterial(new ImageBrush(img1)), new DiffuseMaterial(new ImageBrush(img1)));

                imgIndex++;
                if (imgIndex == Images.Count)
                    break;
            }
        }

Ich hoffe jemand hat eine Idee, woran das liegen könnte...
Vielen Dank,
Big Al

01.11.2008 - 07:20 Uhr

Hallo Trekki,
eine Bestätigungsmeldung wäre ja blöd, da geht der Sinn des Programms verloren. Ich würde es z.B. benutzen, um vor dem Schlafen noch Musik zu hören. Da darf dann nicht nochmal nachgefragt werden, wenn ich schlafe.
Grüße,
Alex

27.10.2008 - 12:51 Uhr

@techno_prog
Hi, also vom ganzen Programm möchte ich noch nicht den Sourcecode freigeben, denn vor allem der WinForms Teil sieht bei mir irgendwie immer arg grausam aus (button1 bis button12, button8_Click(object sender, EventArgs e) und ähnliches undurchschaubares Zeug), aber wenn du Fragen zu einem bestimmten Teil hast, kannst du mir gerne eine PM schreiben. Dann werde ich diesen Teil erst verständlicher machen und dir dann schicken 😁
Big Al

21.10.2008 - 17:00 Uhr

Hier noch ein Screenshot.
Übrigens kann man mit dem Mausrad zoomen.

21.10.2008 - 16:56 Uhr

Beschreibung:
Hi,
Wie mal versprochen veröffentliche ich hier mal das Hauptcontrol des ProjectDesigner.NET. Allerdings in überarbeiteter Fassung.
Es handelt sich um ein Control, in dem die Items auf einer zoom- und verschiebbaren Fläche liegen. Außerdem kann auch die Position der Items vom User verändert werden. Sofern das Item es ermöglicht, kann auch seine Größe vom User geändert werden.
Als Beispielanwendung habe ich einen rudimentären Windowsexplorer beigefügt.
Der kann und darf gerne erweitert werden.
Gesteuert wird das Control über Tools, die durch Vererbung auch erweitert werden können.
Einige Items und Tools werden jetzt nicht benutzt, können aber schnell aktiviert werden, indem ihr einfach die Tool-Eigenschaft des Zoom-View-Controls mit einer Instanz belegt.
Für die Navigation habe ich noch das ViewNavigator-Control und das ScrollControl beigelegt.
Feedback ist sehr erwünscht!!!
Big Al
Schlagwörter: Explorer, Zoom, Transformation

18.10.2008 - 10:36 Uhr

Hi Herbivore,
das Problem ist, dass ich keinen MenuStrip habe und somit auch keine MenuItems verwenden kann.

18.10.2008 - 07:45 Uhr

@ErfinderDesRades
Hi, daran hab ich auch schon gedacht, das ist aber ein bisschen blöd, wenn man Controls dynamisch erstellt. Zwar kann man auch bei denen das Event registrieren, aber das finde ich unschön. Wenn es anders nicht klappt, wird es aber so gemacht.
Ich glaube aber nicht, dass das die Methode ist, die der MenuStrip benutzt.
@Th69
Ich glaube das Zerstören des Process-Objects hat keine Auswirkungen auf den Prozess selbst. Es dient ja nur dazu, einen Zugriff auf diesen bereitzustellen.
So sieht es auf jeden Fall aus, wenn man sich die Process.Close() Methode, die ja von Dispose aufgerufen wird, im Reflector anschaut.
Grüße,
Big Al

17.10.2008 - 16:21 Uhr

So, ich hab jetzt was zusammengebastelt, allerdings nur für globale Hooks:


public static class ShortcutProvider
    {
        private const int WH_KEYBOARD_LL = 13;//Sollte 2 sein, dann funktioniert es     
                                                                   //aber nicht
        private const int WM_KEYDOWN = 0x0100;
        private static LowLevelKeyboardProc _proc = HookCallback;
        private static IntPtr _hookID = IntPtr.Zero;

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr SetWindowsHookEx(int idHook,
        LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool UnhookWindowsHookEx(IntPtr hhk);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
        IntPtr wParam, IntPtr lParam);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr GetModuleHandle(string lpModuleName);

        //Enthält die Shortcuts und die dazugehörigen Aktionen
        private static Dictionary<Keys, EventHandler> shortcuts = new Dictionary<Keys, EventHandler>();

        public static void Attach()
        {
            _hookID = SetHook(_proc);
        }

        public static void Detach()
        {
            UnhookWindowsHookEx(_hookID);
        }

        private static void ProcessShortcut(Keys shortcut)
        {
            Keys scut = shortcut;
            if (ctrlDown)
                scut |= Keys.ControlKey;
            if (altDown)
                scut |= Keys.Alt;
            if (shiftDown)
                scut |= Keys.ShiftKey;

            if ((shortcuts.ContainsKey(scut))
                && (shortcuts[scut] != null))
            {
                shortcuts[scut](null, EventArgs.Empty);
            }
        }

        public static void AddShortcut(Keys shortcut, EventHandler action)
        {
            if (!shortcuts.ContainsKey(shortcut))
                shortcuts.Add(shortcut, action);
        }

        public static void RemoveShortcut(Keys shortcut)
        {
            shortcuts.Remove(shortcut);
        }

        private static IntPtr SetHook(LowLevelKeyboardProc proc)
        {
            using (Process curProcess = Process.GetCurrentProcess())
            using (ProcessModule curModule = curProcess.MainModule)
            {
                return SetWindowsHookEx(WH_KEYBOARD_LL, proc,
                      GetModuleHandle(curModule.ModuleName), 0);
            }
        }

        static bool ctrlDown = false;
        static bool shiftDown = false;
        static bool altDown = false;

        private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
        private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
            {
                int vkCode = Marshal.ReadInt32(lParam);
                Keys key = (Keys)vkCode;
                if ((key == Keys.LControlKey) || (key == Keys.RControlKey))
                    ctrlDown = true;
                else if ((key == Keys.LShiftKey) || (key == Keys.RShiftKey))
                    shiftDown = true;
                else if (key == Keys.Alt)
                    altDown = true;
                else
                    ProcessShortcut((Keys)vkCode);
            }

            return CallNextHookEx(_hookID, nCode, wParam, lParam);
        }
    }

Wenn ich aber bei "private const int WH_KEYBOARD_LL" den Wert 2 für einen Applikationsweiten Hook angebe, funktioniert es nicht mehr 🤔
Kann jemand helfen?

17.10.2008 - 14:57 Uhr

OK, danke dir.
Da werde ich mich mal reinhängen und ein für alle mal eine Komponente draus machen.
Ist ja schrecklich, dass sowas mit dem Framework allein nicht geht.
Ich melde mich, wenns funktioniert.
Bis dahin,
Big Al

17.10.2008 - 14:22 Uhr

Hi norman_timo,
im Konstruktor wird das KeyPreview = true doch schon erledigt:


public ShortcutProvider(Form form)
        {
            Form = form;
            Form.KeyPreview = true;
            Form.PreviewKeyDown += new PreviewKeyDownEventHandler(Form_PreviewKeyDown);
        }

Sicherheitshalber hab ich auch im Kostruktor der From KeyPreview auf true gesetzt, aber es funktioniert trotzdem nicht.
Big Al

17.10.2008 - 13:44 Uhr

Hi,
ich versuche gerade, formweite Shortcuts einzurichten. Leider haut das aber nicht ganz hin. Das ist mein Ansatz:


using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace ProjectDesignerNET3
{
    public class ShortcutProvider
    {
        public ShortcutProvider(Form form)
        {
            Form = form;
            Form.KeyPreview = true;
            Form.PreviewKeyDown += new PreviewKeyDownEventHandler(Form_PreviewKeyDown);
        }

        Dictionary<Keys, EventHandler> shortcuts = new Dictionary<Keys, EventHandler>();

        void Form_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            ProcessShortcut(e.KeyCode);
        }

        private void ProcessShortcut(Keys shortcut)
        {
            if ((shortcuts.ContainsKey(shortcut))
                && (shortcuts[shortcut] != null))
            {
                shortcuts[shortcut](Form, EventArgs.Empty);
            }
        }

        public Form Form { get; private set; }

        public void AddShortcut(Keys shortcut, EventHandler action)
        {
            if (!shortcuts.ContainsKey(shortcut))
                shortcuts.Add(shortcut, action);
        }

        public void RemoveShortcut(Keys shortcut)
        {
            shortcuts.Remove(shortcut);
        }
    }
}

Das Event wird aber leider nie abgefangen, obwohl KeyPreview true ist.
Der MenuStrip kann das doch auch, da kann es doch nicht so schwer sein, Shortcuts in der ganzen Form zu haben, ohne ein MenuStrip dranzuklatschen und dann einfach die Items zu verstecken. Eine andere Möglichkeit, die schon diskutiert wurde, ist die, Shortcuts systemweit mit Global Hooks zu erstellen und dann zu überprüfen, ob die eigene Form im Vordergrund ist, aber das ist sehr unelegant.
Weiß jemand, wie der MenuStrip das macht und wie man das in eine eigene Komponente einbauen kann?
Viele Grüße,
Big Al

17.10.2008 - 12:51 Uhr

Hi,
das geht bestimmt irgendwie, aber mir fällt jetzt nur ein,
eine transparente Form mit FormBorderStyle auf None als Topmost über den Desktop zu legen. Hab ich noch nicht ausprobiert, könnte aber so vielleicht funktionieren.
Man muss halt irgendwie die Form öffnen, wenn auf dem Desktop die bestimmte Maustaste gedrückt wird. Allerdings muss dann der Code auch so verändert werden, dass der Provider nicht das MouseDown-Event der Form, sondern sozusagen des Desktops aufgreift.
Grüße,
Big Al

28.09.2008 - 09:12 Uhr

Na dann ist ja alles klar 😁
Leider kann ich dir aber auch nicht mehr sagen, als serial.
Grüße,
Big Al

27.09.2008 - 10:47 Uhr

Detailinformationen der Karte überprüfen

Das hoert sich aber ziemlich verdaechtig an. Was willst du denn mit dem Programm machen?
Big Al

27.09.2008 - 08:38 Uhr

Hallo,
@floste

#Ein reproduzierbarer kleiner Bug: erstelle ein objekt, erstelle ein objekt eines anderen Typs, wähle das neuere aus und fahre mit der Maus über das Menue view->selected Object

Japp, ist ein Bug, aber schon behoben. Das lag glaube ich daran, dass ich ein RadImageButtonElement genommen habe. Hab es jetzt durch einen normalen RadButton ausgetauscht.

Bei Elektrizität macht es einen Unterschied, an welchem Anschluss ein Kabel angeschlossen ist. Also darf sich das niocht so einfach durcher verschieben ändern.
(Vielleicht 2 Elemente im hintergrund verwenden)

Da hab ich schon eine Idee...

#Ich hab irgendwie hab ich manchmal Schwirigkeiten, 2 Objekte zu verbinden.

Welcher Art sind denn die Schwierigkeiten?
Vielen Dank für die konstruktive Kritik!!!
Ich hab da übrigens auch noch einen Bug gefunden. Wenn man zwei Objekte verbindet, dann eines löscht und das Löschen rückgängig machen will, gibt es eine StackOverflowException. Ist aber schon behoben.
@hobofan:
Ist aber lang nicht so schick wie meins, oder 😉
Big Al

26.09.2008 - 15:53 Uhr

Hi,
nein, perfekt ist das Programm leider noch lange nicht. Gerade habe ich wieder einen Bug gefunden und behoben:
Wenn man ein Objekt erstellt und es gleich verschiebt und das dann rückgängig machen möchte, wird das Objekt auf die Position (0, 0) gesetzt. Ist jetzt aber behoben. Außerdem konnte man das Einfügen von Membern nicht rückgängig machen --> auch behoben, außer man macht es übers PropertyGrid, das bietet nämlich kein Event, das feuert, wenn eine Auflistung geändert wurde 🙁
Naja, ist behoben und wird beim nächsten Release stimmen.
Leider bin ich gerade als Freiwilliger in Afrika und es dauert immer ewig, bis ich etwas hochgeladen habe, deshalb werde ich die Files nicht so oft aktualisieren können.
Viele Grüße,
Big Al

26.09.2008 - 15:25 Uhr

Hi,
also das Control ist ein bisschen sehr auf den Zweck ausgelegt, gerade die Objekte darzustellen, die ich im Projekt verwende. Das ist aber noch ein Punkt, den ich ändern will, um das Control auch in anderen Projekten zu nutzen. Wenn ich es ein bisschen umgeformt habe, werde ich es sicher hier posten. Der ganze Sourcecode ist mir zu peinlich 😄, aber für Fragen stehe ich gerne bereit.
Wie sieht es eigentlich mit der Performance aus? In letzter Zeit habe ich mit dem Tool das Problem, dass die Objekte sich wie in Gummi gegossen bewegen, wenn man sie im Control rumzieht. Da das aber auch in den Versionen ist, die vorher noch super funktioniert haben, muss es eigentlich an etwas anderem liegen. Trotzdem würde ich gerne wissen, wie flott das ganze bei euch ist. Besonders wenn man ein Objekt anklickt und gleich weiterzieht, denn dann müssen auch noch dynamisch die Member-Buttons erstellt werden und es kann zu einem Ruckler kommen. Wie sieht es bei euch damit aus?
Viele Grüße,
Big Al

26.09.2008 - 14:53 Uhr

undhätte wohl selbst etwas ähnliches programmiert^^

Und was hättest du anders gemacht, wenn du so etwas programmiert hättest?
Ich wäre sehr erfreut über Vorschläge, denn es herrscht bei mir gerade sowas wie eine kreative Flaute X(
Big Al

26.09.2008 - 10:41 Uhr

Hallo liebe Community,
Ich möchte euch heute den neuen ProjectDesigner vorstellen. Er ist jetzt in Englisch, aber ich glaube das ist kein Problem für euch, oder?
Die offensichtlichste Neuerung ist das Ribbon, das ich integriert habe. Außerdem kann man nun Member direkt per Mausklick auswählen.
Es gibt ein neues Set für Elektronik, das aber noch nicht ganz ausgereift ist und nur mal zum Testen da ist. Alles weitere findet ihr im Tutorial, das ihr über das Startmenü aufrufen könnt. Ich wäre über viel Feedback sehr erfreut!
Den Download findet ihr im ersten Post, einen Screenshot im zweiten.
An dieser Stelle möchte ich außerdem winsharp93 für seine geduldige Betatesterei danken: Danke!!!
Big Al

25.09.2008 - 10:15 Uhr

Hi,
hört sich interessant an, aber wie wärs mit einem kleinen Screenshot?
Ist immer ein bisschen blöd, wenn man erst das File runterladen, neues Projekt erstellen, Dll einbinden und dann alles kompilieren muss, um das Control zu sehen.
Grüße,
Big Al

22.09.2008 - 15:38 Uhr

na da scheinst du aber nicht besonders gründlich gesucht zu haben.
Du kannst GDI+ benutzen, das ist aber langsam. Für ein Spiel solltest du DirectX oder OpenGL nehmen. Das benötigt aber eine ganze Menge Einarbeitung. Nur mit Konsole und WinForm kommst du da nicht weit. Aber wenn du nach DirectX suchst, findest du sicher was.
Grüße,
Big Al

20.09.2008 - 11:02 Uhr

Hi,
das kommt auch auf das Ribbon an. Wenn du z.B. das Telerik-Ribbon benutzt, kannst du nur die mitgelieferten Controls benutzen. Bei anderen kann es natuerlich funktionieren, da hab ich keine Erfahrungen.
Gruesse,
Big Al

19.09.2008 - 13:10 Uhr

Hi,
ihr habt natürlich alle vollkommen Recht.
Sorry, ich hätte vielleicht nochmal drüberlesen sollen.
Den Parameter "strength" habe ich benutzt, weil der vom Benutzer im PropertyGrid geändert werden kann. Der Benutzer kann mit Prozentzahlen mehr anfangen. Allgemein ist alpha aber wirklich besser.
Vielen Dank und viele Grüße,
Big Al

19.09.2008 - 10:46 Uhr

Beschreibung:

Dieser Code zeichnet einen Shiny-Effekt in ein gegebenes Rechteck. Sieht dann aus wie im angehängten Bild.


        public static void DrawShineEffect(Graphics g, Rectangle rect, int alpha)
        {
            if ((alpha > 0) && (alpha <= 255))
            {
                using (System.Drawing.Drawing2D.GraphicsPath shinePath = new System.Drawing.Drawing2D.GraphicsPath())
                {
                    Point end = new Point(rect.X + rect.Width, rect.Y + rect.Height);
                    shinePath.AddBezier(rect.Location, new Point(rect.X + rect.Width / 2, rect.Y + rect.Height), new Point(rect.X + (rect.Width * (3 / 2)), rect.Y + rect.Height), new Point(rect.X + rect.Width, rect.Y + rect.Height));
                    Point p = new Point(rect.X + rect.Width, rect.Y);
                    shinePath.AddLine(end, p);
                    shinePath.AddLine(p, rect.Location);

                    using (Region r = new Region(shinePath))
                    {
                             Color shineColor = Color.FromArgb(alpha, 255, 255, 255);
                             using (System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(shinePath.GetBounds(), shineColor, Color.Transparent, -35, false))
                             {
                                    g.FillRegion(brush, r);
                              }
                      }
                }
            }
        }

Edit2: using eingefügt, Danke JAck30lena!
Schlagwörter: Shiny, Spiegelung, Effekt

21.08.2008 - 10:50 Uhr

Hi,
ich würde dir empfehlen, mal den Namespace System.CodeDom anzuschauen. Du erstellst dir einen Objektgraphen und kannst dir über Generatoren dann den Code generieren lassen. Das benötigt etwas Einarbeitung und man kann auch nicht alles machen (z.B. kein Linq oder ähnliche neumodische Späße), aber im Grunde ist es das, was du suchst.
Grüße,
Big Al

15.07.2008 - 12:37 Uhr

Hi,
um die Struktur darzustellen eignet sich vielleicht ein TreeView besser.
Wenn man dann einen Eintrag wählt, werden dessen Untereinträge zum Editieren angezeigt. Nur so ein Vorschlag...
Big Al

13.06.2008 - 11:59 Uhr

Hi Tonka,
also ich benutze auch WeifenLuo für meinen Modellierer für Projekte, vielleicht solltest du dir mal das mitgelieferte Docking-Beispiel im Reflector angucken.
Viele Grüße,
Big Al

25.04.2008 - 07:21 Uhr

Hi wayne 42,
informiere dich mal über den BackgroundWorker, der ist dafür gut geeignet.
Grüße,
Big Al