Laden...

Forenbeiträge von Robertico Ingesamt 344 Beiträge

17.07.2007 - 23:40 Uhr

Hallo Alle,

durch große Hilfe von dr4g0n76 und ldr ist es mir gelungen ein Programm zu schreiben, dass es ermöglicht mit LUA ein C# -Programm zu steuern.

Eine umgebaute Version von dr4g0n76`s EventLogger / EventSpy ermöglicht es ohne Probleme alle Events an LUA zu übergeben.

Mit etwas anderem als Controls geht es zwar noch nicht, aber hier ist schon einmal ein Rechner. (Man muss ihm aber noch das Rechnen beibringen)
Für interessierte empfehle ich das Studium meines Tutorials

Ich weiß, das LUA hier nicht so ankommt, aber ich mag es halt.

In der Entwicklungsumgebung sehr langsam im Aufbau daher noch:
Projekt EXE mit Zutaten

Habe viel über Reflection gelernt dabei.

Alles änderbar in dem file form.lua

Gruß Robert

17.07.2007 - 12:48 Uhr

Hallo ldr,

das kommt davon wenn man nicht copy & past macht. 😉
schon verbessert.

Dein Tip hat mich jetzt auch auf eine andere Idee gebracht.

Aus LUA heraus kann ich manche Dinge nur per string ändern.

Dazu habe ich mir ein switch gebaut. Nun gibt es ja etliche Enums. Die wollte ich nicht alle einzeln einbauen.

Der Anfang:

        public void Aendere(Control ctrl, string _wert, object value)
        {
            Type type = ctrl.GetType();
            PropertyInfo propertyInfo = type.GetProperty(_wert);
            if (propertyInfo != null)
            {
                switch (propertyInfo.PropertyType.Name)
                {
                    case "Icon":
                        propertyInfo.SetValue(ctrl, new Icon((string)value), null);
                        Refresh();
                        break;
                    case "Image":
                        propertyInfo.SetValue(ctrl, Image.FromFile((string)value), null);
                        Refresh();
                        break;
                    case "Int32":
                        propertyInfo.SetValue(ctrl, (int)(double)value, null);
                        break;
//......

Durch dieses hier habe ich die Enums geknackt.

                    default:
                        Type t = Type.GetType(propertyInfo.PropertyType.FullName+", System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");//
                        object gt = Enum.GetValues(t);
                        if (gt != null)
                        {
                            foreach (object mode in Enum.GetValues(t))
                            {
                                if (mode.ToString() == (string)value)
                                {
                                    propertyInfo.SetValue(ctrl, mode, null);
                                    break;
                                }
                            }
                        }
                        break;

Gruß Robert

17.07.2007 - 10:08 Uhr

Hallo herbivore,

das klappt. Danke.

Hatte schon Angst, das es bei unterschiedlichen Forms auch unterschiedlich ist.

Aber zumindest bei TextBox hat es so auch geklappt.

@Ldr

Button b = (Button)Activator.CreateInstance(t);

hatte mich stutzen lassen, dann hätte ich auch ein switch gebraucht.
Ein wenig nachdenken hat mich dann auf:

Control ctrl = (Control)Activator.CreateInstance(t);

gebracht. Das klappt. Wenns auch spät ist.Danke 😉

Gruß Robert

17.07.2007 - 09:51 Uhr

Hallo herbivore,

habe

using System.Windows.Forms;

und in References verweist das auf
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll

Ist das das was du meinst?

Gruß Robert

17.07.2007 - 09:44 Uhr

Hallo Idr,

bei:

                Type myType1 = Type.GetType("System.Int32");

kommt der Type heraus.
bei:

Type t = Type.GetType("System.Windows.Forms.Button");

kommt null heraus.

Warum das?

Gruß Robert

16.07.2007 - 19:23 Uhr

Hallo dr4g0n76,

das sieht nicht nur vielversprechend aus, das ist KLASSE 👍 👍 👍

Es gibt viel zu tun. Packen wir´s an.

Gruß Robert

16.07.2007 - 18:55 Uhr

Hallo,

kann ich das vernachlässigen?

Warning 1 The result of the expression is always 'true' since a value of type 'bool' is never equal to 'null' of type 'bool?' C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio Codename Orcas\Projects\Analysis\Analysis\Logging.cs 176 17 Analysis

in if (

            //Add this delegate to the dictionary
            if (this.m_oDelegatesDictionary.ContainsKey(_sEvent) != null)
            {
                System.Console.WriteLine("This Event already has been added!");
                return;
            }

Gruß Robert

16.07.2007 - 18:38 Uhr

Hallo dr4g0n76,

das sieht sehr vielversprechend aus.

Werde es mir zu Gemüte führen.

Danke

Robert

16.07.2007 - 15:13 Uhr

Hallo Fabian, Alle,

bastle gerade etwas, womit man mit LUA ein C# Programm steuern kann.
(brauchte etwas für zwischendurch, meine Website ist zu eintönig)

Da Lua-Programmierer, für die das gedacht ist, oft nichts anderes beherrschen soll es in LUA möglichst einfach sein.
Natürlich will ich auch alle möglichen Events zur Verfügung stellen.
Da suche ich eine möglichst einfache Art das zu tun.

Habe mal den Anfang angehängt. Sehr einfach zu verstehen.
Evtl bekomme ich ja noch Tipps. So gut bin ich in C# noch nicht.

Gruß Robert

16.07.2007 - 14:47 Uhr

Hallo herbivore,

mit:

 string type = sender.GetType().Name;
 string name = ((Control)sender).Name;

habe ich type und name des senders.

Möchte aber wissen, welches Event es ist.

Zurzeit habe ich esso gelöst:

         void MachEvents(Control ctrl)
        {
            ctrl.MouseDown += new MouseEventHandler(ctrl_MouseDown);
            ctrl.MouseClick += new MouseEventHandler(ctrl_MouseClick);
            ctrl.MouseHover += new EventHandler(ctrl_MouseHover);
            ctrl.MouseLeave += new EventHandler(ctrl_MouseLeave);
            ctrl.MouseEnter += new EventHandler(ctrl_MouseEnter);
            ctrl.MouseMove += new MouseEventHandler(ctrl_MouseMove);
            ctrl.MouseWheel += new MouseEventHandler(ctrl_MouseWheel);
            ctrl.Click += new EventHandler(ctrl_Click);
            ctrl.PreviewKeyDown += new PreviewKeyDownEventHandler(ctrl_PreviewKeyDown);
        }
        void ctrl_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            DoEvent(sender, e, "PreviewKeyDown");
        }

        void ctrl_MouseWheel(object sender, MouseEventArgs e)
        {
            DoEvent(sender, e, "MouseWheel");
        }

        void ctrl_MouseMove(object sender, MouseEventArgs e)
        {
            DoEvent(sender, e, "MouseMove");
        }

        void ctrl_MouseLeave(object sender, EventArgs e)
        {
            DoEvent(sender, e, "MouseLeave");
        }

        void ctrl_MouseHover(object sender, EventArgs e)
        {
            DoEvent(sender, e, "MouseHover");
        }
//.........

Wenn ich den Namen weiß brauche ich die alle nicht.

Gruß Robert

16.07.2007 - 14:22 Uhr

Hallo alle,

möchte eine generelle Methode scheiben.

        void MachEvents(Control ctrl)
        {
            ctrl.MouseDown += new MouseEventHandler(DoEvent);
            ctrl.MouseClick += new MouseEventHandler(DoEvent);
            ctrl.MouseEnter += new EventHandler(DoEvent);
            ctrl.Click += new EventHandler(DoEvent);
        }

Die Frage:

        void DoEvent(object sender, EventArgs e)
        {
            // hier möchte ich wissen, dass es von MouseEnter, Click, .. kommt 
        }
        void DoEvent(object sender, MouseEventArgs e)
        {
            // hier möchte ich wissen, dass es von MouseDown, MouseClick, .. kommt 
        }

geht das?

Gruß Robert

15.07.2007 - 16:39 Uhr

Hallo Idr,

dann kann ich ja auch ein switch machen.

public IntPtr NewControl(string type, LuaTable table)
{
	Control ctr;
	switch(type)
	{
		case "Button":
			ctr = new Button();
		case "Label":
			ctr = new Label();
			break;
		//...
	}
	foreach (DictionaryEntry de in table)
		Aendere(ctr, de.Key.ToString(), de.Value);
	this.Controls.Add(ctr);
	return Controls[Controls.Count - 1].Handle;
}

Wenn ich recht überlege muss ich das auch machen, da ich einige Events zur Verfügung stellen will und die sind ja verschieden.

Gruß Robert

15.07.2007 - 15:59 Uhr

Hallo Alle,

das hat wunderbar geklappt.

Jetzt suche ich noch das umgekehrte (nicht ganz)

Möchte, dass wenn ich das Wort "Button" bekomme, einen Button erzeugen.

Könnte ich ja auch wieder mit switch. Finde nichts wie es allgemein geht.

Control ctrl = new Control("Button");

Wird ja nur der Text gesetzt. Hat jemand noch mal ein Stichwort? 🙂

Gruß Robert

15.07.2007 - 09:42 Uhr

Danke an alle, das Stichwort bringt mich weiter.

Gruß Robert

15.07.2007 - 09:37 Uhr

Hallo Alle,

geht es auf eine Variable mittels Namen zuzugreifen?

Habe z.B in einem string "Height" oder"Text" stehen.
dann möchte ich den type wissen (int) oder (string)
und die Variable ändern bzw. den Wert erhalten.

Bastle gerade etwas in LUA

            LuaTable form = lua.GetTable("form");
            switch (_wert)
            {
                case "Height":
                    this.Height = (int)(double)form[_wert];
                    break;
                case "Width":
                    this.Width = (int)(double)form[_wert];
                    break;
                case "Text":
                    this.Text = (string)form[_wert];
                    break;
            }


Möchte aber irgendwie das switch weghaben.

Gruß Robert

29.06.2007 - 07:28 Uhr

Hallo Alle,

"ERROR [HY000] [MySQL][ODBC 3.51 Driver][mysqld-5.0.32-Debian_7etch1~bpo.1-log]MySQL server has gone away" plagt mich.

Ich habe den Verdacht, dass jedes mal, wenn ich das Programm anhalte, der Server weg geht.
Stundenlang habe ich gearbeitet (auch im Debugmodus) aber nicht angehalten. Lief einwandfrei.
Der Status der Connection ist aber Open.

Hat jemand Erfahrung damit?

Gruß Robert

18.06.2007 - 10:21 Uhr

Hallo alle,

Habe Unterstützung bekommen.
**
janismac** hat sich bereit erklärt in der Klasse mal richtig Ordnung zu machen und Kommentare hinein zu schreiben.

Dann wird er es in eine DLL packen und hier zur Verfügung stellen. 😁

Bei der Gelegenheit möchte ich noch ein Schnipselchen vorstellen, dass ich letztens gebraucht habe. Es tauscht im Bild eine Farbe gegen eine andere. Und das in gewohnter Schnelle.

public void TauscheFarbe(Color f1, Color f2)
        {
            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    if (color[x, y] == f1)
                    {
                        color[x, y] = f2;
                    }
                }
            }
        }

Gruß Robert

18.06.2007 - 08:40 Uhr

Hallo svenson,

Werte an eine dll zu übergeben ist nicht mehr mein Problem.

Es geht mir darum, dass die dll Werte(Speicherplatz) verändert, und ich die veränderten Werte dann im Programm habe. So wie ref und out.

Und ich denke, dass man dann einen Speicherbereich schaffen muss, und der dll zeigen muss wo dieser Bereich anfängt.

Dann habe ich weiter gelesen, dass der garbage collector (Müllarbeiter) Sachen einfach hin und her schiebt und deshalb das kurzzeitig auf fixed gesetzt werden muss. Dies muss dann aber unsafe sein.

Gruß Robert

17.06.2007 - 19:25 Uhr

Hallo herbivore,

denke Du müsstest nun wissen, dass ich nicht faul bin.

Nur das sagt mir alles nichts. Ich wüsste nicht wo ich anfangen soll.

Die ersten 5 Links brauche ich nicht. Danach sind Erklärungen von ca 50 DLLs, wo evtl einer dabei ist, wo ich dann evtl. verstehe, dass etwas dabei ist was ich brauche.

Es sieht mir aber nicht danach aus.

Wenn Du den Link oben etwas erweitern könntest? 🤔

Gruß Robert

17.06.2007 - 19:07 Uhr

Hallo herbivore,

bis ich mich da mit meinem englisch durchgekämpft habe, warte ich lieber bis ich durch Zufall drauf stoße. 🙁

Gruß Robert

17.06.2007 - 18:57 Uhr

Hallo herbivore,

bastele auch schon eine Weile dran. Finde nichts.

könntest du nicht ein kleines Beispiel geben für:

-- gebe der Dll einen Zeiger oder sonst wie
-- Die Dll ändert die Werte
-- in C# habe ich sie nach dem Aufruf

Für string

Gruß Robert

13.06.2007 - 17:41 Uhr

Hallo herbivore,

Irgendwie muss ich mich schämen. 🤔
Habe es jetzt noch mal probiert und jetzt gehts mit dem String.

Weis der Teufel was ich da gemacht habe.

Gruß Robert.

Tut mir leid.

13.06.2007 - 17:32 Uhr

Hallo Grollicus,

in C wird alles mit char gemacht. String gibts da nicht meines Wissens.

Was hier gemacht wir, die Adresse des Strings übergeben.
Wenn dann die \0 kommt ist der String zu ende.
Das geht aber scheinbar nicht.

Gruß Robert

13.06.2007 - 17:15 Uhr

Hallo,

Habe jetzt eine Methode hineingetan, die nur den Parameter anzeigt.

ROFTP_API void DoMessage( char *command)
{
	MessageBox(0,command,"",0);
}

Wenn jemand Lust hat, das herauszufinden wäre ich dankbar.

[DllImport("RoFtp.dll", CharSet = CharSet.Ansi, EntryPoint = "#15")]
static public extern unsafe void DoMessage(char* command);

Möchte das in meinen FTP-Client einbauen.
Habe die einzelnen Methoden von Codeprojekt. Das Programm dazu stellt FileZilla in Geschwindigkeit in den Schatten.
Nur kann ich nicht gut C++, daher will ich es einbinden.

Gruß Robert

13.06.2007 - 16:48 Uhr

Hallo herbivore,

das habe ich auch schon probiert.
Auch mit dem char-array:

Gruß Robert.

13.06.2007 - 16:36 Uhr

Hallo herbivore,

Habe ich gerade probiert. Ist das gleiche.
Nur das w kommt an.

Schreibe ich "wp022.webpack.hosteurope.de" direct in die dll, dann bekomme ich Connection.

Gruß Robert.

13.06.2007 - 16:24 Uhr

Hallo,

Habe eine DLL in C++.

Der muß ich einen String übergeben. Dort kommt aber nur das erste Zeichen an.

Was mache ich falsch?

Der Aufruf:


// Import
        [DllImport("RoFtp.dll", CharSet = CharSet.Auto, EntryPoint = "#17")]
        static public extern unsafe int DoOpen(char* command);
// Aufruf
            char[] HostBuffer = ((string)"wp022.webpack.hosteurope.de" + '\0').ToCharArray();
            int a;
            fixed (char* pHostBuffer = HostBuffer) a= DoOpen(pHostBuffer);

Der anfang der DLL-Funktion

ROFTP_API int DoOpen( char *command)
{

Gruß Robert

06.06.2007 - 09:53 Uhr

DirectX End-User Runtimes - Deutsch

Das müsste er sein.

Gruß Robert

05.06.2007 - 14:41 Uhr

Hallo Alle,

habe leider im Moment keine Zeit um weiter zu machen. Siehe unten.

Werde ich aber noch machen, sobald ich kann.

Tut 3D
Managed Direct3D Tutorial
http://www.x-tutorials.de/html/d3dtutorials.html
http://www.miszalok.de/C_3DCis/Index_of_Course.htm

und viele mehr.

Gruß Robert

27.05.2007 - 09:39 Uhr

Hallo alle,

Habe die Frage in einem Forum gestellt, das eine extra FTP-Ecke hat. Dort bekomme ich aber keine Lösung für meine Frage. Vielleicht kann mir hier jemand helfen. 😭

Mit LIST -aL ( Server-Type: UNIX Type: L8 ) bekommt man die Liste aller Dateien und Directorys in der Form:

-rw-r--r-- 1 ftp1045289 ftponly 562 May 16 08:10 GetTables.php

Hier fehlt z.B. das Jahr. Man kann auch manchmal mit Jahr, aber ohne Uhrzeit bekommen.

Nun kann man das genaue Datum einer Datei mit:

MDTM + fileName

erhalten.

Jetzt frage ich, geht das nicht in einem?

Wenn nicht frage ich mich wie schafft es z.B. SmartFtp so schnell an die Daten zu kommen.

Ich brauche das für meinen FTP-Client --> Projekte.

Bin schon recht weit damit.

Mit dem kann man Dateien in den eigenen Editor laden, bearbeiten, wieder abspeichern und dann die Auswirkung sofort im eigenen Browser ansehen. Das funktioniert auch schon. Um die Dateien aber vernünftig verwalten zu können, brauche ich aber das genaue Datum. Dann kann ich sehen, ob die Datei mit der Kopie auf dem Rechner übereinstimmt. Ist das nämlich der Fall, brauche ich nicht von FTP zu laden sondern vom Rechner. Geht schneller.
Außerdem habe ich auch an der Möglichkeit die mySql Datenbank zu bearbeiten angefangen. Eine Kopie kann ich schon davon anfertigen. Auch automatisch Eingabemasken erzeugen. Hier weis ich schon, ob die Kopie noch mit der jeweiligen Tabelle übereinstimmt. Also es soll ein Alles-in-einem-Programm werden.

Wenn ich aber jedesmal nach der Liste das Datum jeder Datei abfrage ist das zu langsam. Es nervt.

Gruß Robert

27.05.2007 - 08:39 Uhr

Hallo herbivore,

frisch aufgestanden wollte ich dennoch einen kurzen Anlauf nehmen. Der hat mir zwar noch mehr klar gemacht, dass ich mich in die Materie noch vertiefen muss, aber schon einen Teilerfolg gebracht.

What cavarlier refers to is that on some editors, UTF-8 files are prefixed with a BOM (Byte Order Mark), an invisible marker three bytes in size, which are output by PHP if it encouters them (which is before the <?php on the first line). Notepad is particularly notorious creating these.

However, any decent editor (e.g. Notepad2) can save UTF-8 files without BOM, and if you do that the first <?php tag will truly be on the first character of the file.

So this does not mean that UTF-8 cannot be used by PHP.

please note when you include a ( utf-8 ) encoded file, this will be sufficient to send headers even if it doesnt contain any line breaks

Wie der Editor die encoding herausholt, weis ich noch nicht. Erholt aber aus den von mir in NotePad erstellten die encoding Windows-1252 heraus und die bleibt dann auch bestehen.

Ist UTF-8 das richtige Encoding?

scheinbar nicht. Da ich mich schon etwas in die Tiefen des Editors gewagt habe, habe ich auch den Ort des Übels gefunden:

			Encoding encoding = this.Encoding;
            if (encoding == null)
            { // use UTF8 with BOM by default
                stream = new StreamWriter(fileName, false, Encoding.UTF8);
            }
            else
            {
                stream = new StreamWriter(fileName, false, encoding);
            }

Eine neu erstellte Datei hat noch keine encoding. Daher wird dann UFT8 genommen.
Dies muss ich nur ändern und meine Welt ist vorest in Ordnung. =)

Da komme ich in jedem Fall noch mal drauf zurück.

Gruß Robert

27.05.2007 - 08:06 Uhr

Hallo herbivore,

Klar nehme ich noch einen Anlauf.

Habe nur zurzeit andere wichtige Sachen und muss es halt hinten anstellen. Auch wenn ich so etwas nicht gerne mache. Normal bin ich ein Kämpfer.

Gruß Robert

26.05.2007 - 20:32 Uhr

Hallo herbivore,

scheinbar muss ich noch viel lernen.

Ich gebe vorerst auf.

Gruß Robert

€dit die encoding macht der Editor. ich habe zwar gefunden wo ich das ausschalten kann, aber ich traue mich nicht so. Ist ja nicht für mich allein, möchte das für alle machen.

26.05.2007 - 19:50 Uhr

Hallo herbivore,

kann sein, dass ich jetzt lästig werde,
aber warum schafft das Notepad und ich nicht?

Wenn du möchtest, schicke ich Dir das gesamte Projekt.

Möchte es hier nicht machen, weil ich aus Bequemlichkeit automatische Zugänge zu meinem FTP eingebaut habe. Müsste aber suchen um sie aus zu bauen.

Gruss Robert

26.05.2007 - 19:22 Uhr

Hallo herbivore,

entschuldige, dass ich noch in allem so fit bin.
Im Geiste untescheide ich nicht zwischen byte und Zeichen.
Es ist doch nur eine Zahl.

Aber Deine Anmerkung:

die ByteOrderMark wird ja an den Anfang der Datei geschrieben.

lässt mich aufhorchen.
Wenn ich das, was ankommt, untersuche sind die ersten bytes : 239,187,191

Dann muss ich scheinbar encoding weglassen wenn es PHP ist!?

Gruß Robert

26.05.2007 - 16:45 Uhr

Hallo herbivore,

dann muss PHP das irgendwie nicht gebacken kriegen.

Warum aber:

Erzeuge eine Datei in Notepad oder anderem Editor mit zwei Zeilen.

Die Speichere ich dann ab.

Dann nimm ich sie mir mit meinem Programm und es werden die drei nullen nicht angehängt. Bzw. Dann kann ich machen was ich will und alles funktioniert.

Bestehende Dateien sind nicht davon betroffen.

Habe meinen FTP-Client jetzt schon sehr weit und arbeite ständig damit. Alles funktioniert, nur eine neue Datei erstellen funktioniert aus diesem Grund nicht.

Dann muss ich mir erst eine Datei mit zwei Zeilen in einem fremden Programm machen und per FTP auf den Server laden. Danach ist alles klar und es hängen auch diese nullen nicht dran.

Übrigens ( hat nichts mit dem Problem zu tun)
Brauchte für meine Seite alle möglichen Angaben zu Orten.
Da ich einmal dabei war habe ich angefangen einen Service zu schreiben.
Bei Eingabe eines Ortes bekommt man alle von mir gesammelten Werte und die Karte des Ortes (Google).
Gibt man z.B. ein Aa ein bekommt man alle Orte die mit Aa anfangen zur Auswahl (nur am Rande, vielleicht ist es nützlich)
Adressen in Deutschland mit Karte von Google

Gruß Robert

26.05.2007 - 16:22 Uhr

Hallo herbivore,

ich weis, manchmal bin ich ein Schelm. 😁

Aber die größe einer leeren Datei ist nun mal 0 und nicht 3.

Braucht du nur bei Eigenschaften im Browser anzusehen.

Ohne encoding 0;
Mit encoding 3.

Gruß Robert

26.05.2007 - 16:08 Uhr

Hallo herbivore,

.
            StreamWriter stream = new StreamWriter("test.txt", false, Encoding.UTF8);
            stream.Close();
            StreamReader sr = new StreamReader("test.txt");
            char[] arr = new char[sr.BaseStream.Length];
            sr.Read(arr, 0, (int)sr.BaseStream.Length);
            sr.Close();

Winziger schaffe ich nicht. 😉

Mach dir einen breakpoint dahinter.

Gruß Robert

€dit habe ein mini-Project gemacht

26.05.2007 - 15:20 Uhr

Hallo Alle,

StreamWriter hängt drei bytes mit Wert 0 an die Datei an.

Dazu müssen nach meiner bisherigen Erkenntnis folgende Bedingung erfüllt sein
*es muß mit encoding gearbeitet werden *die Datei muß weniger als zwei Zeilen haben.

Die macht im Normalfall nichts, bei PHP ist das aber tötlich.

Ich erzeuge mit dem CSharpTexteditor eine Datei. Dies macht er so:

StreamWriter stream = new StreamWriter(fileName, false, Encoding.UTF8);
// hier werden die Zeilen geschrieben. In meinem Fall keine
stream.Close();

Anschließend existiert eine Datei mit drei Byte.
Mache ich da jetzt zum Beispiel :

<?php
    error_reporting(E_ALL);
	session_start();
?>

in die Datei,
dann bekomme ich einen Fehler. Da vor session_start() die Headerinformation noch nicht gesendet sein darf.
Dafür ( habe keine andere Erklärung) sind diese drei bytes verantwortlich.

Sind aber in dem File zwei oder mehr Zeilen, so wird nichts angehängt. Wenn sie aber einmal drin sind, so bleiben sie auch drin.

Hat jemand eine Erklärung?

Gruß Robert

21.05.2007 - 12:12 Uhr

Hallo DarKlajid,

Das meiste Deiner wohlgemeinten Kritik sehe ich selber.
Manches liegt an meiner Unordnung die ich mir in meinem Alter nicht mehr abgewöhnen kann.
Manches an meinem Unwissen.( So lange programmiere ich noch nicht in C#)
Oder wie jetzt, wollt eben nur mal schnell..... weil ich es brauchte. Gepaart mit meiner Unordnung kommt dann so etwas heraus.

Und englisch habe ich in der Schule nur 2,5 Jahre gehabt. Lange her.

Aber Recht hast du.
Gelobe Besserung. 😉

Gruß Robert

21.05.2007 - 12:04 Uhr

Hallo herbivore,

123.4 // Punkt löschen
1234 // Ergebnis ungültig
12.34 // Punkt einfügen

Auch wieder so eine Glaubensfrage, was tun in dem Fall.
Habe mich vorerst dafür entschieden, die Wegnahme des Punktes zu akzeptieren und den Mangel anzuzeigen.

Vielleicht solltest du das mit dem Punkt auch so machen. Wenn man irgendwo einen Punkt drückt, verschwindet er einfach an der bisherigen Stelle.

Ja, wäre auch eine Möglichkeit. Kann mich nur schwach daran erinnern, dass bei irgendeinem Gerät/Programm???, das so gehandhabt wurde wie hier. Das war praktisch.

Mir ist es mehrmals gelungen über die Zwischenablage ganz am Ende Buchstaben einzufügen. Momentan kann ich es allerdings nicht reproduzieren.

Habe ich auch nicht geschafft zu reproduzieren.

Wenn man eine negative Zahl voller Länge hat und (einen zusätzlichen) Punkt eingeben will, verschwindet das Minus.

erledigt.

Klasse umbenannt, da Konflikt mit System.Windows.Forms.MaskedTextBox.

Außerdem sollten die Felder nachKommaStellen und maxLenght private sein und es sollte nach außen die Properties Vorkommastellen und Nachkommastellen geben.

Hatte ich kurz nach dem Abspeichern hier bei mir schon gemacht. Dabei gelernt, wie es in den Editor kommt.

Gruß Robert

21.05.2007 - 09:22 Uhr

Hallo herbivore,

Du lagst mit deiner Vermutung richtig und ich schäme mich so ungeprüft eine Sache darzubieten.

Habe es abgeändert und finde keinen Fehler mehr. Allerdings kommt mir das ganze etwas unplanmäßig vor.

Mit der Glaubensfrage hast du absolut Recht. Wie macht man´s am besten?

Z.B mit dem Minus:
Soll die Stelle bei den möglichen abgezogen werden? (habe ich nicht gemacht)
Setzen / rücksetzten habe ich mit der Minus-Taste gemacht. ??
Kann man auch anderer Ansicht sein.

Aber wie ich dich kenne, wirst du noch Fehler finden.

Werde jetzt damit arbeiten. Finde ich noch etwas werde ich es ohne Kommentar abändern.

Gruß Robert.

20.05.2007 - 21:16 Uhr

Hallo herbivore,

Original von herbivore
ich denke, das Problem ist, dass zwar jeder so etwas braucht, aber jeder unterschiedliche Vorstellungen hat, wie es (aus Anwendersicht) funktionieren soll.

Das könnte es sein.

Bei dem habe ich mir auch meine eigenen Vorstellungen realisiert.
Wie immer versuche ich dabei etwas weiter zu denken.

Ist man bei der Eingabe vor dem Komma und die möglichen Vorkommastellen sind erreicht, so wird der rest nach rechts verschonen.
Ist man nach dem Komma wird der Rest nach rechts verschoben und das übrige (falls zuviel) abgeschnitten.
Beim Druck auf Komma oder Punkt, wird entweder ein Punkt gemacht, oder wenn vorhanden dahinter gesprungen.
u.s.w

Nun da kommt wieder das subjektive. Ich denke, dass wäre gut.

Normalerweise setzt sich aber im Laufe der Zeit eine Schiene durch, die die meisten für gut befinden.
Das vermisse ich.

Gruß Robert

20.05.2007 - 20:46 Uhr

Hallo Alle,

Habe hier etliche Beiträge durchgelesen, um etwas fertiges, funktionierendes für eine Textbox zu finden, die mir decimal so verwaltet, wie ich es will.
Bei CodeProject bin ich auch nicht so richtig fündig geworden.

Für decimal habe ich mir jetzt etwas geschrieben:

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace RoMaskedTextBox
{
    public class DecimalTextBox : System.Windows.Forms.TextBox
    {
        int nachKommaStellen = 2;
        int maxLenght = 10;
        private IContainer components;

        private System.Windows.Forms.ErrorProvider errorProvider1;

        public DecimalTextBox()
        {
            InitializeComponent();
            TextChanged += new EventHandler(MaskedTextBox_TextChanged);
        }

        void MaskedTextBox_TextChanged(object sender, EventArgs e)
        {
            UeberPruefe();
        }
        [EditorBrowsable(EditorBrowsableState.Always)]
        public int NachKommaStellen
        {
            get { return nachKommaStellen; }
            set
            {
                if (value < 0) value = 2;
                nachKommaStellen = value; }
        }
        public int VorKommaStellen
        {
            get { return maxLenght - nachKommaStellen; }
        }
        [EditorBrowsable(EditorBrowsableState.Always)]//
        public int MaxLaenge
        {
            get { return maxLenght; }
            set
            {
                if (value < 0) value = 10;
                maxLenght = value; }
        }
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.errorProvider1 = new System.Windows.Forms.ErrorProvider(this.components);
            ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).BeginInit();
            this.SuspendLayout();
            // 
            // errorProvider1
            // 
            this.errorProvider1.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
            // 
            // MaskedTextBox
            // 
            this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.OnKeyPress);
            ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).EndInit();
            this.ResumeLayout(false);

        }
        private void OnKeyPress(object sender, KeyPressEventArgs e)
        {
            MaskDecimal(e);
        }
        string oldText = "";
        bool normaleEingabe = false;
        private void MaskDecimal(KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)3 || e.KeyChar == (char)22 || e.KeyChar == (char)24 || e.KeyChar == (char)26)
            {
                e.Handled = false;
                return;
            }
            if (Char.IsDigit(e.KeyChar) || e.KeyChar == '.' || e.KeyChar == 8 || e.KeyChar == '-' || e.KeyChar == ',')
            {
                bool minus = Text.StartsWith("-");
                normaleEingabe = true;
                int stelle = SelectionStart;
                if (minus)
                { 
                    Text = Text.Substring(1);
                    stelle--;
                }
                normaleEingabe = true;
                if (e.KeyChar == '-')
                {
                    minus =!minus;
                    e.Handled = true;
                    goto zurueck;
                }
                if (e.KeyChar == ',')
                {
                    e.KeyChar = '.';
                }
                if (this.SelectionLength == this.Text.Length)
                {
                    if (e.KeyChar != (char)22)
                        this.Text = null;
                }
                string str = this.Text;
                int indx = str.IndexOf('.', 0);
                if (Char.IsDigit(e.KeyChar))
                {
                    if (indx > -1)
                    {
                        string vorKomma = str.Substring(0, indx);
                        int nVorKomma = vorKomma.Length;
                        string nachKomma = str.Substring(indx + 1);
                        int nNachKomma = nachKomma.Length;
                        if (stelle == indx + nachKommaStellen + 1) // an letzter stelle, nichts tun
                        {
                            e.Handled = true;
                            goto zurueck;
                        }
                        if (stelle > VorKommaStellen)// nach dem komma
                        {
                            if (nNachKomma == nachKommaStellen)
                            {
                                Text = Text.Substring(0, Text.Length - 1);
                            }
                        }
                        else // vor komma
                        {
                            if (nVorKomma == VorKommaStellen) // maximale Länge vor komma schon erreicht
                            {
                                if (stelle != VorKommaStellen)// nicht am Komma
                                {
                                    Text = vorKomma.Substring(0, VorKommaStellen - 1) + "." + vorKomma.Substring(VorKommaStellen - 1);
                                    if (nNachKomma == nachKommaStellen)
                                    {
                                        Text += nachKomma.Substring(0, nachKommaStellen - 1);
                                    }
                                    else
                                    {
                                        Text += nachKomma;
                                    }
                                }
                                else // am komma
                                {
                                    Text = vorKomma + ".";
                                    if (nNachKomma == nachKommaStellen)
                                    {
                                        Text += nachKomma.Substring(0, nachKommaStellen - 1);
                                    }
                                    else
                                    {
                                        Text += nachKomma;
                                    }
                                    stelle++;
                                }
                            }
                        }
                    }
                    else
                    {

                        if (stelle == VorKommaStellen)
                        {

                            Text += ".";
                            stelle++;
                        }
                        else if (str.Length == VorKommaStellen)
                        {
                            string letzteStelle = str.Substring(str.Length - 1);
                            Text = str.Substring(0, str.Length - 1) + "." + letzteStelle;
                        }
                    }
                }
                else if (e.KeyChar == '.')
                {
                    if (indx > -1)
                    {
                        stelle = indx + 1;
                        e.Handled = true;
                        goto zurueck;
                    }
                    else if (str.Length - stelle > nachKommaStellen)
                    {
                        Text = str.Substring(0, stelle + nachKommaStellen);
                    }
                }
                e.Handled = false;
                zurueck:
                errorProvider1.SetError(this, "");
                if (minus)
                {
                    Text = "-" + Text;
                    stelle++;
                }
                SelectionStart = stelle;
            }
            else 
            {
                e.Handled = true;
                errorProvider1.SetError(this, "Nur Zahlen und Punkt erlaubt");
            }
        }
        void UeberPruefe()
        {
            if (!normaleEingabe && Text != String.Empty)
            {
                string error = "";
                bool minus =Text.StartsWith("-");
                int stelle = SelectionStart;
                if (Text.IndexOf(",") > -1)
                {
                    Text.Replace(",", ".");
                    SelectionStart = stelle;
                }
                int punkt = Text.IndexOf(".");
                if (punkt > -1)
                {
                    string vorKomma = Text.Substring(0, punkt);
                    int nVorKomma = vorKomma.Length;
                    string nachKomma = Text.Substring(punkt + 1);
                    int nNachKomma = nachKomma.Length;
                    if (Text.IndexOf(".", punkt + 1) > -1)
                        error += "Nur ein Dezimalpunkt erlaubt\r\n";
                    else
                    {
                        if (nVorKomma-(minus?1:0) > VorKommaStellen)
                            error += "Vor dem Komma sind zu viele Stellen\r\n";
                        if (nNachKomma > nachKommaStellen)
                            error += "Nach dem Komma sind zu viele Stellen\r\n";
                    }
                }
                else 
                for (int i = minus?1:0; i < Text.Length; i++)
                    if(! IsDiditOrDot(Text.Substring(i,1)))
                    {
                        error += "Nur Zahlen und Punkt erlaubt\r\n";
                        break;
                    }
                if (error != "")
                {
                    Text = oldText;
                    errorProvider1.SetError(this, error);
                }
                else
                {
                    if (oldText.IndexOf('.') > -1 && punkt < 0) // Komma wurde genommen
                        if (Text.Length > VorKommaStellen)
                            errorProvider1.SetError(this, "Komma entfernt, dadurch Vorkommastellen zu lang!");
                    oldText = Text;
                }
            }
            else
                oldText = Text;
            normaleEingabe = false;
        }
        bool IsDiditOrDot(string chr)
        {
            if (chr.Length != 1) return false;
            if(Char.IsDigit(chr.ToCharArray()[0])) return true;
            if (chr == ".") return true;
            return false;
        }
    }
}


vielleicht noch nicht ganz sauber, aber es ist brauchbar.

Nur frage ich mich, das brauchen doch auch andere, warum ist so etwas noch nicht fertig?
Das sind doch "Grundbedürfnisse".

Oder bin ich nur zu doof um das zu finden? 🙁

Gruß Robert

16.05.2007 - 13:46 Uhr

Hallo tom-essen,

ich bin bei weitem kein C# Profi.
alles was ich hier produziere ist auf das wenige Wissen der Sprache, dass ich mir bisher angeeignet habe, aufgebaut.

Ich kenne noch lange nicht alle Möglichkeiten. Das einzige was ich gut kann, ist kombinieren.
Dann fummle ich mir daraus etwas zurecht.
Mein Wissen wird zwar täglich größer, aber wie hier bin ich immer sehr dankbar wenn mir jemand hilft, der mehr Ahnung hat.

Baue sie einfach um und hänge sie an. Mit der Zeit bekommen wir dann vielleicht eine super Klasse.

Gruß Robert

16.05.2007 - 13:20 Uhr

Hallo tom-essen,

Weiss nicht genau was du meinst.

Das erste was ich tue ist, die Bilddaten aus dem Bild zu holen. Dann damit arbeiten und erst wieder bei Gebrauch in das Bild zu schreiben.
Daher ist das so schnell.

Eine Verzögerung ist nur beim ersten Gebrauch der Klasse da durch:

Damit das erste Bild nicht etwas länger braucht, sollte man :

C#-Code:
RoBitmap.InitializeColor();

vor Gebrauch machen.

Sonst sollte es schnell gehen.

Gruß Robert

16.05.2007 - 09:55 Uhr

WOW Tobias, (UnrealNemesiS)

das ist ja schon fast ein Tutorial.

Habe mich selbst schon ein wenig durchgekämpft, aber mit deinen Angaben wird der Nebel lichter.

Vielen Dank

Robert

14.05.2007 - 21:21 Uhr

Hallo alle,

Habe jetzt eine Version bereit gestellt, mit der ich schon gut arbeiten kann.

Unter Projekte zu finden.

Es ist für mich erfrischend, wenn ich eine PHP oder HTML lade, etwas ändere, dann auf speichern drücke und es mir im selben Programm im Web-Browser ansehen kann was ich da farbriziert habe.

Leider, an den Downloads sehe ich es, ist es wohl nicht so gefragt.

Ich mache es aber für mich, will euch nur, wie sagt man so schön, partizipieren lassen. Bin schon so oft geholfen worden.

Hab ich das jetzt richtig geschrieben? X( ist doch vielleicht besser Anteil nehmen lassen???

Gruß Robert

PS: Ihr habt mir alle geholfen, ich danke dafür. >Und wenn es nur dazu da war mir die Suchfunktion in einem anderen Forum zu zeigen.
Manchmal hat man ein Brett vor dem Kopf.

Danke euch

14.05.2007 - 13:49 Uhr

Die Dateien:

€dit: Hab noch einen einfachen Web-Browser dazu getan. Klick auf die Weltkugel.

14.05.2007 - 13:48 Uhr

Habe den FTP-Client jetzt grundlegend umgebaut.

Man kann Dateien von FTP laden im Editor ändern und wieder abspeichern.

Dies ist schon eine brauchbare Version, die ich aber noch erweitern werde.

Rechtsklick auf die Datei, und man kann sie laden oder löschen.
Rechtsklick auf den Baum um ganze Verzeichnisse zu löschen.
Rechtsklick auf die Reiter um zu schließen.
Contexmenü im Editor.
Die letzten offenen FTP-Verbindungen werden beim Start wieder geöffnet.
Dies merkt er sich unter:
HKEY_LOCAL_MACHINE\SOFTWARE\Ro_FTP_Client\Servers

Einige Sachen sind noch "Under Constuction" eine Messagebox sagt welche.

Gruß Robert