Progressgadget wie beim Booten

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Zuletzt geändert von Kaeru Gaman am 09.10.2006 22:35, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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()
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Kaeru Gaman
Ok, werde ich mir mal morgen durch den kopf gehen lassen. :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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:
Antworten