Seite 3 von 5

Verfasst: 09.10.2006 21:59
von Kaeru Gaman
ich bin anderer meinung als AND

ein Wabgadget zu nehmen, um sowas einfaches zu erzeugen ist ne echte spatzenkanone.

animation in nem Image wär ne bessere lösung.
das kannst du mit verschiedenen frames lösen, also,
indem du den inhalt des image gemäß einer reihe vorhandener images aktualisierst,
oder sogar mit DirectDraw, also indem du direkt auf das Image draufmalst.
guck dir mal die befehle im Abschnitt 2DDrawing an.

[edit]
sorry, hab die letzten 2 posts von euch nicht aufmerksam gelesen....

Verfasst: 09.10.2006 22:12
von AND51
Nicht schlimm.

Klar, du kannst jeden der 11.000 Forumsmitglieder fragen, auch mich :wink:

Früher oder später wirst du meiner Meinung nach swieso dich mal mit der 2D Library auseinadersetzen müssen. Wie iel du damit zu tun haben willst, ist dann deine Entscheidung.

Ist schon mal gut, dass du Striche malen kannst; dann weißt du schon mal grundlegende Sachen, wie man z. B. Images läd, erstellt oder speichert.

Als nächstes würde ich mir den Befehl anschauen, um Blöcke zu zeichnen. Das schaffst du mit Rect() und Fillarea(). Dann hast du eigentlich schon alles, was du für dein vorhaben brauchst :wink:

Verfasst: 09.10.2006 22:22
von RSBasic
@AND51
Hi, die Befehle >Rect() und Fillarea()< untertsützen in der Version 3.30 nicht. Ich muss noch auf 4.00 warten.
Bis dorthin, muss ich leider warten :D

Verfasst: 09.10.2006 22:33
von Kaeru Gaman
Rect() is ja auch falsch, Box() is richtig...

ich schuster grad was, aber son window is immer ne doowe sache, auf screens bin ich besser...

...wie kann ichn refresh auslösen? bei mir funzt nämlich grad garnix...

[edit]
also, ich müsste irgendwie ein redraw/refresh von nem image auslösen...

Code: Alles auswählen

OpenWindow(0,0,0,200,100,"Progressor",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)

CreateImage(0,120,20)
CreateImage(1,120,20)
  StripeX = 0
  StartDrawing(ImageOutput(1))
    Box(0,0,120,20,$FFFFFF)
    Box(StripeX,5,60,10,$0000FF)
    Box(StripeX-120,5,60,10,$0000FF)
    For n=10 To 110 Step 10
      Line(n,5,0,10,$FFFFFF)
    Next
    For n=0 To 4
      Line(n,5,0,10,$FFFFFF)
      Line(119-n,5,0,10,$FFFFFF)
    Next
    DrawingMode(4)
    Box(2,2,116,16,$000000)
  StopDrawing()
  StartDrawing(ImageOutput(0))
    DrawImage(ImageID(1),0,0)
  StopDrawing()

CreateGadgetList(WindowID(0))
ImageGadget(1,20,20,120,20,ImageID(0))

Repeat
    EventID = WaitWindowEvent(20)
    
    StripeX + 2
    If StripeX >= 120
      StripeX = 0
    EndIf
    StartDrawing(ImageOutput(1))
      Box(0,0,120,20,$FFFFFF)
      Box(StripeX,5,60,10,$0000FF)
      Box(StripeX-120,5,60,10,$0000FF)
      For n=10 To 110 Step 10
        Line(n,5,0,10,$FFFFFF)
      Next
      For n=0 To 4
        Line(n,5,0,10,$FFFFFF)
        Line(119-n,5,0,10,$FFFFFF)
      Next
      ;DrawingMode(4)
      ;Box(2,2,116,16,$000000)
    StopDrawing()
    StartDrawing(ImageOutput(0))
      DrawImage(ImageID(1),0,0)
    StopDrawing()
    
Until EventID = #PB_Event_CloseWindow
soweit hab ichs bis jetzt, aber das image wird halt nich neu gezeichnet...

Verfasst: 09.10.2006 22:35
von AND51
Ich wusst es nimma auswendig. Ich war sooooooooo nah dran, Box() statt Rect() zu schreiben... *heul*
Hätt ich bloß den 50:50 joker genommen :mrgreen:

Refresh für nen Image? Einfach alles mit Rec... ich meine Box() übermalen?! Entspricht einem FlipBuffers()

Verfasst: 09.10.2006 22:36
von Kaeru Gaman
> Refresh für nen Image? Einfach alles mit Rec... ich meine Box() übermalen?! Entspricht einem FlipBuffers()

ne, eben nicht. technisch, auf pixelebene ja, aber nicht auf win-ebene,
das fenster muss noch gesagt bekommen, dass das Image sich verändert hat.

Verfasst: 09.10.2006 22:50
von RSBasic
@Kaeru Gaman
sieht spitze aus :allright:

Ich habe noch was für euch, in der Zeit habe ich was geiles programmiert, diesmal ein GADGET :mrgreen:

Man muss nur in einer Wiederholschleife bringen, dann hat man das.
PS: Die Bilder bitte hier runterladen: http://88.134.185.54/Progress-Bilder.zip

Hinweis: Der Server ist nur für kurze Zeit verfügbar.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu, "Mein Progress-Optik") 
  If CreateGadgetList(WindowID(0))
    ImageGadget(1,10,10,0,0,LoadImage(1,"1.bmp"),0)
    Delay(500)
    FreeGadget(1)
    ImageGadget(1,10,10,0,0,LoadImage(1,"2.bmp"),0)
    Delay(500)
    FreeGadget(2)
    ImageGadget(1,10,10,0,0,LoadImage(1,"3.bmp"),0)
    Delay(500)
    FreeGadget(3)
    ImageGadget(1,10,10,0,0,LoadImage(1,"4.bmp"),0)
    Delay(500)
    FreeGadget(4)
    ImageGadget(1,10,10,0,0,LoadImage(1,"5.bmp"),0)
    Delay(500)
    FreeGadget(5)
    ImageGadget(1,10,10,0,0,LoadImage(1,"6.bmp"),0)
    Delay(500)
    FreeGadget(6)
    End
  EndIf
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Verfasst: 09.10.2006 23:07
von Kaeru Gaman
tip:

wenn du sowieso Freegadget machst, dann lad die bilder am anfang in verschiedene images...

Code: Alles auswählen

LoadImage(1,"1.bmp")
LoadImage(2,"2.bmp")
LoadImage(3,"3.bmp")
LoadImage(4,"4.bmp")
LoadImage(5,"5.bmp")
LoadImage(6,"6.bmp")
und wechsel dann im verlauf nur das image im gadget.

...ob das allerdings sehr elegant ist, ist die andere frage...

ähnlich kannst du das auch wie bei meinem code machen, also,
indem du immer das aktuelle image in das anzeige-image displayst.

wie gesagt, einziges problem noch, dass bei mir das image nicht wechselt...
also irgendwie wird das imagegadget nicht refresht...

Verfasst: 09.10.2006 23:10
von RSBasic
@Kaeru Gaman
Ok, werde ich mir mal morgen durch den kopf gehen lassen. :allright:

Verfasst: 09.10.2006 23:17
von edel
Sowas kann die Progressbar von XP auch selber. Such mal nach den Konstanten
  • PBS_MARQUEE
    PBM_SETMARQUEE
und deren Beschreibung. Ansonsten nen AnimationsControl benutzen
oder eine eigene Windowklasse und selber malen. Das Zeug da oben
ist irgendwie alles ... :freak: