Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

sGUI - eine kleine GUI Simulation
Gehe zu Seite Zurück  1, 2, 3 ... 12, 13, 14
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 21.03.2024, 19:46    Titel: Antworten mit Zitat

Wenn ich in Beispiel 3_14 (ToggleGadget) Knopf A drücke, kehrt seine Farbe nicht zur Normalität zurück. Es ist schwarz statt grau.

Oh, Entschuldigung. Ich sehe, es ist Absicht. verlegen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 21.03.2024, 20:17    Titel: Antworten mit Zitat

Adaption einer Animation, die ich im englischen Forum gepostet habe. Es funktioniert perfekt! cool

Code:

' cairospiral.bas
' Uses sGUI 2 (https://www.freebasic-portal.de/downloads/sonstiges/sgui2-401.html)

#include "sGUI/sGUI.bas"
#include once "sGUI/Gadget_SimpleToggle.bas"
#include once "cairo/cairo.bi"

using sGUI

sGUIScreenRes 588, 480, 32
InitGUI

color Colors.Pen,Colors.BackGround
cls

dim as Gadget ptr tgl_a

tgl_a=AddToggleGadget(0,480,8,100,24,"Animate")

'SetSelect(tgl_a)

GadgetOn(tgl_a)

const IMAGE_W = 464
const IMAGE_H = 464

dim as any ptr image = imagecreate(IMAGE_W, IMAGE_H)
dim as any ptr pixels

imageinfo(image, IMAGE_W, IMAGE_H,,, pixels)

dim as long stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, IMAGE_W) ' https://www.freebasic.net/forum/viewtopic.php?p=215065#p215065
dim as cairo_surface_t ptr surface = cairo_image_surface_create_for_data(pixels, CAIRO_FORMAT_ARGB32, IMAGE_W, IMAGE_H, stride)

dim as cairo_t ptr context = cairo_create(surface)

const POINT_NUM = 180
const PI = 3.1415926535897932

sub DrawSpiral(surface as cairo_surface_t ptr, context as cairo_t ptr, angle_diff as double)
  cairo_set_source_rgb(context, 1, 1, 1)
  cairo_paint(context)
  cairo_set_source_rgb(context, 0, 0, 0)
 
  const POINT_RAD = 3
  const RADIUS_MAX = 216
  const CX = IMAGE_W \ 2
  const CY = IMAGE_H \ 2

  dim as double x, y
  dim as double angle = 0
  dim as double radius = 0
  dim as double radius_diff = RADIUS_MAX / POINT_NUM

  for i as integer = 1 to POINT_NUM
    x = radius * cos(angle) + CX
    y = radius * sin(angle) + CY
   
    cairo_arc(context, x, y, POINT_RAD, 0, 2 * PI)
    cairo_fill(context)
   
    angle += angle_diff
    radius += radius_diff
  next i
end sub

dim as double angle_diff = 0

const ANGLE_DIFF_DIFF = (PI / 180) / POINT_NUM
const DELAY = 10

dim animate as integer = 0

screenlock()
DrawSpiral(surface, context, angle_diff)
put (8, 8), image, PSET
angle_diff += ANGLE_DIFF_DIFF
screenunlock()

do
  'sleep 1
  sleep(DELAY)
  MasterControlProgram
  if GADGETMESSAGE then
    select case GADGETMESSAGE
      case tgl_a
        animate = GetSelect(tgl_a)
    end select
  end if
 
  if animate then
    screenlock()
    DrawSpiral(surface, context, angle_diff)
    put (8, 8), image, PSET
    angle_diff += ANGLE_DIFF_DIFF
    screenunlock()
  end if
 
loop until SCREENCLOSEBUTTON

cairo_destroy(context)
cairo_surface_destroy(surface)

imagedestroy image
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 562
Wohnort: Jüterbog

BeitragVerfasst am: 28.03.2024, 16:12    Titel: Antworten mit Zitat

oh, danke Roland fürs Testen. Ich musste erstmal recherchieren wie und wo ich cairo.dll und cairo.lib (.a) her bekomme... ja, funktioniert lächeln 32bit only?

..und ja, das Toggle Gadget ist eigentlich nichts anderes als ein "Checkmark"lächeln

Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3 ... 12, 13, 14
Seite 14 von 14

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz