Laden...

Forenbeiträge von Robertico Ingesamt 344 Beiträge

24.01.2011 - 17:08 Uhr

Obwohl es in Wireshark nur so plätschert kommt in der Console nichts an.

Wiresharkm zeigt auch die IPv6 Adresse an. Siehe Anhang

Bzw. es kommen schon welche an, aber nicht von dem Server, den ich möchte

24.01.2011 - 14:08 Uhr

Danke bSharp,

wenn ich jetzt nicht weiterkomme, bin ich selbst schuld.

Paket rein alles vom Header raus

Gruß Robert

23.01.2011 - 19:40 Uhr

Ist ja nicht nur das.

Da wird auch noch anderes drüber geschickt. Außerdem will ich das paralell zum
Spiel machen und dazu muss er on sein.

Will eigendlich nur wissen, wie bekomme ich die IP-Pakete in eine Variable.

Gruß Robert

23.01.2011 - 12:45 Uhr

Da kommt z.B so etwas an. Das hätte ich gerne zum verarbeiten

HTTP/1.1 200 OK

Content-Type: text/xml;charset=UTF-8

Content-Length: 329

Server: Jetty(7.0.2-SNAPSHOT)



<body xmlns='http://jabber.org/protocol/httpbind'><message xmlns="jabber:client" to="robertico@87.119.203.67/xiff-bosh" type="groupchat" id="m_70" from="global-1@conference.87.119.203.67/rastalix"><body>ui dann beser nicht.... danke vishant ^^</body><bbmsg xmlns="bbmsg" playerid="141023" playername="Rastalix"/></message></body>
23.01.2011 - 11:40 Uhr

Was ich jetzt dazu bräuchte ist eine Richtung, wie ich das in C# realisiere. Einen zweiten Listener kann ich ja nicht installieren.

Außerdem ist dann eine Funktion in Wireshark: Follow TCP-Straem. in der sind die Daten, die ich bräuchte

Gruß Robert

20.01.2011 - 14:53 Uhr

Danke Witte,

den hab ich. Und bei http://www.codeplanet.eu/tutorials/development/technic/22-was-ist-tcp-ip?.html

kann man auch noch etwas übers Grundsätzliche lesen. Später auch über C#

Gruß Robert

19.01.2011 - 09:34 Uhr

Danke,
hat mich schon weiter gebracht.

Mit Freund Google habe ich ein Tool gefunden mit dem ich jetzt erst mal sehen kann, was dort passiert.
http://www.ethereal.com/

Gruß Robert

19.01.2011 - 08:34 Uhr

Hallo alle,

möchte wärend eines Spiels die Unterhaltung zwischen dem Server und meinem Browser abhören.

Habe einen Listener versucht, aber da geht nur einer.

Hat jemand eine Idee wie ich vorgehen könnte?

Gruß Robert

26.04.2010 - 17:49 Uhr

Danke
sth_Weird und herbivore,

zu anderen Zeiten würde mich das schon reizen etwas dazu zu progammieren. Nur jetzt kommt mir etwas fertiges sehr gelegen. Vielen dank

Robert

26.04.2010 - 16:06 Uhr

Hallo alle,

meine Tochter möchte mit Ihrer Klasse einen Rap über ihre Lehrer machen.
Und da ich etwas mehr als nur an einem PC gerochen habe, möchte sie, dass ich das aufnehme und nachher mit der Musik mische.

Ein Mikrifon habe ich mir bei "du bist doch nicht blöd" gekauft. Nun brauche ich etwas, mit dem ich den Kindern helfen kann.

Jemand eine Idee?

Gruß Robert

06.01.2010 - 15:30 Uhr

Habe leider Windows 7 Ultimate 64bit nicht sonst würde ich es probieren.
Eine e-Mail könnte da richten Robert.Schmitz.Stolberg@googlemail.com (bekommst du das projekt zum testen, verbessern)

Gruß Robert

29.12.2009 - 08:18 Uhr

Vielen Dank itstata und Stipo,

in Wikipedia ist ein Link, mit dem man an die angekündigten Daten kommt.
http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/

Dann habe ich noch etwas gefunden, dass ich noch näher untersuchen möchte:

http://interactiveearth.blogspot.com/2008/01/create-your-own-google-earth.html

Gruß Robert

28.12.2009 - 09:32 Uhr

Hallo alle,

kann mir jemand sagen, wie ich an Höhendaten von Deutschland (oder ein Stück in meiner Nähe,Aachen) komme?
Suche mir schon seit Tagen einen Wolf daran.

Gruß Robert

25.11.2009 - 12:40 Uhr

Hallo,

schau mal im Designer, ob der den nicht setzt. Habe bei Properties schon desöfteren ungewolltes setzten gehabt.

Gruß Robert

25.11.2009 - 11:55 Uhr

Hallo MrSparkle,

natürlich hast du Recht damit. Aber ich kann mich noch genau erinnern an meine Anfangszeit. Man fühlt sich hilflos und weiss nicht, wie es in diesem Forum zugeht.

Der Hinweis war sicher nötig, aber bei jemandem der 1 Beitrag hat kann man davon ausgehen, dass er noch lernen muss.

Ich hätte es etwas freundlicher formuliert. 😁

Gruß Robert

25.11.2009 - 09:13 Uhr

Warum nimmst du nicht ein UserControl und legst die TextBox und den Button nebeneinander an. Ist zwar optisch nicht der Knaller, erzielt aber den selben Effekt.

Genau.
Oder, du machts bei Erscheinen des Buttons die Textbox um die Breite des Buttons kleiner. Und natürlich wieder größer wenn er verschwindet.
Dies wäre am besten auch in einem UserControl zu machen. Wo mans braucht einfügen und fertig.

Gruß Robert

25.11.2009 - 08:42 Uhr

Hallo alle,

weis nicht ob veraltet, aber habe mir das einmal angesehen.
Dabei habe ich festgestellt, dass bei Erscheinen und Verschwinden einer Scrollbar die Message WM_SIZE kommt.

Nun könnte man aufgrund der dann in LParam liegenden Größe genaue Schlüsse ziehen ob und welche Scrollbar sichtbar ist.

Die Funktion aus obigem Beitrag liefert aber noch mehr Werte mit denen ich auf das ScrollValue schließen konnte.

Dabei ist das entstanden:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.ComponentModel;

namespace ListViewTest
{
    class ScrollEventArgs : EventArgs
    {
        public ScrollEventArgs(bool _isVisible)
        {
            this.isVisible = _isVisible;
        }
        public bool IsVisible
        {
            get
            {
                return (isVisible);
            }
        }
        bool isVisible;
    }
    class ScrollListView : ListView
    {
        public delegate void EventHandler(Object sender, ScrollEventArgs e);
        public event EventHandler VScrollBarVisibleChanged;
        public event EventHandler HScrollBarVisibleChanged;
        public enum WindowsMessages : int
        {
            WM_SIZE = 0x0005,
        }

        public short LOWORD(int l)
        { return ((short)(l & 0xffff)); }

        public short HIWORD(int l)
        { return ((short)(l >> 16)); }

        void SetScollBarVisibility(OBJID which, bool isVisible)
        {
            switch (which)
            {
                case OBJID.HSCROLL:
                    if (isHScrollBarVisible != isVisible)
                    {
                        isHScrollBarVisible = isVisible;
                        if (HScrollBarVisibleChanged != null)
                        {
                            HScrollBarVisibleChanged(this, new ScrollEventArgs(isVisible));
                        }
                    }
                    break;
                case OBJID.VSCROLL:
                    if (isVScrollBarVisible != isVisible)
                    {
                        isVScrollBarVisible = isVisible;
                        if (VScrollBarVisibleChanged != null)
                        {
                            VScrollBarVisibleChanged(this, new ScrollEventArgs(isVisible));
                        }
                    }
                    break;
            }
        }


        bool isVScrollBarVisible = false;
        public bool IsVScrollBarVisible
        {
            get { return isVScrollBarVisible; }
        }

        bool isHScrollBarVisible = false;
        public bool IsHScrollBarVisible
        {
            get { return isHScrollBarVisible; }
        }    

        protected override void DefWndProc(ref Message m)
        {
            base.DefWndProc(ref m);
            switch (m.Msg)
            {
                case (int)WindowsMessages.WM_SIZE:
                    SetScollBarVisibility(OBJID.HSCROLL, IsScrollBarVisible(OBJID.HSCROLL));
                    SetScollBarVisibility(OBJID.VSCROLL, IsScrollBarVisible(OBJID.VSCROLL));
                    break;
                default:
                    break;
            }
        }

        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // ScrollListView
            // 
            this.ResumeLayout(false);

        }

        [DllImport("user32.dll", SetLastError = true, EntryPoint = "GetScrollBarInfo")]
        private static extern int GetScrollBarInfo(IntPtr hWnd,
        OBJID idObject, ref SCROLLBARINFO sbi);

        [StructLayout(LayoutKind.Sequential)]
        public struct SCROLLBARINFO
        {
            public int cbSize;
            public RECT rcScrollBar;
            public int dxyLineButton;
            public int xyThumbTop;
            public int xyThumbBottom;
            public int reserved;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
            public int[] rgstate;
        }

        public struct RECT
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;
        }

        enum OBJID : uint
        {
            /// <summary>Die horizontale ScrollBar.</summary>
            HSCROLL = 0xFFFFFFFA,
            /// <summary>Die vertikale Scrollbar.</summary>
            VSCROLL = 0xFFFFFFFB
        }

        private bool IsScrollBarVisible(OBJID scrollBar)
        {
            SCROLLBARINFO sbi = GetSbi(scrollBar);
            return sbi.rgstate[0] == 0;
        }
        SCROLLBARINFO GetSbi(OBJID scrollBar)
        {
            SCROLLBARINFO sbi = new SCROLLBARINFO();
            sbi.cbSize = Marshal.SizeOf(sbi);
            int result = GetScrollBarInfo(Handle, scrollBar, ref sbi);
            if (result == 0) throw new Win32Exception();
            return sbi;
        }
        public float HScrollValue
        {
            get
            {
                SCROLLBARINFO sbi = GetSbi(OBJID.HSCROLL);
                if (sbi.rgstate[0] != 0)
                {
                    return float.NaN;
                }
                int thumbLen = sbi.xyThumbBottom - sbi.xyThumbTop;
                int rest = sbi.rcScrollBar.Right - sbi.rcScrollBar.Left - 2 * sbi.dxyLineButton - thumbLen;
                return (float)(sbi.xyThumbTop - sbi.dxyLineButton) * 100f / (float)rest;
            }
        }
        public float VScrollValue
        {
            get
            {
                SCROLLBARINFO sbi = GetSbi(OBJID.VSCROLL);
                if (sbi.rgstate[0] != 0)
                {
                    return float.NaN;
                }
                int thumbLen = sbi.xyThumbBottom - sbi.xyThumbTop;
                int rest = sbi.rcScrollBar.Bottom - sbi.rcScrollBar.Top - 2 * sbi.dxyLineButton - thumbLen;
                return (float)(sbi.xyThumbTop - sbi.dxyLineButton) * 100f / (float)rest;
            }
        }
    }
}

Gruß Robert

23.11.2009 - 13:58 Uhr

Hallo alle,

war in einem Lehrgang, bei dem die Lehrer desöfteren irgendwelche Dateien auf die Sticks der Besucher kopieren mussten.
Bei 20 Personen ist das natürlich ein Aufwand.

Stick rein, Dateien suchen, rüber schieben, Stick abmelden (Für manche war letzeres wichtig), Stick raus und der nächste.

Habe mir gedacht, das geht doch einfacher. Warum haben wir einen PC?

Nun daraus ist das angehängte Programm entstanden.

Voraussetzung ist, dass bei Start der Aktion kein Stick eingesteckt ist.
Nun müssen sie nur noch:
Dateien auswählen. Aktion starten.
Anschließend nur Stick rein, warten auf Fertigmeldung. Stick raus. Nächster.
Wenn gewünscht (Default) meldet das Programm den Stick ab.

Alles einstellbar. Eine Kurzanleitung ist auch dabei.

Gruß Robert

PS: Die Kurzanleitung wird bei Start des Programms ins Verzeichnis geschrieben und beim Beenden wieder gelöscht. Wenn sie jemand haben möchte, dann während das Programm läuft kopieren.

€dit: Noch eins, meine beiden letzten Snippets sind dort eingebaut u.a. eigene, überschriebene MessageBox. Wäre lieb, wenn jemand irgendwelche Irrungen mitteilt.

Und habe festgestellt, dass es auch sehr praktisch sein kann, wenn man auch nur eine Kopie aus mehreren Verzeichnissen erstellen möchte.

Und natürlich können auch komplette Verzeichnisse kopiert werden.
Bei "C:\" wird es wohl lange dauern und der Stick wird zu kein sein.
Dies sagt das Programm aber.

