Laden...

Forenbeiträge von Robertico Ingesamt 344 Beiträge

14.05.2007 - 06:35 Uhr

Danke dr4g0n76,

schon der zweite Beitrag hat mir eine Richtung gezeigt.

Z.B: insert

TextEditorControl rtb = new TextEditorControl();
TextAreaControl tac = rtb.ActiveTextAreaControl;
rtb.Document.Insert(tac.TextArea.Caret.Offset, Clipboard.GetText());
        public void Cut()
        {
            tac.TextArea.SelectionManager.RemoveSelectedText();
        }

Die Sachen sind also weit unten versteckt. Denke jetzt komme ich weiter.

Nochmal Danke

Robert

13.05.2007 - 20:15 Uhr

Hallo juetho, hallo dr4g0n76,

Die PDF ist sehr ausführlich. Hatte auf anhieb auch schon etwas gefunden.

Document.Insert(Document.Caret.Offset, str);

Nur dieses Caret kenn er nicht.

Dann habe ich mich jetzt auf euer Anraten bei dem Forum angemeldet und die gleiche Frage gestellt. Hoffe, dass mir niemand böse ist.

Ich denke nur, das ist ein so schönes Werk, der Editor, da müsste doch irgendwo stehen wie man ihn benutzen kann.

Warten wirs ab. Bin aber trotzdem für jeden Hinweis dankbar.

Gruß Robert

13.05.2007 - 18:19 Uhr

Hallo Bernd,

habe beides Versucht

Sendkeys.Send("^C");

gibt es zwar, aber wohin sendet er das? Jedenfalls nicht an den Editor.
Verbesserung; Habe mal ohne ^gemacht, dann wird es gesendet. Aber klar, nur das C. X(

Habe auch vorher den Focus gegeben.

RichTextBox1.Copy(); gibt es nicht in: ICSharpCode.TextEditor

Evtl. meinst du etwas anderes. €dit: sagtest du ja. Nur bevor ich hier frage suche ich richtig gut. Nichts gefunden.

Gruß Robert

13.05.2007 - 17:10 Uhr

Und zum zweiten Punkt ein wenig Eigenwerbung:

TabControl like Visual Studio

Gruß Robert

13.05.2007 - 16:59 Uhr

Oder,

Man könnte diesen Beitrag dazu benutzen eine Sammlung von Wissen über den Editor anzulegen.

Wenn jemand etwas zu der Bedienung weiss, egal was, einfach ungefragt hier herein schreiben.

Wenn genug zusammen ist, bin ich gerne bereit ein Tutorial zu schreiben.

Dass ich das kann, kann ein Klick auf mein Bild unten zeigen.

Gruß Robert

13.05.2007 - 16:45 Uhr

Hi Alle,

Da ich zur zeit viel in FTP arbeite gehen mir die ewigen Aktionen von einem Programm zum anderen auf den Geist.

An einem FTP-Client habe ich ja in Projekte schon mal angefangen.
Den will ich dazu benutzen um ein feines Werkzeug zu machen. Und zwar einen Editor, in dem man arbeiten kann und das Produkt per Knopfdruck auf den Server laden.

Das funzt auch.

Als Texteditor habe ich obigen genommen.

Undo und Redo habe ich leicht gefunden.

Aber wie mache ich:

-- copy
-- past
-- delete
-- insert
...

englisch kann ich leider nur leidlich.

Wenn mir jemand hilft, so wäre das für alle nützlich. =)

Gruß Robert

PS.

Wenn jemand, der diesen Editor kennt ein kurzes Tutorial schreiben würde, so wäre das wunderbar. 😁

30.04.2007 - 17:01 Uhr

Habe mit fummeln einen workaround gefunden:

node1.NodeFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
node1.Text = node1.Text;

Durch das Zuweisen des eigenen Textes rechnet er wohl die neue Breite aus.

😁 😁 😁

Gruß Robert

30.04.2007 - 16:02 Uhr

Hi tom-essen,

er ist null.

Abhilfe schafft das:

node1.NodeFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

Allerdings habe ich jetzt das Problem, wenn dieser Font zwischendurch einmal gesetzt wird, so wird der Text abgeschnitten, da länger.
Wird er vor einsetzten in den Baum gesetzt ist alles gut.

