Laden...

Forenbeiträge von digi333 Ingesamt 290 Beiträge

06.03.2020 - 22:09 Uhr

Ich möchte gerne eine Color Picker bauen. Dieser wird durch einen Timer aktualisiert und soll beendet werden durch ein Mouse Button. Mouse Button Events bekomme ich jedoch nur innerhalb einer Form, eines Button oder Ähnlichem. Ich möchte aber, das die Aktualisierung außerhalb der Form unterbrochen wird. Ich könnte irgendwo auf den Hintergrund von Windows klicken und der Timer wird beendet... aber wie?


public Form1()
        {
            InitializeComponent();
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Graphics myGraphics = this.CreateGraphics();
            Bitmap memoryImage = new Bitmap(1, 1, myGraphics);
            Graphics memoryGraphics = Graphics.FromImage(memoryImage);
            memoryGraphics.CopyFromScreen(Cursor.Position.X, Cursor.Position.Y, 0, 0, new Size(1, 1));

            Color color = memoryImage.GetPixel(0, 0);
            label1.Text = color.ToString();
        }

23.09.2015 - 14:13 Uhr

Einen Zertifikatsserver besitzen wir nicht. Gibt es kostenloses Zertifikat im Netz für viele Nutzer?

23.09.2015 - 13:49 Uhr