22.11.2009 - 19:44 Uhr

MessageBoxIcon erweitern

Möchte man den alten Mülleimer dazu haben:

    enum MessageBoxIcon
    {
        None = 0,
        Error = 16,
        Hand = 16,
        Stop = 16,
        Question = 32,
        Exclamation = 48,
        Warning = 48,
        Information = 64,
        Asterisk = 64,
// dies dranhängen
        Mülleimer,
    }

und

        internal void SetIcon(MessageBoxIcon icon)
        {
            switch (icon)
            {
                case MessageBoxIcon.None:
                    tableLayoutPanel2.ColumnStyles[1] = new ColumnStyle(System.Windows.Forms.SizeType.Absolute, 0);
                    break;
                case MessageBoxIcon.Error:
                    tableLayoutPanel2.ColumnStyles[1] = new ColumnStyle(System.Windows.Forms.SizeType.Absolute, 55F);
                    pictureBox1.Image = new Bitmap(Statics.StopIcon.ToBitmap(), 38, 38);
                    break;
                case MessageBoxIcon.Question:
                    tableLayoutPanel2.ColumnStyles[1] = new ColumnStyle(System.Windows.Forms.SizeType.Absolute, 55F);
                    pictureBox1.Image = new Bitmap(Statics.QuestionIcon.ToBitmap(), 38, 38);
                    break;
                case MessageBoxIcon.Exclamation:
                    tableLayoutPanel2.ColumnStyles[1] = new ColumnStyle(System.Windows.Forms.SizeType.Absolute, 55F);
                    pictureBox1.Image = new Bitmap(Statics.ExclamationIcon.ToBitmap(), 38, 38);
                    break;
                case MessageBoxIcon.Information:
                    tableLayoutPanel2.ColumnStyles[1] = new ColumnStyle(System.Windows.Forms.SizeType.Absolute, 55F);
                    pictureBox1.Image = new Bitmap(Statics.InformationIcon.ToBitmap(), 38, 38);
                    break;
// dies dranhängen
case MessageBoxIcon.Mülleimer:
tableLayoutPanel2.ColumnStyles[1] = new ColumnStyle(System.Windows.Forms.SizeType.Absolute, 55F);
pictureBox1.Image = new Bitmap(Statics.GetLargeIcon(101).ToBitmap(), 38, 38);
break;
            }

22.11.2009 - 19:13 Uhr

Beschreibung:

Mit ging wieder etwas auf die Nerven.
Hatte eine Anwendung, bei der zusätzlich ein Explorer benutzt wird.
Kommt ein Fehler vor, so starte ich eine MessageBox. Wie Windows es will, liegt die dann hinter dem Explorer und der Anwender sieht nur, dass sich nichts tut.
Mehr als die Messagebox wollte ich aber nicht. Nur deren Position bestimmen.
Habe ich nicht geschafft und daher habe ich dies gemacht. (War mehr oder weniger nur Fleißarbeit)

Es sind 6 Dateien, die man auch in eine packen könnte. Der Übersicht halber habe ich das aber gelassen.
*InterneForm.cs (mit Anhang) *MessageBox.cs *MessageBoxProperties.cs *MessageBoxStatics.cs *Statics.cs

Wenn man den Dateien den namespace seines Programms verpasst, so wird System.Windows.Forms.MessageBox überschrieben (o.ä)

Nachteil der ganzen Geschichte, man müsste sie in jeden namespace packen, in dem man sie braucht. Ansonsten ist es in den anderen namespaces nicht so komfortabel. Man müsste immer den namespace voranstellen in dem sie liegt.

Es ist erstmal nur eine Kopie der gewohnten MessageBox nur kann man hier z.B die Location bestimmen.

Teile, in denen man Sachen braucht mit denen ich noch nicht gearbeitet habe bzw. nicht arbeiten werde habe ich nicht gemacht. Da wird einfach das Original gestartet.

(Ab DefaultButton aufwärts) Obwohl ich den auch noch hinbekäme.

Ist natürlich jeder eingeladen dies zu ändern.

An den MessageboxButtons habe ich nichts geändert.

Die MessageboxIcons habe ich auch überschrieben.
Z.Zt noch ohne Wirkung, aber wenn jemand möchte kann er sich ein paar dazubauen.


    enum MessageBoxIcon
    {
        None = 0,
        Error = 16,
        Hand = 16,
        Stop = 16,
        Question = 32,
        Exclamation = 48,
        Warning = 48,
        Information = 64,
        Asterisk = 64,
        //Habe ich gemacht, damit man nach Wunsch andere anhängen kann
    }


In der Form dazu ist ein Beispiel.

Für Anregungen, Kritik, Erweiterungen und Hilfe bin ich dankbar.

Gruß Robert

PS: Dazu hatte ich die Icons gebraucht aus dem vorhergehenden Snippet. 😁

21.11.2009 - 06:46 Uhr

Danke für eure Anregungen.

In der Imageres.dll liegen 185 Icons.
Denke mir, dass hier die Nummern einfacher sind als 100te Namen.

Habe jetzt die Klasse umgebaut, sodass man sich beliebige DLLs auslesen kann.
€dit: habe gerade festgestellt, dass man auch aus einer .exe lesen kann.

Änderungen:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Runtime.InteropServices;

namespace Programmierhilfe
{
    class ShellIconHelper 
    {
        private IntPtr[] largeIcon;
        private IntPtr[] smallIcon;

        [DllImport("Shell32.dll")]
        public extern static int ExtractIconEx(string libName, int iconIndex, IntPtr[] largeIcon, IntPtr[] smallIcon, int nIcons);

        /// <summary>
        /// AnzahlIcons Property
        /// </summary>
        private int anzahlIcons = 0;
        public int AnzahlIcons
        {
            get { return anzahlIcons; }
        }    

        public ShellIconHelper(string dllName) 
        {
            anzahlIcons = ExtractIconEx(dllName, -1, largeIcon, smallIcon, int.MaxValue);
            largeIcon = new IntPtr[anzahlIcons];
            smallIcon = new IntPtr[anzahlIcons];
            ExtractIconEx(dllName, 0, largeIcon, smallIcon, anzahlIcons);
        }
        public Icon GetLargeIcon(int number)
        {
            if (number > anzahlIcons - 1)
            {
                return null;
            }
            return Icon.FromHandle(largeIcon[number]);
        }
        public Icon GetSmallIcon(int number)
        {
            if (number > anzahlIcons - 1)
            {
                return null;
            }
            return Icon.FromHandle(smallIcon[number]);
        }
    }
}

und.

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

namespace Programmierhilfe
{
    public partial class Form1 : Form
    {
        ShellIconHelper Imagesdll;
        public Form1()
        {
            InitializeComponent();
            // Hier Name der dll
            Imagesdll = new ShellIconHelper("Imageres.dll");
            boxes = new PictBox[Imagesdll.AnzahlIcons];
        }
        PictBox[] boxes;
        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < Imagesdll.AnzahlIcons; i++)
            {
                boxes[i] = new PictBox(i);
                boxes[i].Set(i,Imagesdll.GetLargeIcon(i),Imagesdll.GetSmallIcon(i));

                splitContainer1.Panel2.Controls.Add(boxes[i]);
            }
            Size = new Size(1125, 919);
        }
        private void splitContainer1_Panel2_Resize(object sender, EventArgs e)
        {
            if (boxes == null || boxes[0] == null)
            {
                return;
            }
            int breite = splitContainer1.Panel2.Width;
            int höhe = splitContainer1.Panel2.Height;
            int anzHor = breite / boxes[0].Width;
            int anzVert = boxes.Length / anzHor;
            int zeile = 0;
            int spalte = 0;
            for (int i = 0; i < boxes.Length; i++)
            {
                zeile = i / anzHor;
                spalte = i - zeile * anzHor;
                boxes[i].Location = new Point(spalte * boxes[i].Width, zeile * boxes[i].Height);
            }
        }
    }
}