Habe auch schon Node auf Bold gesetzt,
ins TreeView,
dann im TreeView wieder auf normal.

Das gleiche setze ich ihn dann später auf Bold wird wieder abgeschnitten.
Der Trick hat also nocht funktioniert.

Eine Ahnung?

Gruß Robert

Edit:

Da wird es nichts geben, da selbst Microsoft sagt die einzige Möglichkeit wäre den Text mit Blank zu verlängern oder selbst zeichnen.

29.04.2007 - 12:24 Uhr

Hallo jdem,

habe mich nicht damit auseinandergesetzt wie es funktioniert.
Nur habe ich gesucht und bin bei Codeproject fündig geworden.
Denke, dass es jeder Explorer auch so macht.
Man hat ja oft ein Programm, mit dem man bei Doppelklick auf eine Datei diese öffnet.
Welches Programm wird aus der Registry ausgelesen. Dieses zugehörige Icon holt die Methode:

public static Icon IconFromExtension(string Extension, IconSize Size)

heraus.

Wenn du das Projekt lädts, findest du es in der Datei Images.cs .

Gruß Robert

29.04.2007 - 11:54 Uhr

Hatte ein Problem.

Etwa 130 Verzeichnisse musste ich löschen. Gespickt von Umlauten.
SmartFTP kam mit den Umlauten nicht klar.
FTPClient habe ich den Knopf zum Löschen nicht gefunden.
Was tun sprach Zeuss.

Da habe ich diesen kurzerhand umlautetauglich gemacht und im Contexmenü vom treeView das Löschen von Verzeichnissen eingebaut.

Dies geschieht rekursiv und man kann sich nicht unbedingt darauf verlassen, dass wenn der Pfad nicht mehr angezeigt wird auch wirklich nicht mehr da ist.

Neustarten des Programms schafft Sicherheit. Allerdings, wenn während des Löschens keine rote Schrift kommt, so kann man davon ausgehen, dass alles geklappt hat. (Wenn ich Zeit habe baue ich da noch Sicherheit ein, oder jemand anderes möchte das tun)
Kann mir wirklich niemand helfen bei obigem Problem?erledigt

Gruß Robert

28.04.2007 - 21:02 Uhr

Getan

Allerdings fehlt mir die Muße (Zeit) das alles genau hin zu bekommen.

Zu groß, lass mir was einfallen. Jetzt klappts.

Gruß Robert

28.04.2007 - 20:58 Uhr

Original von janismac
wer zeit und lust hat kann sie ja noch verbessern und mit besserer grafischer
oberfläche versehen

Gesagt

28.04.2007 - 18:00 Uhr

Hallo blackcoin,

was mich außerordendlich wundert ist, dass das Bild ja nicht mehr benutzt wird.

Wie prüfe ich am besten, ob ich Vollzugriff habe?

Gruß Robert

28.04.2007 - 17:31 Uhr

Hallo alle,

habe ein Bild in einer PictureBox:

pictureBox1.Image = Image.FromFile(dir + wort + ".jpg");

Dann will ich es umbenennen:

            pictureBox1.Image.Dispose();
            pictureBox1.Image = null;
            
            File.Move(dir + "\\" + name2 + ".jpg", dir + "\\" + textBoxBildName.Text + ".jpg");

Das geht manchmal 10 mal gut manchmal nur zweimal,

Dann bricht er ab und sagt es wird von einem anderen Prozess benutzt.

Bin ratlos 🙁 . Hat jemand eine Idee, was ich machen könnte?

Gruß Robert

23.04.2007 - 19:06 Uhr

Hallo alle,

da ich ein wenig verstehen wollte wie dies funktioniert, habe ich an einem FTP-Client angefangen.

Dazu habe ich aus Codeproject eine Klasse entnommen und diese so umgebaut, dass ich daraus in Events meine Messages bekomme.

Weiter habe ich eine schöne Methode gefunden, mit der man das dazu gehörige Icon an hand der Extension bekommt.

Viel können, kann es noch nicht. Daher kann man auch noch durchblicken.
Etwa so aufgebaut wie SmartFTP.

Kann nur Verbindung aufbauen und die Pfade/Dateien auslesen.
Aja: NOOP kann es auch 😉

Habe noch Probleme mit der RichTextBox. Nachzulesen und beantworten bitte in dem Thread:
RichtextBox verliert alte Formatierung

Wenn mir da jemand helfen könnte 😁

Man sieht das Problem in der Zeile:

[ 18:52:11 ]   SIZE [ 18:52:11 ]  211 End 

obwohl ich ZeilenEnde hinter SIZE dazu gebe kommt dies nicht.

Dann habe ich noch eine Frage:
FTP gibt bei List die Werte der Dateien zurück. Allerdings wenn eine Uhrzeit dabei ist, nicht das Jahr. SmartFTP hat aber das Jahr der Datei wenn eine Uhrzeit dabei ist.

Kann mir da auch jemand oben drauf antworten?

Gruß Robert (weiter unten aktuelle Version)

23.04.2007 - 14:41 Uhr

Hallo herbivore,

meinte natürlich 'für mich unerklärlich' 😉

Nichts desdo trotz, es bleibt dabei.

Mit

                string txt = "[ " + DateTime.Now.ToLongTimeString() + " ]  " + _message + Environment.NewLine;//"\r\n" + "\r\n"

oder einmal "\r\n" wird die nächste Zeile an die letzte angehängt.

Wie gesagt nur oben, unten klappt es mit einem. Bzw. wenn ich dort zweimal mache, dann kommt noch eine Leerzeile.

Gruß Robert

23.04.2007 - 14:09 Uhr

Hallo Herbivore,

Klasse, genau das war es. (AppendText(txt); )

Im Gefühl hatte ich das, nur habe ich AppendText nicht bemerkt.

Wohl noch zu früh. 😉

Da ich gerade hier bin, bin dabei um die Vorgänge zu verstehen einen einfachen FTP-Client zu schreiben.

Klappt auch schon ganz gut.

Hat das Zweck, wenn ich ihn nachher in die Projekte stelle?

Dann noch das unerklärliche zwei mal "\r\n" ?

Gruß Robert

23.04.2007 - 13:51 Uhr

Hallo,

in einer Richtextbox wird regelmäßig eine Zeile zugefügt.
Je nachdem woher sie kommt, soll sie eine andere Farbe haben.

Nun hat immer nur die letzte Zeile die richtige Farbe. Die anderen werden wieder schwarz. ???

        void ftp_MessageResponsed(string _message)
        {
            if (this.richTextBox1.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(ftp_MessageResponsed);
                this.Invoke(d, new object[] { _message });
            }
            else
            {
                string txt = "[ " + DateTime.Now.ToLongTimeString() + " ]  " + _message + "\r\n" + "\r\n";
                this.richTextBox1.Text += txt;
                richTextBox1.SelectionStart = richTextBox1.Text.Length - txt.Length+4;
                richTextBox1.SelectionLength = txt.Length;

                richTextBox1.SelectionColor = Color.Blue;
                richTextBox1.SelectionLength = 0;
            }

        }

        void ftp_MessageSended(string _message)
        {
            if (this.richTextBox1.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(ftp_MessageSended);
                this.Invoke(d, new object[] { _message });
            }
            else
            {
                string txt = "[ "+DateTime.Now.ToLongTimeString()+" ]  "+ _message + "\r\n";
                this.richTextBox1.Text += txt;
                richTextBox1.SelectionStart = richTextBox1.Text.Length - txt.Length+2;
                richTextBox1.SelectionLength = txt.Length;

                richTextBox1.SelectionColor = Color.Green;
                richTextBox1.SelectionLength = 0;
            }
            
        }

Ebenso kann ich mir nicht erklären, warum ich bei der ersten Methode zwei mal "\r\n" machen muss um eine neue Zeile zu bekommen.

Gruß Robert

02.04.2007 - 11:50 Uhr

Hallo,

war ich wohl ein wenig zu voreilig. 8o

Gruß Robert

01.04.2007 - 18:42 Uhr

Hallo Alle,

Hatte so meine Schwierigkeiten mit dem Datum in SQLite.

Es wird zwar alles angenommen, will man es dann wieder haben gibts Ärger.

Daher habe ich mir etwas geschrieben, dass mir den Ärger vom Hals schafft:

. 
       private string ToSqlDateTime(DateTime datum)
        {
            string tag = datum.Day.ToString();
            if (tag.Length == 1) tag = "0" + tag;
            string monat = datum.Month.ToString();
            if (monat.Length == 1) monat = "0" + monat;
            string uhrzeit = datum.ToLongTimeString();
            string jahr = datum.Year.ToString();
            return "'"+jahr + "-" + monat + "-" + tag + " " + uhrzeit+"'";
        }

Gruß Robert

21.03.2007 - 08:19 Uhr

Hallo herbivore,

Danke, ich denke, das ist für dieses Forum auch sinnvoll.

Nach meinem "kleinen" Veständnis ist ja nur eine Gefahr denkbar, wenn der Browser etwas anderes damit anstellen kann als herunter laden. (ausführen)

Denke nicht, dass ein Browser bei cs dies anbietet.

Gruß Robert

18.03.2007 - 22:00 Uhr

Hallo chaossurfer,

das würde ich gerne machen, wenn ich qualifiziert wüsste wie ich das anstellen soll.

Evtl. bekommen wir zwei ja jetzt Hilfe dadurch. 😉

Gruß Robert

18.03.2007 - 20:47 Uhr

Hallo DCoder,

keinen Schimmer von Vista, da ich aber denke, dass die nicht ganz doof sind, lade es einfach und compiliere es neu.

Mag ja sein, dass sich das nicht verträgt??!!

Gruß Robert

18.03.2007 - 20:10 Uhr

Hallo ihr alle,

Da meine Tochter (9) jetzt englisch hat und zu faul ist Vokabeln zu pauken, will ich Ihr einen interessanten Trainer bauen.

Mit dem (Karteikasten in Wirklichkeit) habe ich zwei Sprachen gut gelernt.
Da das gut geklappt hat möchte ich es jetzt auch für den PC machen.

Das Grundprinzip ist ein Karteikasten mit vier Fächern.

Zunächst stehen die Vokabeln (nicht zu viele) im ersten Fach.

Dann soll es verschiedene Stufen des Lernens geben.

-- Anschauen --> umdrehen
-- Anschauen --> schreiben
... u.s.w

Je nachdem ob man es gekonnt hat, kommt die Karte ins nächste Fach, oder in das gleiche hinten an.

Naja, wenn man ins fünfte Fach greifen will, so ist das wie Weihnachten verpennt. 😉Und wenn das fünfte Kerzlein brennt dann haste Weihnachten verpennt

So werden die nicht gekonnten öfter geübt, als die, die man schon kann.

Was ich fertig habe ist nur der Anfang. (noch nichts mit Vokabeln):
Der Karteikasten, in dem eine Karte gezogen wird, mehr nicht.

Fit bin ich allemal nicht in dem, und so hoffe ich auf Anregungen, wie ich etwas besser machen kann.

Gruß Robert

PS. Für DirektX - Anfänger evtl zu gebrauchen.

15.03.2007 - 19:43 Uhr

Danke für den Tip.

Habe es ausprobiert. Demnach ist die original Version ca. 20% schneller.
Wer also nichts anderes anstellen will mit dem Bild ist besser bei der Clone-Version aufgehoben. (weil einfacher da schon drin)

Werde aber noch feilen. 😁 . Mag Schnelligkeit.

Gruß Robert

15.03.2007 - 18:51 Uhr

Hallo Alle,

Habe von marsgk auch schon gelernt. Zum Dank.

@marsgk; wenn man im Stress ist übersieht man einiges bzw. kommt einiges zusammen, dass man den Überblick verliert.

Habe mal ein kleines Projekt gemacht, in dem man mit Reglern den Bildauschnitt verschieben kann.

Links ist meine Version, rechts ist Bitmap.Clone(...)

Zeitunterschiede kann ich nicht feststellen. Vorteile sehe ich aber bei meiner Version, da man keine Sicherung mehr einbauen muss. Die ist schon drin.

In dem Zusammenhang gibt es etwas keineres als** Environment.TickCount** ?

Gruß Robert.

15.03.2007 - 16:34 Uhr

Original von marsgk
Man muss ja nicht alles neu erfinden...

Da hast du absolut Recht!!!