Ich habe ein kleines Excel Add-In (C#) geschrieben in VS2015, jedoch kann ich es nicht meinem Kollegen geben, da bei der Installation ein Problem mit Zertifikaten existiert. Besser gesagt, ich weiß nicht wie man das macht. Ich schätze mal es liegt an der Signierung und "ClickOnce.Manifeste signieren". Kann mir bitte jemand erklären was die nächsten Schritte sind damit es bei meinem Kollegen funktioniert. Danke

22.09.2015 - 14:02 Uhr

Das war mein Fehler... Ich habe auf "Excel Add-In mit Template" geklickt. Damit war das Add-in nur für das eine Dokument verwendbar. Wer lesen kann, ist klar im Vorteil. Danke

22.09.2015 - 12:26 Uhr

Ich weiß leider gerade nicht mit welchen Begriffen ich suchen soll. Ich möchte gerne ein Add-In in Excel haben, welches dauerhaft vorhanden ist. Nutze ich VS und VSTO erzeugt es mir ein Add-In für eine Datei. Sprich... diese Datei öffnen und das kompilierte Add-In ist vorhanden. Ich möchte aber das Add-In dauerhaft installieren für Excel... aber wie?

03.02.2015 - 12:24 Uhr

Fehler gefunden... Das Zauberwort heißt "async" und "await"


private async void get_Button_Click(object sender, EventArgs e)
        {
            try
            {
                await Run("google");
            }
            catch (AggregateException ex)
            {
                System.Diagnostics.Debug.WriteLine("Error: " + ex.Message);
            }    
        }
03.02.2015 - 11:16 Uhr

Ich möchte einen Youtube Downloader bauen mit der Youtube API. Der Beispielcode funktioniert in der Konsolenanwendung auch sehr gut, jedoch möchte ich das eher in einer WinForm verwenden. Okay... Button genommen und verlinkte Klasse aufgerufen... Funktioniert teilweise... wenn er die Anfrage schickt, passiert nichts und er bleibt stehen.


 static void Main(string[] args)
        {
            Search s = new Search();
            s.Searchword("Goole");
        }
        [STAThread]
        public void Searchword(string searchword)
        {
            try
            {
                new Search().Run(searchword).Wait();
            }
            catch (AggregateException ex)
            {
                foreach (var e in ex.InnerExceptions)
                {
                    System.Diagnostics.Debug.WriteLine("Error: " + e.Message);
                }
            }
        }

        public async Task Run(string searchword)
        {
            var youtubeService = new YouTubeService(new BaseClientService.Initializer()
            {
                ApiKey = "mein Geheimnis",
                ApplicationName = this.GetType().ToString()// "YoutubeApiSearch.Search" //
            });

            var searchListRequest = youtubeService.Search.List("snippet");
            searchListRequest.Type = "video";
            searchListRequest.Q = searchword; // Replace with your search term.
            searchListRequest.VideoLicense = SearchResource.ListRequest.VideoLicenseEnum.CreativeCommon;
            searchListRequest.MaxResults = 50;

            // Call the search.list method to retrieve results matching the specified query term.
            var searchListResponse = await searchListRequest.ExecuteAsync();
            ....

In der Konsolenanwendung geht er problemlos über die letzte Zeile und empfängt Ergebnisse. Die WinForm-Anwenung ruft identisch die Klasse auf, kommt aber über die letzte Zeile nicht drüber weg.


private void get_Button_Click(object sender, EventArgs e)
        {
            Search s = new Search();
            s.Searchword("Google");

Ich muss gestehen, dass ich nicht mal eine Idee habe was der Unterschied ist.

21.11.2014 - 09:07 Uhr

Egal in welcher Reihenfolge ich die beiden anspreche. Das ListView schiebtr sich immer unter den ToolStrip. Ein extra Panel für den ToolStrip finde ich nicht so gut.

20.11.2014 - 15:49 Uhr

Ich habe ein Panel mit einem ToolStrip (Dock: Top) und ein ListView (Dock: Fill). Das hat jedoch die Auswirkung, dass das ListView verdeckt ist. Okay... das ist ja der Sinn von Fill, aber ich wollte eigentlich eine Art von Fill haben, aber das ToolStrip sollte nebeneinander sein.

17.11.2014 - 08:42 Uhr

Der "Engpass" liegt beim Zeichnen in das Panel. Bei mir also in der Funktion DrawPanel(). Ziehe ich es größer wird das Abspielen sehr langsam. Ein sehr kleines Panel (400x200) schafft 12ms pro Frame. Bei DVD-Auflösung werden es dann schon 50ms pro Frame.

14.11.2014 - 16:05 Uhr

Ich bin scheinbar bei DirectX etwas überfordert. Kann mir vielleicht jemand etwas helfen wie ich das Folgende in einer "Box" zeichne?


IntPtr bgr;
bgr = new IntPtr(ff.decodeNextFrame());
byte[] buffer = new byte[3*ff.height()*ff.width()];

14.11.2014 - 08:35 Uhr

Gibt es etwas besseres als ein Panel? Gibt es etwas in DirectX? Die Geschwindigkeit des Panels ist abhängig von seiner Größe. Ein kleines Panel ist sehr schnell bei der Darstellung, aber ein großes Panel wird dagegen schon sehr langsam.

13.11.2014 - 16:51 Uhr

Ich suche eine schnellere Variante als meine aktuelle Lösung für das Problem ein C++ Pointer eines Bildes (FFMPEG) in einer Oberfläche (Panel) darzustellen. Vielleicht habt ihr ja eine Idee.

Meine Variante:


IntPtr bgr;
bgr = new IntPtr(ff.decodeNextFrame());
bgr = new IntPtr(ff.decodeNextFrame());
byte[] buffer = new byte[3*ff.height()*ff.width()];
Marshal.Copy(bgr, buffer, 0, buffer.Length);
Bitmap tmp_bmp = BGR2Bitmap(ff.height(), ff.width(), buffer);
DrawBitmap(tmp_bmp, panel_player);




public static Bitmap BGR2Bitmap(int height, int width, byte[] bgr)
        {
            if (height <= 0 || width <= 0)
                return new Bitmap(1, 1);

            Bitmap toreturn = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            Rectangle rect = new Rectangle(0, 0, width, height);
            System.Drawing.Imaging.BitmapData bmpData =
                toreturn.LockBits(rect, ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            IntPtr ptr = bmpData.Scan0;
            int bytes = bmpData.Stride * toreturn.Height;

            if (bgr.Length == bytes)
            {
                Marshal.Copy(bgr, 0, ptr, bytes);
            }
            else
            {
                byte[] retBGR = new byte[bytes];
                for (int i = 0; i < toreturn.Height; i++)
                    Array.Copy(bgr, i * 3 * toreturn.Width, retBGR, i * bmpData.Stride, toreturn.Width * 3);
                System.Runtime.InteropServices.Marshal.Copy(retBGR, 0, ptr, bytes);

            }
            toreturn.UnlockBits(bmpData);
            return toreturn;
        }

        private void DrawBitmap(System.Drawing.Image bmp, Panel panel)
        {
            Graphics g = panel.CreateGraphics();
            g.DrawImage(bmp, 0, 0, panel_player.Width, panel_player.Height);
        }

19.09.2014 - 14:55 Uhr

Wow! Genau das habe ich gesucht... ein hoch auf witte (werde dich in meine Nachtgebete einschließen). 😃

Time elapsed: 00:00:06.2798098
Dictionary Count: 5131062

19.09.2014 - 14:12 Uhr

Mit der Levenshtein-Distanz... welche angibt wie viele Schreiboperationen man benötigt um ein Wort in ein anderes Wort aus der Datenbank (DWORDS) zu ändern.

Levenshtein-Distanz

19.09.2014 - 14:05 Uhr

Das ist die Wahrscheinlichkeit (Häufigkeit) jedes Wortes. Wenn mehrere Kandidaten zur Korrektur zur Verfügung stehen, nehme das Wort mit der größten Wahrscheinlichkeit.

19.09.2014 - 13:38 Uhr

Ich schreibe gerade einen Spell-Checker (Rechtschreibprüfung) aus wissenschaftlichen Gründen (besitzt besonders viele Alternative Namen von Städten). Das Programm funktioniert auch wie erwartet sehr gut, aber beim Programm-Start wird das Wörterbuch als Dictionary<string, int> geladen. Leider dauert das jedoch sehr lang und daher meine Frage... kennt ihr eine schnellere Möglichkeit dieses Wörterbuch als Dictionary zu deserialisieren?


           Dictionary<string, int> dict_words = null;
          ....

            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();

            if (DWORDS == null)
            {
                BinaryFormatter inF = new BinaryFormatter();
                using (FileStream fs = new FileStream("spellchecker.dat", FileMode.Open))
                {
                    DWORDS = (Dictionary<string, int>)inF.Deserialize(fs);
                }
            }
            stopwatch.Stop();
            System.Diagnostics.Debug.WriteLine("Time elapsed: {0}", stopwatch.Elapsed);
            System.Diagnostics.Debug.WriteLine("Dictionary Count: {0}", DWORDS.Count());

Ausgabe:
Time elapsed: 00:09:02.9263397
Dictionary Count: 5131062

PS.: Ich würde auch zu eigenen Tests die Datei zur Verfügung stellen.

15.09.2014 - 13:52 Uhr

Die Antwort für mein Problem lag in einem kleinen Nebensatz von Abt.

die Variable "blocks" wird mit keiner anderen Methode weiter verarbeitet außer mit Array.Sort(). Die Funktion sieht jetzt so aus und der Speicher füllt sich zwar noch, aber beim erreichen des Maximums wird er relativ gut leer geräumt... Taskmanager sieht beim RAM dadurch aus wie Berg- und Talfahrt (das ist okay). Die Exception kommt erst mal nicht (aber das Programm brauch ja noch 5 Stunden).


public static void Deserialisiere<T>(out T objekt, string path)
        {
            BinaryFormatter binF = new BinaryFormatter();
            using (FileStream fs = new FileStream(path, FileMode.Open))
            {
                objekt = (T) binF.Deserialize(fs);
                fs.Close();
            }
        }

Den Profiler hab ich noch nicht verstanden. Ich dachte, er könnte mir ausgeben, welche Variable gerade wieviel Speicher benötigt.

15.09.2014 - 12:43 Uhr

Entschuldigt bitte die fehlende Information, dass das Programm in eine Exception läuft.

Ich konkretisiere meine Frage. Kann es sein, dass das Programm mit diesem Code-Fragment innerhalb der FOR-Schleife mit Hilfe der Funktion Deserialisiere() immer wieder ein neues Objekt erzeugt welches beim Durchlauf nicht wieder abgeräumt wird? Würdet ihr die Funktion genauso schreiben?

15.09.2014 - 12:30 Uhr

Vielen Dank für die "Belehrung". Ich erwarte nicht, dass die GC sofort aufräumt. Es ist jedoch seltsam, wenn ein Programm rasend ansteigt (12 GB Ram Unterschied) und es einfach in die Exception rennt. Man möchte dann doch versuchen das Programm zu retten und die nicht benötigte Speicherbelegung wieder zurück zu erhalten was der Grund für das "Dispose" und das "GC.Collect".

Mit dem Profiler kenne ich mich noch nicht aus, aber ich werde es mir genauer anschauen.

Meine Grundidee war es Code Fragmente zu zeigen, Problembeseitigungen zu zeigen und zu fragen ob ich ein Grundproblem in "Deserialisieren" hab.

15.09.2014 - 12:04 Uhr

"GC.Collect();" hab ich eingebaut, da ich hoffte, dass ich das Speicherproblem beseitigen kann. Das Programm beendet nicht, da die FOR-Schleife irgendwann eine Out-Of-Memory Exception verursacht. Wenn ich mir den Taskmanager anschaue, wächst die Speicherbelegung kontinuierlich mit der Größe der deserialisierten Datei. Bedeutet: Deserialisiere Datei (40 MB) -> Arbeitsspeicher steigt an auf ca. 40 MB (Okay) -> mache irgendwas mit "blocks" -> Gehe zur nächsten Datei (auch wieder 40 MB)

Wenn die Garbage Collection richtig funktionieren würde, würde sie durch schließen der Klammer der FOR-Schleife verstehen, dass die ersten 40 MB der ersten Datei nicht mehr benötigt wird und "blocks" im Arbeitsspeicher wieder frei gibt. Das sieht aber nicht so aus. Es wächst kontinuierlich um 40 MB bis zur Exception.

15.09.2014 - 11:41 Uhr

Ich hab ein Problem mit einer Methode und befürchte, dass der Speicher nicht frei geräumt wird, da der Arbeitsspeicher richtig voll wird mit jedem Durchlauf der Variablen der FOR-Schleife. Ideen?


...
for(...)
{
   string[] blocks;
   Deserialisiere(out blocks, prefix + "_classes.string[]");
   ...
   blocks = null;
   GC.Collect();

}
...


public static void Deserialisiere<T>(out T objekt, string path)
        {
            BinaryFormatter binF = new BinaryFormatter();
            FileStream fs = new FileStream(path, FileMode.Open);
            objekt = (T)binF.Deserialize(fs);
            fs.Close();
            fs.Dispose();
        }

21.11.2013 - 15:27 Uhr

Ich versteh nich, was das eine mit dem anderen zutun hat.
MrSparkles Einwand sagt eigentlich alles. Denn effizient ist Dein Vorhaben nicht; im Gegenteil: es ist dazu fehleranfällig.

Nein... tut es nicht. Es ist jediglich ein nicht auf die Frage bezogener Hinweis.

Warum ich so viele Floats brauche hat tatsächlich mit einer komplizierten zueinander gewichtungsabhängigen Berechnung zu tun, bei der die Daten komplett und gleichzeitig verfügbar sein müssen. Die Ergebnisse möchte ich daher serialisieren um weitere Gewichtungen vornehmen zu können. Egal. Darüber solltet ihr euch aber keinen Kopf machen.

ich kann das ganze auch nicht nachvollziehen. Wie kommst du überhaupt darauf, daß es am Speicher liegt? Das Bild in deinem ersten Beitrag zeigt keine SystemOutOfMemoryException, sondern eine IndexOutOfRangeException. Woher die kommt, kann man ohne eine genauere Beschreibung von dir und ohne Code nicht sagen. Aber der StackTrace sollte dich auf die richtige Spur bringen. Siehe auch
>
.

Speicher? Wer sagte das es daran liegt. Es liegt im Speicher aber läßt sich nicht speichern auf Festplatte.

Danke für die Hinweise, aber bezogen auf die Fragen waren sie nicht. (Standardantwort in diesem Forum ist immer "such irgendwo in der HOW-TO-XYZ" oder "richtig Debuggen"... dann schreibt doch besser nichts.

21.11.2013 - 14:02 Uhr

Die Daten sind dort etwas kleiner und ich greife mit keinem anderen Thread auf das Objekt oder die Festplatte zu.

Mich wundert halt nur, dass ich die Daten im Speicher habe, aber diese nicht auf die Festplatte schreiben kann. Seltsam!

15.11.2013 - 11:10 Uhr

Ich habe das folgende Problem beim serialisieren einer eigenen Klasse. Exakt dieses Objekt kann ich nicht serialisieren, jedoch andere Werte mit der gleichen Klasse funktionieren.

Die Fehlermeldung kann ich selber nicht ganz deuten. Was soll ich machen oder warum kann ich das Objekt aus dem Speicher nicht auf die Festplatte speichern?

Nutze VS 2013 mit .Net Framework 4.5

22.07.2013 - 17:53 Uhr

Ich hab das Projekt in VS2012 mit x64 und in der "App.config" folgendes eingetragen.


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <runtime>
    <gcAllowVeryLargeObjects enabled="true" />
  </runtime>
</configuration>

Im Hauptprogramm steht nicht mehr als...


long t = 3679203411;
float[] a = new float[t];

Dennoch kommt eine > Fehlermeldung:

OverflowException nicht behandelt

22.07.2013 - 09:37 Uhr

Ich hab 32 GB und noch eine 512 GB SSD Festplatte zum auslagern. Sollte reichen. Wie sieht eine eigene Array-Klasse aus mit einem long als Index-Variable?

22.07.2013 - 09:06 Uhr

Ich brauche ein Float-Array von mehr als 2^31 Zellen, aber wie?


int cells = Rows*Columns; // 17001*216411=3679203411
float[] f = new float[cells];

Man sieht schnell, dass cells größer ist als der Wertebereich von Integer.

21.11.2012 - 11:25 Uhr

Hab gerade gesehen das Resharper ein Template Manager hat der genau das macht was ich suche.

21.11.2012 - 10:18 Uhr

Bestimmte Coderümpfe bzw. Codeblöcke verwende man ja nun doch sehr häufig. Ich suche ein Plugin welches mir per Knopfdruck oder per Autovervollständigung die jeweiligen Codeblöcke an der jeweiligen Stelle hinschreibt.

Kennt da jemand ein kleines Miniprogramm oder kann das vielleicht VS. Zur Zeit verwende ich VS2010 und Resharper 7.1.

17.10.2012 - 16:57 Uhr

        private void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            br = sender as WebBrowser;
            docText = br.Document.Body.InnerText;
               
        }

        private void thread(object uri)
        {
            Uri url = uri as Uri;
            WebBrowser web = new WebBrowser();
            web.DocumentCompleted += new   WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted);
            web.Navigate(url);
...}

Im oberen Code wird ein Thread gestartet der den Inhalt eines Webbrowser übergeben soll. Leider kommt er nie in die browser_DocumentCompleted Funktion.

Das Hauptprogramm öffnet wie folgt...


Uri uri = new Uri(url);

            ParameterizedThreadStart ts = thread;
            Thread th = new Thread(ts);
            th.SetApartmentState(ApartmentState.STA);
            th.Start(uri);
            while (th.IsAlive)
            {
                Thread.Sleep(100);
            }
16.10.2012 - 15:30 Uhr

Ich möchte den Inhalt einer Seite aus dem Netz haben. Dieser baut sich aber durch Javascript erst auf... daher ist hier meine folgende Methode. Diese ist aber nur suboptimal und macht dauernd Probleme ("Seite aktualisieren" etc.). Gibt es eine Alternative?



        private void thread(object uri)
        {
            Uri url = uri as Uri;
            WebBrowser web = new WebBrowser();
            web.DocumentCompleted += browser_DocumentCompleted;
            web.Navigate(url);
 
            while (web.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
            }
...}

13.06.2012 - 13:16 Uhr

Wenn der Taskmanager die Festplattenaktivität ausgeben kann, muss es doch einen C# Befehl dafür geben. Genau den such ich.

13.06.2012 - 11:45 Uhr

Ich will eine Art Prozessmanager bauen, der nicht nur die Performance der CPU und andere Benchmarks ausließt sondern auch auch die auflistet welcher Prozess gerade auf der Festplatte schreibt. Mit welcher Klasse und mit welchem Befehl kann ich das machen?

09.05.2012 - 22:54 Uhr

Hab ich gerade nach langer Suche selber gefunden.


Range range = (Range) sheet.Application.Selection;
09.05.2012 - 22:38 Uhr

Wie ließt man dann die markierten Zellen aus so?

09.05.2012 - 17:00 Uhr

Ich finde kein Befehl "Selection" in C#.

09.05.2012 - 10:26 Uhr

Ich hab in einer Excel-Datei ein Ribbon-Button eingefügt. Dieser soll mit markierten Zellen etwas machen. Wie bekommt man denn die markierten Zellen? Ich möchte nicht statisch arbeiten mit "A1:A2"


private void button1_Click(object sender, RibbonControlEventArgs e)
        {
            Microsoft.Office.Interop.Excel.Worksheet _sheet = Globals.Tabelle1.Application.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet; 
            Microsoft.Office.Interop.Excel.Range _range;
            if (null != _sheet)
            {
                _range = _sheet.get_Range("A1:A2", System.Type.Missing);
                
                System.Array myvalues = (System.Array) _range.Cells.Value;
                double[] d = myvalues.Cast<double>().ToArray();
                double r = d[0]*d[1];
                _range = _sheet.get_Range("B2", System.Type.Missing);
                _range.Value2 = r;
            }
        }
18.04.2012 - 17:43 Uhr

Ich suche eine Schnittstelle mit der sich C# oder auch C++ Programme einfach unterhalten können. Momentan fallen mir nur Sockets ein.

Ich hab ein Programm in C# welches eine Art Taskmanager ist. Dieses soll die Ressourcen von anderen Programmen überwachen. Diese können auch in C++ geschrieben sein. Der Taskmanager soll von einem anderen Programm deren ID bekommen. Dieser schaut nach in den Ressourcen un gibt eine 1 zurück für "Alles Okay" oder eine 0 zurück für "Pausiere mal kurz... das System ist ausgelastet". Jemand eine Idee?

07.01.2012 - 01:31 Uhr

Ich möchte gerne einen runden Fortschrittsbalken. Der Vordergrund soll sich ganz normal verhalten, jedoch die Maske soll rund sein. Wie kann ich das machen oder wo finde ich dazu Informationen?

Danke

15.11.2011 - 13:42 Uhr

Ich möchte mir ein Framework bauen, dass abhängig von der Performance des Rechners einen Prozess pausiert. Im Detail: Ich habe viele Anwendungen (z.B. Codierungsthread), die sehr rechenintensiv sind. Die möchte ich zur Laufzeit pausieren lassen wenn zum Beispiel der Prozessor über 70% ausgelastet ist oder der RAM von anderen Programmen über 70% gefüllt ist. Dafür gibt es natürlich viele Wege... welcher ist der Beste? Kennt jemand vielleicht schon ein existierendes Projekt?

12.07.2011 - 10:05 Uhr
  1. Nicht alles was einfach zu benutzen ist, ist auch für jedes Problem benutzbar.
  2. Natürlich kannst du bei WriteXml auch noch einen weiteren Parameter angeben, der das Schema mit schreibt.
  3. Beim einlesen der XML passieren ja viel mehr als "nur" die XML einzulesen und dann so wie sie ist in eine DT zu packen.

Und durch LinQ to Object zieht auch das Select nicht wirklich als Ausrede.

Ich glaube nicht, dass wen jemand eine Frage postet, er solche Antworten erwartet. Ich konnte es selber nicht glauben und hab seine Funktionen getestet mit dem gleichen Resultat. Als "Monster" würde ich das jetzt auch nicht bezeichnen. 1 GB Arbeitsspeicher für eine Tabelle ist doch kein Thema. Aus meiner Sicht ist das ein unbekannter Kompiler-Fehler in C# oder eine andere Lösung.
Sinn der Serialisierung sollte es doch sein jede Klasse (auch DT) im Speicher in eine Datei speichern zu können. Scheinbar macht er das auch, jedoch zurück kann er das dann nicht mehr.

Schließe mich also der Suche an...

20.09.2010 - 22:44 Uhr

Ich weiß nicht, ob deine Antwort folgenden Grundhinweis berücksichtig... Ich besitze von diesem alten Programm nicht den Quellcode. Ich möchte also den Text irgendwie aus diesem unbekannten Programm herauslesen. Wenn deine Antwort auch damit zurecht kommt werde ich gerne die Suche weiter verwenden.

20.09.2010 - 19:48 Uhr

Ich habe ein sehr altes Programm welches in Visual C++ (MFC) geschrieben wurde. Dort würde ich gerne den Text aus einer Textbox lesen lassen. wenn das überhaupt mit C# irgendwie geht. Habt ihr eine Idee?

30.08.2010 - 13:23 Uhr

Ich mochte eine zweite PictureBox transparent auf die Erste legen.Wenn ich als BackgroundColor transparent eingebe und das Bild transparent mache, ist es zwar heller aber nicht das untere Bild scheint nicht durch.


       Bitmap original1 = new Bitmap(@"...png");
            pictureBox1.Image = original1;
            Bitmap original2 = new Bitmap(@"...png");
                
            Bitmap temp = new Bitmap(original2.Width-10, original2.Height);
            Graphics g = Graphics.FromImage(temp);
            ColorMatrix cm = new ColorMatrix();
            cm.Matrix33 = 0.5f;

            ImageAttributes ia = new ImageAttributes();
            ia.SetColorMatrix(cm, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
            g.DrawImage(original, new Rectangle(0, 0, temp.Width, temp.Height), 0, 0, original.Width, original.Height, GraphicsUnit.Pixel, ia);
            g.Dispose();
                
            
            pictureBox2.Image = temp;

30.07.2010 - 10:00 Uhr

@herbivore: Schau ich mir mal an.

@stefan O.: Das Deep Copy setzt voraus, dass das Objekt serialisierbar ist. Dann kann man mit MemoryStream und BinaryFormater eine zweie Kopie erstellen. Ich kann aber nicht immer davon ausgehen, dass eine fremde DLL das liefert.

30.07.2010 - 09:56 Uhr

Edward: Bei einer DLL sind die Property Objekte meistens nicht öffentlich.

30.07.2010 - 09:42 Uhr

Auch danke für diesen Hinweis... Ich weiß, dass class ein Referenztyp ist und ich weiß auch, dass es das Galileobuch dazu gibt. Danke also nochmal für diese Hinweise.

Was macht ihr wenn ihr eine kompilierte DLL bekommt. In dieser DLL ist eine Klasse die ihr zwei mal braucht. Einmal als Original und ein mal als eine Arbeitskopie die ihr verändert wollt.

Da sie kompiliert ist konnt ihr als auch nicht eine Methode Copy() hinzufügen. Was macht ihr um dieses Problem zu lösen?

30.07.2010 - 09:31 Uhr

Das war nur ein Beispiel mit Punkt. Die Klasse hätte auch Mond oder Stern heißen können.

Der Hinweis mit dem Struct war mir bekannt, jedoch war das nicht die Frage. Es kann ja eine Klasse aus einer fremden DLL sein.