Gruß Robert

PS: geht natürlich komfortabler, aber für jemanden der programmiert dürfte das ja kein Problem sein 😉

Anhang: alle dlls(nicht unbedingt auf jedem PC), in denen Icons sind aus dem Verzeichnis System 32.

Name \t Anzahl \t Path

20.11.2009 - 13:33 Uhr

**Icons aus Shell32.dll 😗*

Wollte mir mal diese Icons zum "anfassen" machen. Habe getestet und es sind 278 Icons in der dll.
Dies habe ich hart verdratet


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Runtime.InteropServices;

namespace Programmierhilfe
{
    static class Statics
    {
        static private IntPtr[] largeIcon;
        static private IntPtr[] smallIcon;

        [DllImport("Shell32.dll")]
        public extern static int ExtractIconEx(string libName, int iconIndex, IntPtr[] largeIcon, IntPtr[] smallIcon, int nIcons);

        public static void Init() 
        {
            largeIcon = new IntPtr[278];
            smallIcon = new IntPtr[278];
            ExtractIconEx("shell32.dll", 0, largeIcon, smallIcon, 278);
        }
        public static Icon GetLargeIcon(int number)
        {
            if (largeIcon == null)
            {
                Init();
            }
            if (number > largeIcon.Length - 1)
            {
                return null;
            }
            return Icon.FromHandle(largeIcon[number]);
        }
        public static Icon GetSmallIcon(int number)
        {
            if (smallIcon == null)
            {
                Init();
            }
            if (number > smallIcon.Length-1)
            {
                return null;
            }
            return Icon.FromHandle(smallIcon[number]);
        }
    }
}


Will man eins haben, so wird die Init() ausgeführt und alle sind da.(zumindest die Handles)

Man holt sich ein Icon mit der Nummer:

            Icon myIcon = Statics.GetLargeIcon(nummer); // oder small
            Image bild = new Bitmap(myIcon.ToBitmap(), myIcon.Width, myIcon.Height);

Im angehängten Bild sind nicht alle sichtbar, aber im Projekt, das auch angehängt ist.

Gruß Robert

16.11.2009 - 10:43 Uhr

Habs jetzt einfach mal gemacht. Mein PC läuft noch tadellos. 😉

