none
Beim erstellen von console Modulen mit graphics Klassen, welche Eingabe soll ich statt Me.CreateGraphics() verwenden? RRS feed

  • Frage

  • Guten Abend,

    die Microsoft.Net Dokumentationen sind beim unterscheiden von Form Beispielen und Konsole Beispielen nicht immer 100% nachweisbar.

    Um mein Forschungsziel weiter im Rahmen meiner Kräfte suchen zu können fehlen mir noch immer die genauen Übersetzungen der Klassenanwendungen um in meiner nicht gebildeten Datenbank anwenden zu können.

    Ein drawstring ist in einer Konsolenanwendung implementierbar (zu ausführen eintragbar, frei übersetzt). Nur sind die Grafikeigenschaften der Konsole nicht stabil.

    Ich würde gerne die GraphicBuffereigenschaften der Konsole kennen lernen. Auf der Seite

    BufferedGraphics Microsoft.Net Dokumentation

    ist 

    Me.CreateGraphics()

    mein nächstes Problem, den ich kann statt dem Keyword Me nicht erkennen was the current instance in einer Konsolengrafik sein soll.

    Und create graphics ist nur in einer Form Klasse möglich. Ich weiß nicht genau wo ich meine Suche fortsetzen soll.

    Mit dem Beispiel

    Imports System.Drawing
    Imports System.Reflection
    Module broadcastChanchicha
        ReadOnly ArrayCast As IntPtr = Process.GetCurrentProcess().MainWindowHandle
        ReadOnly ResearchPattern As Graphics = Graphics.FromHwnd(ArrayCast) 'planimetry
        Sub Main()
            Dim PinResolution As BufferedGraphics
            ' Retrieves the BufferedGraphicsContext for the 
            ' current application domain.
            Dim appDomainGraphicsContext As BufferedGraphicsContext = BufferedGraphicsManager.Current
            ' Allocates a graphics buffer using the pixel format 
            ' of the specified Graphics object.
            PinResolution = appDomainGraphicsContext.Allocate(*.CreateGraphics(), New Rectangle(0, 0, 400, 400))
            While True
                Select Case Console.ReadKey(True).Key
                    Case ConsoleKey.D
                        Console.Write("claimed")
                        With ResearchPattern
                            .DrawString("Drawstring load", New Font("Consolas", 22),
                            New SolidBrush(Color.FromArgb(162, 228, 201, 127)), 320, 320)
                        End With
                    Case ConsoleKey.F12
                        With ResearchPattern
                            .DrawString("Drawstring invalidate", New Font("Consolas", 22),
                            New SolidBrush(Color.FromArgb(162, 228, 201, 127)), 320, 320)
                        End With
                End Select
            End While
        End Sub
    End Module

    ist meine aktuelle Programmierumgebung auf Grund gelaufen.

    Bei einer Write Anweisung mit der selben set cursor position kann ich zwischen zwei Sätzen wechseln. Die drawstring Anweisungen werden nicht ersetzt sondern überlappen sich. Ich stelle nicht die Funktionen in Frage, sondern würde gerne wissen wie ich zwischen zwei drawstring Sätzen wechseln kann und die BufferedGraphics Eigenschaften genauer kennen lernen kann.

    Donnerstag, 3. Dezember 2020 19:19

Alle Antworten

  • Hallo Stefan,

            PinResolution = appDomainGraphicsContext.Allocate(*.CreateGraphics(), New Rectangle(0, 0, 400, 400))

    Versuch es mit dem Modulnamen:

    Imports System.Drawing
    Imports System.Reflection
    Imports System.Diagnostics
    
    Module broadcastChanchicha 
       Shared graphics As Graphics
    
        '...
    
          Dim prozess As Process = Process.GetCurrentProcess()
          broadcastChanchicha.graphics = Graphics.FromHdc(GetDC(prozess.MainWindowHandle))
          PinResolution = appDomainGraphicsContext.Allocate(broadcastChanchicha.graphics, New Rectangle(0, 0, 400, 400))
    
        '...
    
    End Module

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 4. Dezember 2020 16:01
    Administrator
  • Ich verwendete mein Modul für die Konsolanwendung erstellt mit Visual Studio. Version Version 16.8.2.

    Die Intelli Sense Angaben die ich anführe, Variablen in Modulen können nicht als "Shared" deklariert werden.

    Ich habe den Module Namen in einer Methode angewendet.

    Mit den Intelli Sense Vorschlägen Microsoft Paint

    Meine Klassen sind nicht Formübergreifend. Das verstehe ich weil ich viel gelesen habe und nicht weil ich anwenden gelernt habe.

    Um das nächste Ergebnis eingrenzen zu können muss ich noch immer einen Main Window Handle bilden und keinen handle to the devise context. Kann sein um die Grafik unter Kontrolle bringen zu können, dass ich den devise context nicht einfach ausklammern sollte.

    Wenn ich teilweise nicht den Pfad verliere ist GetDC trotzdem zum Teil C++ und ich keine Ahnung habe wie ich diesen Schlüssel anwenden sollte.

    Meine Lösung, da ich noch immer nicht auf graphische Änderungen verzichten kann, ist

            Dim hwnd As IntPtr = Process.GetCurrentProcess().MainWindowHandle
    
            Dim newGraphics As Graphics = Graphics.FromHwnd(hwnd)
    
            Dim appDomainGraphicsContext As BufferedGraphicsContext = BufferedGraphicsManager.Current
    
            Dim PinResolution As BufferedGraphics = appDomainGraphicsContext.Allocate _
            (Graphics.FromHwnd(ArrayCast), New Rectangle(300, 300, 300, 300))
            Select Case Console.ReadKey(True).Key
                Case ConsoleKey.Z
                    PinResolution.Render()
                    PinResolution.Dispose()
            End Select
    Bei meiner Anwendung ist ein Viereck mit der Konsolenhintergundfarbe dargestellt. Das hilft mir leider nicht weiter.

    Freitag, 4. Dezember 2020 18:36