Wenn es das schon gibt, braucht man es nicht. Ich wusste das noch nicht.

Gruß Robert

15.03.2007 - 16:14 Uhr

@ Mr.Ed

Habe oben den Link zugefügt. Ganz unten ist die neueste Fassung. Man kann alles mögliche mit dem Bild anstellen. Wenn ich Zeit habe oder wie hier Bedarf sehe erweitere ich immer ein bischen. =)

Und @marsgk

Ist 800 mal schneller in GetPixel und SetPixel.

Wenn ich mich nicht irre, hat er mit Bitmap.Clone() ja auch nur eine Kopie und keinen Ausschnitt.

Gruß Robert

15.03.2007 - 15:57 Uhr

Hallo Mr.Ed,

Wenn es nichts anderes gibt, so kannst du auch hier meine Klasse verwenden.

Habe dazu gerade eine Methode geschrieben und getestet:

        public Bitmap GetPieceOfImage(Rectangle rect)
        {
            Bitmap tmpBitmap = new Bitmap(rect.Width, rect.Height);
            RoBitmap tmpRoBitmap = new RoBitmap(tmpBitmap);
            for (int x = rect.X; x < rect.X + rect.Width && x < Width; x++)
                for (int y = rect.Y; y < rect.Y + rect.Height && y < Height; y++)
                    tmpRoBitmap.SetPixel(x - rect.X, y-rect.Y, GetPixel(x, y));
            return tmpRoBitmap.Image;
        }

Die musst du dann noch dazu packen. 😉

Einfach dann von dem Bild eine RoBitmap machen, oder es damit laden. Dann z.B:


                pictureBox1.Image = rob.GetPieceOfImage(new Rectangle(480,100,240,240));

Und schon ist der gewünschte Ausschnitt in der pictureBox

Gruß Robert

14.03.2007 - 11:19 Uhr

Hallo Kami.

Habe lange nicht mehr damit gearbeitet, könnte Dir aber helfen:

http://www.mycsharp.de/wbb2/thread.php?threadid=29667

Ist vielleicht etwas groß, funktioniert aber.

Gruß Robert

14.03.2007 - 11:12 Uhr

Erweiterte Version:

Auf Anregung von nils in eine txt-Datei gepackt und angehängt.

Die Endung cs ist komischerweise in myCSharp.de nicht erlaubt 😁

Gruß Robert

PS: Als Admin ohne Probleme änderbar

public RoBitmap(Bitmap bld)
public RoBitmap(string fileName)

public Color[,] GetColorArray()

public Color GetPixel(int x, int y)
public void SetPixel(int x, int y, Color col)

public int Width
public int Height
public Bitmap Image
public Bitmap ConvertTo8Bpp()
public Bitmap ConvertTo8Bpp(int zusatz)
public Bitmap ConvertToGrayScale24bppBitmap()
public Bitmap ConvertToGrayScale8bppBitmap()
public Bitmap GetNegativ()
public Bitmap GetTransparent(Color transparentColor)
public Bitmap GetAllTransparent(byte tranparenz)
public Bitmap GetTransparent(Color transparentColor, byte tranparenz)
public Bitmap GetContrastedImage(float _contrastFactor)
public Bitmap GetFormat1BppIndexed()
public Bitmap GetFormat1BppIndexed(float brightness)
public Bitmap GetFormat1BppIndexed(float brightness, Color _color1, Color _color2)
public Hashtable ZaehleFarben()
public void Save(string fileName)

14.03.2007 - 10:24 Uhr

Hallo MrJack,

Wieso Totaler Mist? Alles, wofür es gebraucht wird!

Wie wäre es mit:

ClientSize

Gruß Robert

03.03.2007 - 19:44 Uhr

Versuche schon die ganze Zeit einen zweiten Anhang unter zu bringen.

???

Hier ist ein einfaches Projekt wie oben im Bild.

Gruß Robert

03.03.2007 - 19:33 Uhr

Hallo Alle,

Angeregt durch einen Artikel:

http://www.codeproject.com/dotnet/CustomTabControl.asp

habe ich dieses so umgeändert, dass nahezu nur die Methodennamen übrig geblieben sind.