Wenns jemand braucht:

        bool DisableAutoplay = false;
        public Form1()
        {
            InitializeComponent();
            RegistryKey mk;
            if (GetRegKeyByFullName(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers", out mk, true))
            {
                object value = mk.GetValue("DisableAutoplay");
                if (value == null)
                {
                    mk.SetValue("DisableAutoplay", 1);
                    DisableAutoplay = true;
                }
            }

...
...
...
        }


// müsste noch erweitert werden. Wenn man an einen Key gerät, an den man nicht dran darf ist es nützlich.
        bool GetRegKeyByFullName(string name, out RegistryKey retValue, bool auchSchreiben)
        {
            retValue = null;
            int pos1 = name.IndexOf("\\");
            string region = name.Substring(0, pos1);
            name = name.Substring(pos1 + 1);
            switch (region)
            {
                case "HKEY_LOCAL_MACHINE":
                    try
                    {
                        retValue = Registry.LocalMachine.OpenSubKey(name,auchSchreiben);
                        return true;
                    }
                    catch (Exception)
                    {
                        return false;
                    }
                case "HKEY_CURRENT_USER":
                    try
                    {
                        retValue = Registry.CurrentUser.OpenSubKey(name, auchSchreiben);
                        return true;
                    }
                    catch (Exception)
                    {
                        return false;
                    }
                default:
                    break;
            }
            return false;
        }



        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (DisableAutoplay)
            {
                RegistryKey mk;
                if(GetRegKeyByFullName(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers", out mk, true))
                    mk.DeleteValue("DisableAutoplay");               
            }
        }

Gruß Robert

16.11.2009 - 08:33 Uhr

Hallo herbivore,

zunächst, habe regmon geladen, ausgeführt und Vista sagt:

"Regmon has been replaced by ..."

Heißt jetzt Procmon und wird in einer ProcessMonitor.zip geliefert.(Der Suchworte wegen)

Dann sieht man aber den Wald vor lauter Bäumen nicht.
Ein wenig eingearbeitet und die richtigen Filter gesetzt, gings dann doch.

Habs noch nicht probiert, aber unter:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers

erscheint beim Disablen eine Value mit Namen DisableAutoplay diese hat dann den Wert 1.

Enable ich es wieder wird nicht der Wert auf 0 gesetzt, sondern das ganze Value weggenommen.

Nun, das sieht mir ungefährlich aus, wenn ich das vom Programm aus mache.

Was meinst du?

Gruß Robert

16.11.2009 - 05:13 Uhr

Hallo Sekkiy,

danke, dass soll aber mein Programm machen.
Sobald es startet ausschalten, und wenn es beendet wird wieder auf den vorherigen Stand.

Gruß Robert

15.11.2009 - 17:56 Uhr

Hallo tom-essen!

wenn man einfach nur den Stick herauszieht, dann kommt DBT_DEVICEREMOVECOMPLETE.

Wenn ich aber vor dem Herausziehen die Hardware sicher entferne, dann kommt DBT_DEVICEREMOVECOMPLETE sofort nach dem entfernen. Nicht mehr nach Herausziehen.

Ziehe ich dann den Stick heraus, dann kommt nicht brauchbares mehr.
(ausser besagter 7, die andauernd irgendwann kommt)

Windows merkt es aber, da nach abgemeldetem Stick und anschließendem Herausziehen ein Beep kommt.

Gruß Robert

€dit:
Nachdem beim Hardware sicher entfernen das DBT_DEVICEREMOVECOMPLETE gekommen ist, so kommt noch drei mal die 7.

Ziehe ich dann den Stick heraus, so kommt die 7 noch zwei mal.

Das ist regelmäßig und vorerst habe ich das auch genommen.

Befriedigend ist das aber nicht. X(

Weiss niemand, wie ich die Automatische Wiedergabe kurzzeitig ausschalten kann?

15.11.2009 - 12:51 Uhr

Hallo alle,

möchte wissen, wann ein Stick entfernt wird.

Dazu habe ich schon gefunden:


        protected override void WndProc(ref Message m)
        {
            if (m.Msg == Native.WM_DEVICECHANGE)
            {
                if(aktiv)
                switch (m.WParam.ToInt32())
                {
                    //
                    // New device has just arrived
                    //
                    case Native.DBT_DEVICEARRIVAL:
                        label1.Text = "USB entdeckt";
                        progressBar1.Value = 0;
                        Application.DoEvents();
                        LoadItems();
                        break;
                    //
                    // Device is about to be removed
                    // Any application can cancel the removal
                    //
                    case Native.DBT_DEVICEQUERYREMOVE:
                        break;
                    //
                    // Device has been removed
                    //
                    case Native.DBT_DEVICEREMOVECOMPLETE:
                        label1.Text = "Stick kann entnommen werden.";
                        Application.DoEvents();
                        LoadItems();
                        break;
					case 7: // kommt öfter hat scheinbar keine genaue Bedeutung
                    default:
                        break;
                }
            }
            base.WndProc(ref m);
        }

Damit habe ich dann ein Programm geschrieben, dass sobald ein Stick eingesteckt wird, einige Dateien kopiert und dann die Hardware abmeldet.

Dann kommt DBT_DEVICEREMOVECOMPLETE

Nun möchte ich aber noch wissen, wann der Stick tatsächlich ausgezogen wird.

Außerdem finde ich nicht, wo man das Fenster für die Automatische Wiedergabe ausschaltet, das ja jedesmal beim einstecken eines Sticks erscheint.
Das soll aber nur ausgeschaltet sein, solange mein Programm läuft.

Gruß Robert

09.11.2009 - 08:30 Uhr

Hallo alle,

da ich dies brauchte und es wunderbar funktioniert, habe ich es noch etwas erweitert.

Und zwar habe ich zunächst das gleiche auch für KeyUp gemacht.

        public void initialize()
        {
            this.PreviewKeyDown += new PreviewKeyDownEventHandler(ctrl_PreviewKeyDown);
            this.KeyUp += new KeyEventHandler(Form1_KeyUp);
            initializeChildren(this.Controls);
        }

        private void initializeChildren(Control.ControlCollection ctrls)
        {
            foreach (Control ctrl in ctrls)
            {
                ctrl.PreviewKeyDown += new PreviewKeyDownEventHandler(ctrl_PreviewKeyDown);
                ctrl.KeyUp += new KeyEventHandler(Form1_KeyUp);
                initializeChildren(ctrl.Controls);
            }
        }
        private void ctrl_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            zeichnung1.KeyDownVonForm(sender, e);
        }
        void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            zeichnung1.KeyUpVonForm(sender, e);
        }

Dann in dem Control, in dem ich es haben wollte zwei Funktionen gemacht.

        public void KeyDownVonForm(object sender, PreviewKeyDownEventArgs e)
        {
            myKeys[e.KeyCode] = true;
        }
        public void KeyUpVonForm(object sender, KeyEventArgs e)
        {
            myKeys[e.KeyCode] = false;
        }

Vorher musste ich mir ein Dictionary anlegen und es im Konstuktor des Controls füllen.

        Dictionary<Keys, bool> myKeys = new Dictionary<Keys, bool>();
        public Zeichnung()
        {
            foreach (Keys e in Enum.GetValues(typeof(Keys)))
            {
                myKeys[e] = false;
            }
         }

Jetzt habe ich überall im Control die gerade gedrückten Tasten vorliegen.

Test mit:

                string labelText = "";
                foreach (KeyValuePair<Keys, bool> item in myKeys)
                {
                    if (item.Value)
                    {
                        labelText += "  "+item.Key.ToString();
                    }
                    
                } 
                label1.Text = labelText;

Gruß Robert

01.11.2009 - 21:13 Uhr

ja, die meisten controls sind zunächst mal ohne doppelpufferung, bes. die ContainerControls.

Wenn man nur dran käme.

01.11.2009 - 12:09 Uhr

Hallo Alle,

da hier genug darüber steht, habe ich nicht gefragt und versucht mein Flackern wegzubekommen.

Problem schien, dass ich in ein Panel eines Splitcontainers zeichnete.
Alles mögliche habe ich versucht. Nichts half.

Zum Schluß nahm ich mir ein einfaches UserControl.
Stellte dort DoubleBuffered = true;
Legte es mit Dock.Fill in das Panel.

und zeichnete dann einfach alles in das Paint-Event des Controls.

Weiss nicht, ob das elegant ist, es hilft aber. =)
Natürlich muss ich dann auch die Mouse-Events von dort benutzen.

Gruß Robert

18.10.2009 - 12:08 Uhr

Hallo gfoidl,

beim zweiten Debuging sagte er mir, dass das für Klassen nicht erlaubt ist.

Dann habe ich:

        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public List<Schicht> Schichten
        {
            get { return schichten; }
            set
            {
                schichten = value;
                Invalidate();
            }
        }

gemacht.

Fehler erscheint nicht mehr. (Zweiten Fehler auch behoben 😉)
Grosses Danke!!

Gruß Robert

18.10.2009 - 11:46 Uhr

Hallo gfoidl,

scheinbar geht das 😄, sicher kann ich das erst nach einer Zeit sagen.
Dass hatte ich in Jahren nie.

Oder hatte ich doch Physik mit g geschrieben?
€dit: Jetzt sehe ich es. Du Schelm. 😉

Gruß Robert

18.10.2009 - 11:27 Uhr

Hallo alle,

bekomme andauernt die Messagebox im Foto.

Dann wird dies immer eingebaut:

            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SchichtaufbauErfassen));
            ((System.ComponentModel.ISupportInitialize)(this.numericUpDownDicke)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.numericUpDownDicke)).EndInit();

