1. Artikel
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forum
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Paules-PC-Forum.de
  2. Forum
  3. Programmierung
  4. XProfan

In verschiedene Fenstern malen.

  • funkheld
  • 27. März 2016 um 13:13
  • funkheld
    Fortgeschrittener
    Reaktionen
    3
    Beiträge
    364
    • 27. März 2016 um 13:13
    • #1

    Hallo, guten Tag.

    Ich habe habe folgende Fenster aufgemacht:
    Window 20,20-400,400
    win&=create("window",%HWnd,"win",420,20,300,420)
    win1&=create("window",%HWnd,"win1",720,20,400,400)

    Wie kann ich jetzt bitte in den verschiedenen Fenstern die Grafikbefehle anwenden ?

    Danke.
    Gruss

  • Volkmar
    Moderator
    Reaktionen
    6.767
    Beiträge
    6.769
    • 27. März 2016 um 13:43
    • #2

    Alle Grafikbefehle lassen sich mit StartPaint umleiten, Parameter ist das Handle des Fensters, in dem gemalt werden soll. Die Umleitung muß, nachdem alles fertig gemalt ist, wieder aufgehoben werden. Dafür ist EndPaint zuständig.

    Code
    Declare win&,  win1&
    Window 20,20-400,400
    win&=create("window",%HWnd,"win",420,20,300,420)
    win1&=create("window",%HWnd,"win1",720,20,400,400)
    
    
    ' Malen auf dem Hauptfenster
    UsePen 0, 1, RGB(128, 128, 128)
    Line 4, 4 - 300, 200
    
    
    'Malen auf einem anderen Fenster
    StartPaint win&   ' Malfunktionen auf das Fenster umleiten
      UsePen 0, 4, RGB(250, 64, 64)
      Line 55, 280 - 200, 45
    EndPaint          ' Umleitung beenden
    
    
    StartPaint win1&   ' Malfunktionen auf das Fenster umleiten
      UsePen 0, 2, RGB(24, 200, 120)
      Line 12, 12 - 220, 120
    EndPaint           ' Umleitung beenden
    
    
    
    
    While 1
      WaitInput
    EndWhile
    Alles anzeigen

    Problematisch dabei ist, daß nur auf dem Hauptfenster automatisch neu gemalt wird, wenn das notwendig werden sollte, zum Beispiel nach Bedeckungen durch andere Fenster. Solche Umleitungen werden nicht neu gemalt. Das Fesnter muß nach jedem %wmPaint selbst neu gemalt werden. Hierzu sollte das Malen in solchen Fenstern komplett als eigenständige Prozedur geschrieben werden. Die kann dann jedesmal aufgerufen werden, wenn %wmPaint erscheint. Weiteres siehe in der Hilfe bei StartPaint - EndPaint und Set("AutoPaint")

    Gruß Volkmar

  • H.Brill
    Dauergast
    Reaktionen
    456
    Beiträge
    1.158
    • 27. März 2016 um 17:46
    • #3

    Hier sei noch erwähnt, daß man auch schön auf eine
    Speicher-Bitmap (MCls und StartPaint -1) malen kann.
    Davon kann man dann über
    Create(hPic /hSizedPic, 0, "&MEMBMP")
    ein Bitmaphandle erhalten, das mit
    Create("Bitmap", N, H,X1, Y1)
    auf dem entsprechenden Fenster als Bitmapfeld
    oder Iconfeld angezeigt wird.

    Damit kann man u.U. das Neuzeichnen umgehen.

    Ist auch zu empfehlen, wenn Schnelligkeit erforderlich ist.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Volkmar
    Moderator
    Reaktionen
    6.767
    Beiträge
    6.769
    • 27. März 2016 um 17:47
    • #4

    Danke für die schöne Ergänzung :top:

    Gruß Volkmar

  • funkheld
    Fortgeschrittener
    Reaktionen
    3
    Beiträge
    364
    • 28. März 2016 um 09:30
    • #5

    Hallo, danke für die Hilfe.

    Kannst du bitte dieses noch einmal zeigen in der kürze :
    ....Create(hPic /hSizedPic, 0, "&MEMBMP")
    ein Bitmaphandle erhalten, das mit
    Create("Bitmap", N, H,X1, Y1)....

    Danke.
    Gruss

  • H.Brill
    Dauergast
    Reaktionen
    456
    Beiträge
    1.158
    • 28. März 2016 um 11:21
    • #6

    Ist jetzt zwar nichts Besonderes.
    Hier mal ein Strichmännchen :

    Code
    Declare Int x, y
    Declare Handle hPic, Bmp1, Bmp2
    x = 50
    y = 100
    
    
    Bmp1 = Create("Bitmap", %HWnd, Mann(), x, y)
    
    
    Window 800, 600
    SetTimer 500
    
    
    While 1
      WaitInput
      Case %Key = 2 : Break
      If %wmTimer
         DeleteObject Bmp2
         Bmp2 = Create("Bitmap", %HWnd, LeerBmp(), x - 100, y)
         If x < 750
            Inc x, 100
         Else
            x = 50
         EndIf
         DeleteObject Bmp1
         Bmp1 = Create("Bitmap", %HWnd, Mann(), x, y)
      EndIf
    EndWhile
    
    
    KillTimer
    
    
    DeleteObject Bmp1, Bmp2, hPic
    
    
    Proc Mann
    Declare Int x, y
    x = 70
    y = 80
    MCls 100, 200, RGB(255,255,255)
    StartPaint -1
      UsePen 1, 3, RGB(255,100,0)
      Ellipse x - 10, (y - 10) - x + 15 , y + 20
      UsePen 1, 3, RGB(0, 0, 0)
      Line x, (y + 20) - x, (y + 80)
      Line x, (y + 25) - (x - 20), (y + 80)
      Line x, (y + 25) - (x + 20), (y + 80)
      UsePen 1, 3, RGB(0, 0, 255)
      Line x, (y + 80) - (x - 20), (y + 120)
      Line x, (y + 80) - (x + 20), (y + 120)
    EndPaint
    hPic = Create("hPic", 0, "&MEMBMP")
    Return hPic
    EndProc
    
    
    Proc LeerBmp
    MCls 100, 200, RGB(255,255,255)
    hPic = Create("hPic", 0, "&MEMBMP")
    Return hPic
    EndProc
    
    
    End
    Alles anzeigen

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

    2 Mal editiert, zuletzt von H.Brill (28. März 2016 um 11:58)

  • H.Brill
    Dauergast
    Reaktionen
    456
    Beiträge
    1.158
    • 28. März 2016 um 17:07
    • #7

    So funktioniert es besser :

    Code
    Declare Int x, y, ende
    Declare Handle hPic1, hPic2
    
    
    x = 50
    y = 100
    ende = 0
    
    
    hPic1 = Mann()
    hPic2 = MannWeg()
    
    
    Window 900, 600
    UserMessages $10
    
    
    SetTimer 500
    
    
    WhileNot ende
      WaitInput
      Case %UMessage = $10 : ende = 1
      If %wmTimer
         If x < 800
            DrawPic hPic2, x, y; 0
            Inc x, 100
         Else
            x = 50
         EndIf
         DrawPic hPic1, x, y; 0
      EndIf
    EndWhile
    
    
    KillTimer
    
    
    DeleteObject hPic1, hPic2
    
    
    Proc Mann
    Declare Int x, y
    x = 70
    y = 80
    MCls 100, 200, RGB(255,255,255)
    StartPaint -1
      UsePen 1, 3, RGB(255,100,0)
      Ellipse x - 10, (y - 10) - x + 15 , y + 20
      UsePen 1, 3, RGB(0, 0, 0)
      Line x, (y + 20) - x, (y + 80)
      Line x, (y + 25) - (x - 20), (y + 80)
      Line x, (y + 25) - (x + 20), (y + 80)
      UsePen 1, 3, RGB(0, 0, 255)
      Line x, (y + 80) - (x - 20), (y + 120)
      Line x, (y + 80) - (x + 20), (y + 120)
    EndPaint
    Return Create("hPic", 0, "&MEMBMP")
    EndProc
    
    
    Proc MannWeg
    ' Eine weiße Bmp erstellen
    ' und über das Männchen drüberpappen.
    MCls 100, 200, RGB(255,255,255)
    Return Create("hPic", 0, "&MEMBMP")
    EndProc
    
    
    End
    Alles anzeigen

    konnte oben, trotz angemeldet, nicht mehr editieren.
    Warum auch immer.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

    2 Mal editiert, zuletzt von H.Brill (28. März 2016 um 17:41)

  • funkheld
    Fortgeschrittener
    Reaktionen
    3
    Beiträge
    364
    • 29. März 2016 um 17:37
    • #8

    Hallo, danke für die Hilfe.


    Gruss

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Windows 11

  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™