Gestört hatte mich, dass die Ecken links unten beim selektierten Tab nicht angezeigt wurden, dass (wie so oft) viel zu viel dazu gepackt wird. ( Ich lerne ja noch und da verwirrt mich das)

Da ich schon einmal dabei war, habe ich auch noch einige Erweiterungen eingebaut.

Sieht schon gut aus.

Über dem grünen Reiter ist gerade die Maus.(alle Farben sind einstellbar)

Gruß Robert

02.03.2007 - 16:38 Uhr

Ctrl-A wird fast immer für alles markieren verwendet.

Edit: Sollte ja als zweites Zeichen verwendet werden. 🙁

01.03.2007 - 19:39 Uhr

Wer jetzt noch sagt, dass wäre langsam, kriegt Haue. 😉

    class MyButton : Button
    {
        public bool bildZeichnen = true;
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.Clear(BackColor);
            if (bildZeichnen)
            {
                ButtonRenderer.DrawButton(e.Graphics, ClientRectangle, System.Windows.Forms.VisualStyles.PushButtonState.Normal);
                SizeF sizeF = e.Graphics.MeasureString(Text, Font);
                e.Graphics.DrawString(Text, this.Font, new SolidBrush(ForeColor), new PointF(((float)Width - sizeF.Width) / 2, ((float)Height - sizeF.Height) / 2));
            }
            else
                base.OnPaint(e);
            bildZeichnen = false;
        }
    }

Gruß Robert

PS: Im Debug-Modus kann man noch etwas sehen, wenn man schnell schaut.

Habe meinen Bildschirm vollgepflastert mit 800 Buttons:

            for (int i = 0; i < 25; i++)
            {
                for (int j = 0; j < 32; j++)
                {
                    btn = new MyButton();
                    btn.Text = "*";
                    btn.Width = 40;
                    btn.Height = 40;

                    pos_x = j * 40;
                    pos_y = i * 40;

                    btn.Left = pos_x;
                    btn.Top = pos_y;
                    Controls.Add(btn);
                }
            }

Dann kann man auch in der Release kurz etwas sehen.

01.03.2007 - 18:27 Uhr

Hallo herbivore,

Habe das probiert (kannte ich noch nicht).

Es geht sehr fix, aber ist nicht der selbe Style.

ControlPaint.DrawButton(e.Graphics,new Rectangle(this.Location,this.Size),ButtonState.Normal);

Geht das auch mit dem Style wie der Button oben?

Gruß Robert

€dit: Habe etwas gefunden:

                 ButtonRenderer.DrawButton(e.Graphics,ClientRectangle,System.Windows.Forms.VisualStyles.PushButtonState.Normal);

Dann wird der Button im XP-Style gezeichnet: Jetzt nur noch den Text dazu, und die Illusion ist perfekt. 🙂

01.03.2007 - 18:06 Uhr

Hallo herbivore,

wenn ich dich richtig verstehe, den Button immer selbst zeichnen?

In meinem Beispiel ist es so, dass wenn

base.OnPaint(e);

ins Spiel kommt, dann dauert es, da (vermute ich) immer die OnPaint der Form aufgerufen wird.

Beim Zeichnen des Bildes nicht.

Gruß Robert

01.03.2007 - 17:47 Uhr

Hi Alle,

Da mich Geschwindigkeit immer interessiert habe ich mal ein wenig damit gespielt.

Die Zeit wird verbraucht beim Zeichnen der Buttons.

Jeder Button ruft die OnPaint-Methode der Form auf.

So habe ich mir einen Button gemacht, der zunächst das Bild von sich malt und dann sich selbst. So merkt man das wenigstens nicht.

Das funktioniert aber nur mit diesen Buttons. Vielleicht fällt ja jemandem dazu etwas ein.

namespace btnTest
{
    public partial class Form1 : Form
    {
        MyButton btn ;
        public Form1()
        {
            InitializeComponent();
            _addButtons();
        }
        private void _addButtons()
        {
            int pos_x = 0;
            int pos_y = 0;

            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                    btn = new MyButton();
                    btn.Text = "*";
                    btn.Width = 40;
                    btn.Height = 40;

                    pos_x = j * 40;
                    pos_y = i * 40;

                    btn.Left = pos_x;
                    btn.Top = pos_y;
                    Controls.Add(btn);
                }
            }
            
        }
    }
    class MyButton : Button
    {
        public bool bildZeichnen = true;
        Image btnBild = Image.FromFile(@"Button.png");
        protected override void OnPaint(PaintEventArgs e)
        {
            if (bildZeichnen)
                e.Graphics.DrawImage(btnBild, new Point(0, 0));
            else
                base.OnPaint(e);
            bildZeichnen = false;

        }
    }
}
19.02.2007 - 19:34 Uhr