Funktioniert auch ohne.Und das sagt mir gar nichts.
Mache ich das heraus, so habe ich Ruhe bist ich den Designer der Form aufmache.

Manchmal bleibt mir nur der Taskmanager.

Habe schon ein neues Projekt gemacht und alle Formen neu gemacht. Nach einer Zeit kommt das wieder.

Die dazugehörigen Teile:

    public class Baustoff
    {
        public int id;
        public string luftType;
        public string DINPunkt;
        public string kategorie;
        public string kategorie1;
        public string kategorie11;
        public string type;
        public string unterpunkt;
        public float Rohdichte;
        public float RohdichteBis;
        public float lambda;
        public float lambdaBis;
        public float myKlein;
        public float myGross;
        public bool holz;
        public bool holzWerkstoff;
        public bool dampfsperre;
        public float cp;
    }
// habe ich auch schon beide Serializable gemacht.
    public class Schicht
    {
        public Baustoff baustoff;
        public float dicke;
        public string ersatzText;
    }
//.............
        public List<Schicht> Schichten
        {
            get { return schichten; }
            set
            {
                schichten = value;
                Invalidate();
            }
        }
//...........

Gruß Robert

18.10.2009 - 11:08 Uhr

Hallo raiguen,

das hatte ich schon gefunden. Nach erster Betrachtung war es mir dann doch zu viel für meinen Zweck.
Wenn sich nichts anderes ergibt, muss ich mich wohl damit auseinandersetzten.

Gruß Robert

15.10.2009 - 10:22 Uhr

Hallo Alle,

möchte ein Listview mit Gridlines **und **Gruppen haben.

Ohne Gruppe erscheinen die Gridlines. Sobald ich aber Gruppen zufüge, verschwinden sie.
View ist auf Details gestellt, GridLines auf true.

Dann möchte ich noch das Aussehen der GroupSpalte beeinflussen. Da finde ich auch keinen Ansatzpunkt.

Wollte es auch schon selbstzeichnen.
Für alles ist ein Event da. Nur nicht für DrawGroups.
OnPaint wird gar nicht angesprungen.

Gruß Robert

21.08.2009 - 07:25 Uhr

Hallo mutzu2210,

in der Tat ist es schon lange her. Habe im Moment auch keine Zeit mich groß damit zu beschäftigen.

Was ich tun kann, ist dir meine aktuelle Version hochzuladen. An der habe ich immer wieder etwas gemacht.

Vielleicht hilfts. 😉

Gruß Robert

15.07.2009 - 07:28 Uhr

Habe auch mal in einem Forum für Mathematik nachgefragt und ausführliche Antwort erhalten.

http://www.matheraum.de/read?t=573598

Bin wegen Umbau noch nicht dazu gekommen daran zu arbeiten, aber es sieht sehr gut aus, sodass ich es vermutlich verstehen werde.

[EDIT]
Hier meine Lösung:


    struct BldPoint
    {
        public double wx, wy, ix, iy;
        public BldPoint(double _wx,double _wy,double _ix,double _iy)
        {
            wx = _wx;
            wy = _wy;
            ix = _ix;
            iy = _iy;
        }
    }
    class Referenz
    {
        // Prepare some helpers:

        // To store the formal product A * v, we store which element of v is used
        // as coefficient for which variable of A in the j-th row as H1[j][t],
        // where t = 0, 1, 2 denotes the coordinates of v.
        int[][] H1 = { new int[] { 0, 1, 2 }, new int[] { 3, 4, 5 }, new int[] { 6, 7, 8 } };
        // To store [w]_\times, we use H2[i][j] to specify -3, -2, ..., 3 with 0
        // being 0, t > 0 being the t-th component of w (beginning with 1) and
        // -t > 0 being the negative of the t-th component of w.
        int[][] H2 = { new int[] { 0, -3, 2 }, new int[] { 3, 0, -1 }, new int[] { -2, 1, 0 } };
        // Note that we only use the first two rows of H2!
        const int ninput = 4;
        const int nlineq = ninput * 2;
        double[,] lineq;
        BldPoint[] input;
        double[][] A = new double[3][];
        public Referenz(BldPoint OL, BldPoint UL, BldPoint OR, BldPoint UR)
        {
            A[0] = new double[3];
            A[1] = new double[3];
            A[2] = new double[3];
            input = new BldPoint[] { OL, UL, OR, UR };
            lineq = new double[nlineq, 9];
            for (int i = 0; i < ninput; ++i)
            {
                // Clear the equations to zero
                for (int j = 0; j < 2; ++j)
                    for (int k = 0; k < 3 * 3; ++k)
                        lineq[i * 2 + j, k] = 0.0;

                // Prepare v and w
                double[] v = new double[3];
                double[] w = new double[3];
                v[0] = input[i].ix;
                v[1] = input[i].iy;
                v[2] = 1.0;
                w[0] = input[i].wx;
                w[1] = input[i].wy;
                w[2] = 1.0;

                // Generate the linear equations
                for (int j = 0; j < 2; ++j)
                {
                    // Generate the j-th equation
                    for (int t = 0; t < 3; ++t)
                    {
                        int c = H2[j][t];
                        bool neg = c < 0;
                        if (neg)
                            c = -c;
                        if (c != 0)
                        {
                            // Coefficient is not zero, i.e. do something
                            for (int s = 0; s < 3; ++s)
                                lineq[i * 2 + j, H1[t][s]] += (neg ? w[c - 1] : -w[c - 1]) * v[s];
                        }
                    }
                }
            }
            // the Gauss-Jordan algorithm ([URL]http://en.wikipedia.org/wiki/Gauss–Jordan_elimination[/URL])
            const double epsilon = 1E-20; // the error tolerance
            bool[] used = new bool[3 * 3]; // the pivot columns
            int r = 0;
            for (int c = 0; c < 3 * 3; ++c)
            // Iterate the columns
            {
                // Find the pivot row (choose the one with the largest element)
                double m = 0.0;
                int pivot = -1;
                for (int j = r; j < nlineq; ++j)
                    if (lineq[j, c] > m)
                    {
                        m = lineq[j, c];
                        pivot = j;
                    }
                    else if (-lineq[j, c] > m)
                    {
                        m = -lineq[j, c];
                        pivot = j;
                    }

                // Check m against tolerance
                if (m <= epsilon)
                {
                    // Too small: skip column
                    // Clear the values to zero
                    for (int j = r; j < nlineq; ++j)
                        lineq[j, c] = 0.0;
                    // Mark this column as unused
                    used[c] = false;
                }
                else
                {
                    // Mark this column as used
                    used[c] = true;

                    // Swap current with pivot row
                    for (int j = c; j < 3 * 3; ++j)
                        swap(ref lineq[r, j], ref lineq[pivot, j]);

                    // Normalize pivot row
                    for (int j = c + 1; j < 3 * 3; ++j)
                        lineq[r, j] /= lineq[r, c];
                    lineq[r, c] = 1.0;

                    // Eliminate the current column
                    for (int rr = 0; rr < nlineq; ++rr)
                        if (rr != r)
                        {
                            // Work on the rr-th row
                            for (int j = c + 1; j < 3 * 3; ++j)
                                lineq[rr, j] -= lineq[rr, c] * lineq[r, j];
                            lineq[rr, c] = 0.0;
                        }

                    // Go to the next row
                    ++r;
                }
            }
            // Check for right rank
            if (r < 8)
            {
                throw new Exception("Rank is too small!?");
            }
            if (r > 8)
            {
                throw new Exception("The matrix seems to be over-determined, i.e. we obtain A = 0. We don't want that.");
            }
            int freecoord = 0;
            for (int i = 0; i < 3 * 3; ++i)
                if (!used[i])
                    freecoord = i;
            // The free coordinate will be set to 1, the others filled from this value using the linear equations
            A[freecoord / 3][freecoord % 3] = 1.0;
            for (int i = 0; i < 3 * 3; ++i)
            {
                if (i < freecoord)
                    A[i / 3][i % 3] = -lineq[i,freecoord];
                if (i > freecoord)
                    A[i / 3][i % 3] = -lineq[i - 1,freecoord];
            }
        }
        public BldPoint Convertiere(BldPoint toConvert)
        {
         double[] v= new double[3], w = new double[3];
         v[0] = toConvert.ix;
         v[1] = toConvert.iy;
        v[2] = 1.0;
        // Compute w = A * v
        for (int j = 0; j < 3; ++j)
        {
            w[j] = 0.0;
            for (int k = 0; k < 3; ++k)
                w[j] += A[j][k] * v[k];
        }
        // We should have w[2] != 0
        if(w[2] == 0) throw new Exception("");
        // Normalize, i.e. make sure w[2] == 1
        w[0] /= w[2];
        w[1] /= w[2];
        w[2] = 1.0;
        // Store and output
        toConvert.wx = w[0];
        toConvert.wy = w[1];
        return toConvert;
       }
        void swap(ref double a, ref double b)
        {
            double c = b;
            b = a;
            a = c;
        }
    }

[/EDIT]

Gruß Robert

13.07.2009 - 22:36 Uhr

Danke allen,

dass sieht sehr interessant aus. =)

Gruß Robert

13.07.2009 - 11:13 Uhr

Hallo alle,

ohne mein wissendliches Zutun kann ich nicht mehr wirksam den Code meines Programms ändern.

Benutze Visual C# Express Edition 2008

Fehlermeldung: Die Quelldatei ist anders als zum Zeitpunkt der Erstellung des Moduls
Haltepunkte bekommen ein Achtungzeichen

Das hatte ich schon mal. Da habe ich ein neues Projekt gemacht, alles kopiert und dann ging es wieder.

Nun möchte ich aber wissen, was das ist.

Gruß Robert

€dit: Habe jetzt alles im Vereichnis Debug und Release gelöscht. Jetzt geht es wieder.
Komisch aber trotzdem. 8o

06.07.2009 - 07:35 Uhr

Hi Christian,

nur um meine Küche zu vermessen, dann wäre ich schon sehr verrückt. 😁
Aber um was zu lernen bekäm ich das aber auch fertig.

Nein, Hintergrund ist der: mache zurzeit einen Lehrgang zum Gebäudeenergieberater (HWK). Den theoretischen Teil habe ich gerade abgeschlossen. Der praktische Teil besteht aus der Bedienung eines Programms um anschließend mit dessen Hilfe ein Gebäude beurteilen zu können. Oder Energieausweise auszustellen.

Dieses Programm kostet 500 € dazu kommen noch jährliche Kosten von 100 €. Ein Programmteil dazu, der wie ich hier vor habe das Gebäude vermisst kostet glaube ich noch mal 200 €.
Und Geld habe ich keins mehr. Alles bei einer Insolvenz draufgegangen und muss noch mal neu anfangen.

Im Dezember ist Prüfung zum praktischen Teil. Bist dahin möchte ich alles fertig haben.
Durch meinen Umbau ist mir die Arbeit am Programm zu komplex. Daher möchte ich zuerst die Vermessung machen. Spart nachher viel Arbeit und auf ein paar Zentimeter kommt es nicht so an.

Wenn Du natürlich eine Funktion wie beschrieben hast, so wäre das Klasse. 👍
Dann hätte ich etwas funktionierendes, in das ich mich dann gezielt vertiefen kann um es zu verstehen.

Gruß Robert

04.07.2009 - 21:49 Uhr

Hi Christian,

bin immer noch fest bei der Sache. Nur baue ich zurzeit das was man auf dem Bild sieht. Heute habe ich die Decke zum ersten mal gestrichen. 😉

Hatte zuerst gedacht, dass ich zumindest die Höhe schon erfassen kann. Ist aber nicht genau. Liegt warscheinlich daran, dass ich die Kamera absichtlich schief gehalten habe.

Nun den, etwas interessantes habe ich herausgefunden.

Errechne ich den Fluchtpunkt der Senkrechten und der Waagerechten, so meine ich der Schnittpunkt zum jeweils senk- oder waagerechten der Punkt, auf den ich mit meiner Kamera gezielt habe.(Die blauen Linien)

Musste einiges wieder herauskramen und habe mir eine Funktion geschrieben, die mir aus zwei Punkten die Werte der Funktion für eine Gerade gibt. Zwar einfach, aber zumindest für mich nützlich.

Geht man davon aus, dass: f(x) = m * x + b