Jetzt habe ich den Font in OnPaint geändert. Dann benimmt sich der Cursor.

Da heisst, ich machte es am falschen Zeitpunkt. ???

Gruß Robert

19.02.2007 - 18:44 Uhr

Hallo SABF,

Das Problem bei der RTB ist ja, dass man etliche Größen machen kann.

Wenn man will jeden Buchstaben anders.

Habe mich auch fast schon damit abgefunden, das ich durchgängig nur eine Größe zulasse. Eine Zeile wäre mir auch noch egal. Ich möchte nur das ganze Drum herum der TextBox benutzen können.

Dann müsste ich mit MeasureString die Größe herausfinden.

Dazu muss ich dann wieder

SetStyle(ControlStyles.AllPaintingInWmPaint |
                                    ControlStyles.ResizeRedraw |
                                    ControlStyles.UserPaint, true);

machen, da ich sonst nicht an die OnPaint komme.

Undann, ja dann spinnt das Ding. Sowohl TectBox als auch RichtTextbox zeigen nicht den Font an, den ich vorgebe.

What can I do ? 😭

AutoSize in der Höhe macht die Textbox ja automatisch nur nicht in der Breite. Wenn das wäre, würde ich es darüber erfahren.

Gruß Robert

Edit:
Da es nicht viel ist

    public class AutoTextBox: RichTextBox
    {
        public AutoTextBox()
        {
            TextChanged += new EventHandler(AutoTextBox_TextChanged);
            base.SetStyle(ControlStyles.AllPaintingInWmPaint |
                                    ControlStyles.ResizeRedraw |
                                    ControlStyles.UserPaint, true);

            Multiline = false;
            Font = new Font("Verdana", 20.0f);
            BorderStyle = BorderStyle.None;
            Width =  20;
            MouseMove += new MouseEventHandler(AutoTextBox_MouseMove);
        }
        void AutoTextBox_TextChanged(object sender, EventArgs e)
        {
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            //e.Graphics.Clear(Color.Blue);
            SizeF sz = e.Graphics.MeasureString(base.Text, Font);
            if (sz.Height != 0.0f)
            {
                Width = (int)sz.Width + 20; Height = (int)sz.Height + 5;
            }
            base.OnPaint(e);
            e.Graphics.DrawString(base.Text, Font, Brushes.Black, new PointF(-5, 0));
        }
        public const int WM_NCLBUTTONDOWN = 0xA1;
        public const int HT_CAPTION = 0x2;

        [DllImportAttribute("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd,
                         int Msg, int wParam, int lParam);
        [DllImportAttribute("user32.dll")]
        public static extern bool ReleaseCapture();

        void AutoTextBox_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                ReleaseCapture();
                SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
            }
        }


    }

Jetzt habe ich zwar den Text und gewünschte Maße, nur der Cursor ist nicht dort wo er hin soll. Er orientiert sich in Position und Höhe an einem anderen Font.

19.02.2007 - 13:29 Uhr

Hallo Alle,

wie bekomme ich die Breite und Höhe des Textes in einer Richtextbox heraus?

Ein Autosize wie beim label würde schon reichen.

Möche einen Text in einer rtb mit Toolbar anfertigen lassen, und den dann mit jeweils einer ReadOnly rtb an seiner Position anzeigen. Dazu müsste ich zumindest die Breite des Textes wissen.

Gruß Robert.

19.02.2007 - 10:35 Uhr

http://www.codeproject.com/csharp/csharpmovewindow.asp?df=100&forumid=202017&exp=0&select=1175177

Dadurch bleiben mir die Events erhalten und ich kann schieben wann ich will.

Gruß Robert

19.02.2007 - 07:16 Uhr

Hallo marsgk,