Dann gibt diese Funktion m und als out b.

        float GibSteigung(PointF p1, PointF p2, out float b)
        {
            float steigung = (p2.Y - p1.Y) / (p2.X - p1.X);
            b = p1.Y - steigung * p1.X;
            return steigung;
        }

Vielleicht kann es jemand brauchen.

Gruß Robert

30.06.2009 - 19:31 Uhr

Hallo Christian,

im Grunde brauche ich das nur für eine Ebene. Dass eine 3D-Berechnung aus einem 2D-Foto wenn überhaupt dann sehr schwer geht, ist mir klar.

Wann sich die zwei Vektoren schneiden habe ich ja schon herausgefunden.
Leider beherrsche ich die Matrix und Vektorenrechnung nicht. Mein Abi liegt schon 30 Jahre zurück. Würde mich auch wieder reinknien, wenn ich es öfter bräuchte.

Die Verkleinerung der Fliesen geht linear vonstatten. Für eine gegebene Linie bekäme ich dann auch die Steigung heraus. Das allgemeine fehlt mir.

Das von Dir angesprochene Weltkoordinatensystem hört sich gut an.
Wie soll ich da vorgehen?

Gruß Robert

30.06.2009 - 16:19 Uhr

Hallo herbivore,

es soll ganz einfach manuell geschehen.

Ich fotografiere z.B. ein Haus, messe ein großes, waagerechtes Objekt mit dem Zollstock aus. (z.B. Fenster).
Mit diesen Maßen möchte ich jetzt alle anderen Fenster und Türen auf dem Foto vermessen können. (Durch markieren der Eckpunkte)

Den Fluchtpunkt von zwei waagerechten Linien habe ich schon herausgefunden.

Vermute mal, dass dies aber mit Vektorrechnung einfacher geht, als ich es gemacht habe.

       Point GibFluchtPunkt(Point _OL, Point _OR, Point _UR, Point _UL)
       {
           float minX = _OL.X;
           float minY = _OL.Y;
           minX = Math.Min(minX, _OR.X);
           minX = Math.Min(minX, _UL.X);
           minX = Math.Min(minX, _UR.X);
           minY = Math.Min(minY, _OR.Y);
           minY = Math.Min(minY, _UL.Y);
           minY = Math.Min(minY, _UR.Y);
           PointF OL = new PointF(_OL.X - minX, _OL.Y - minY);
           PointF OR = new PointF(_OR.X - minX, _OR.Y - minY);
           PointF UL = new PointF(_UL.X - minX, _UL.Y - minY);
           PointF UR = new PointF(_UR.X - minX, _UR.Y - minY);
           float a = UL.Y - UR.Y;
           float c = OR.Y - OL.Y;
           float d = OR.X - OL.X;
           float b = UR.X - UL.X;
           float diffX = OL.X - UL.X;
           float A = (diffX + d * UL.Y / c) / (b / a + d / c);
           float B = A / a * b;
           float C = UL.Y - A;
           //
           return new Point((int)(B + minX), (int)(C + minY));

       }

Wenn ich von irgendeinem Punkt zu diesem Punkt eine Linie ziehe, so kommt immer die Waggerechte heraus.

Gruß Robert

30.06.2009 - 05:15 Uhr

Hallo herbivore,

aus der Kenntnis wie groß hier z.B die Fliesen sind möchte ich ausrechnen können wie weit die Dosen auseinander liegen oder auch vom Rand entfernt sind.

Die Fliesen sind ja in Wirklichkeit ein Rechteck und waagerecht. Hier aber verzerrt. Mit den Winkeln, den Pixeln und den tatsächlichen Maßen kann man dann alles andere ausrechnen.
Quasi ein Foto-Aufmaß möglich machen.

Ich weis nur nicht wie. 😭

Gruß Robert

29.06.2009 - 14:33 Uhr

Hallo Alle,

Möchte etwas schreiben, mit dem ich jedem Punkt auf einem Bild seinen metrischen Wert zuordnen kann.

Eine Referenz ist gegeben, dass heißt man hat ein Rechteck (in realen Maßen) zum Vergleich.

Habe in Wikipedia gelesen, dass dies mit Matrixberechnung geht. Nur das bekomme ich nicht mehr hin.
http://de.wikipedia.org/wiki/Projektion_(Geometrie)

Beachten muss man auch, dass kein Mensch ein Bild so hin bekommt, dass es in irgendeiner Richtung gerade ist.

Wäre sehr schön, wenn jemand hier ist, der da weiter helfen kann.

Als Beispiel habe ich ein Bild meiner kürzlich verlegten Küchenfliesen angehängt. Habe das extra etwas schief gemacht. muss ja auch dann funktionieren.
(Bilde mir ein, dass sie recht korrekt hängen) Masse 25 * 33 cm

Gruß Robert

09.06.2009 - 15:18 Uhr

Das Projekt.

09.06.2009 - 15:16 Uhr

Hallo alle,

nicht zuletzt um etwas mehr Duchblick zu bekommen habe ich mich dran gegeben zwei Grundformen zu machen.

Auch habe ich die alten Meshes in XNA 3.0 nicht gefunden. (Mesh.Box etc.)

Kugel und Zylinder.
Alle Segmentzahlen können eingestellt werden. Die Texturkoordinaten gehen mit.
Normale habe ich noch nicht angefangen weil keine Ahnung.
Da ich jetzt zwei Wochen keine Zeit habe stelle ich es schon mal ein.

Gruß Robert.

20.05.2009 - 07:34 Uhr

Hallo winSharp93,

ich möchte XNA verwenden. Das ist zwar jetzt noch in MDX aber davon hat man mir abgeraten weil es nicht mehr weiter entwickelt wird.

Habe schon etwas in beiden gemacht.

Weiss meinen Wunsch nicht so recht in Worte zu fassen.

Bleiben wir einfach mal beim Fenster.

Das Fenster wie im Bild in 3D zu zeichnen ist nur etwas Fleissarbeit. Das bekomme ich schon hin. Jetzt fehlt mir aber der Ansatz dieses Fenster rechts links oder hinten zu zeichnen.
Es sei den ich mache mir 4 verschiedene Methoden. Oder ich drehe seine Welt entsprechend.

Dann kommt noch hinzu, dass ich irgendwann die Sonneneinstrahlung berücksichtigen muss und das gesamte Haus ja nicht genau zu einem Pol stehen muss.

Evtl muss ich mir zwei Systeme machen. Eins zum Zeichnen eins zum Rechnen.
Wenn es ginge wäre mir eins lieber.

Gruß Robert