Das klappt jetzt.

Hatte vorher so etwas drin:

		private const int WM_NCHITTEST = 0x84;
		private const int HTCAPTION = 0x2;
		protected override void WndProc(ref Message m)
		{
			if(m.Msg == WM_NCHITTEST)
				m.Result = new IntPtr(HTCAPTION);
			else
				base.WndProc(ref m);
		}

Damit lässt sich das Fenster wunderbar verschieben. Allerdings kommen keine MouseEvents mehr an. Dann hatte ich es erst mal eliminiert.

Für die normale Anwendung habe ich mir so beholfen, dass ich dies nur zulasse, wenn es nicht vom Programm gebraucht wird.

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_NCHITTEST)
            {
                m.Result = new IntPtr(HTCAPTION);
                int low = LoWord((int)m.LParam);
                int hig = HiWord((int)m.LParam);
                
                Point pcl = PointToClient((new Point(low, hig)));
                if (pcl.X < 20 || pcl.X > Width - 20)
                {
                    base.WndProc(ref m);
                    return;
                }
                for (int j = aktSeite; j < aktSeite + 2; j++)
                    for (int i = 0; i < seiten[j].bilder.Count; i++)
                        if (seiten[j].bilder[i].IstDrin(pcl))
                        {
                            SelectedPicture = new Point(j, i);
                            base.WndProc(ref m);
                            return;
                        }
            }
            else
                base.WndProc(ref m);
        }
        public static int HiWord(int number)
        {
            if ((number & 0x80000000) == 0x80000000)
                return (number >> 16);
            else
                return (number >> 16) & 0xffff;
        }

        public static int LoWord(int number)
        {
            return number & 0xffff;
        }

Das klappt soweit.

Allerdings habe ich ein Contexmenü. Das öffnet sich jetzt nur, wenn es auf eins der Bilder angefordert wird.

Gibt es einen Weg das zu ändern? Z.B zu erfahren welche Taste gedrückt wurde.

Gruß Robert

18.02.2007 - 19:15 Uhr

Hallo Alle,

habe eine Form ohne Border.

Zum Verschieben habe ich das in MouseMove gemacht:

if(MouseUnten)
            {
                int diffX = e.X - enterPos.X;
                int diffY = e.Y - enterPos.Y;
                this.Location = new Point(Location.X + diffX, this.Location.Y + diffY);
                enterPos = e.Location;
            }

enterPos lege ich bei MouseDown fest.

Jetzt wackelt die Form hin und her. Sie wird im Wechsel zwei mal angezeigt.
Auch wenn nicht die Maus nicht mehr bewege. Erst wenn ich die Maus loslasse ist alles normal.

Hat jemand eine Hilfestellung dazu?

Gruß Robert.

16.02.2007 - 20:25 Uhr

Hi alle,

Bin gerade dabei fleissig dabei zu bauen.

Da will man natürlich Fotos von haben. Schon lange suche ich nach einer Form, das schön mit dem PC zu machen.

Angeregt durch einen Artikel hier habe ich ein Projekt von CodeProject so umgearbeitet, dass ich ein Buch habe, dass sich beim Starten aufschägt.

Der erwähnte Artikel handelte von Tranzparenz.

Hoffe, dass es jemand gebrauchen kann.

Wenn es fertig ist hänge ich es an. Das kann aber dauern. Dafür jetzt zuerst den Anfang.

Finde es schön. 🙂

Gruß Robert

€dit: Kann sein, dass bei anderen Bildschirmauflösungen als 1280 x 1024 umgearbeitet werden muss.

06.02.2007 - 09:08 Uhr

Hallo nin,

Die zur Verfügung stehenden habe ich alle durch. Gesucht habe ich auch viel.

Ich meine exakt den Cursor im Anhang.

Gruß Robert

Edit: Im SharpDevelop ist er drin: RightArrow.cur

05.02.2007 - 21:27 Uhr

Hallo,

möchte den Pfeil, der nach links zeigt, nach rechts zeigen lassen.

So wie im Visual Studio, wenn man über den ZeilenNummern ist.

Geht das mit einem Befehl, oder muss man diesen erzeugen?

Eine *.cur dazu habe ich leider noch nicht gefunden.

Gruß Robert