list of met6hods withou tlist

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

sinjin

Betreff: list of met6hods withou tlist

BeitragSo, Okt 05, 2014 4:35
Antworten mit Zitat
Benutzer-Profile anzeigen
i have the following source code and i wanna evade tlist, ok in deutsch: ich möchte keine tlist (weil ich mich damit noch nie beschäftigt habe, ich kann aber assembler Very Happy) und ich habe einen plan wie blitmax funktionier. aber ich denke es geht auch ganz gut so: 2 fragen eigentlich, die erste: wie soretiere ich in packeten: also die sorttframe function ist das problem:

Code: [AUSKLAPPEN]

superstrict
framework brl.retro
'import "_resicon.o"
import brl.timer
import brl.graphics
import brl.glgraphics
import brl.max2d
import brl.glmax2d
import brl.d3d7max2d
import brl.maxgui
import brl.win32maxgui

'import brl.freetypefont
'import brl.bmploader
'import brl.tgaloader
'import brl.jpgloader 'noneed
'import brl.pngloader 'noneed
'import brl.wavloader
'import brl.oggloader
'import pub.freeprocess
'import pub.stdc
'import blitz3d.blitz3dsdk
'include "units2\sys.bmx"
'include "units2\gadget.bmx"

apptitle="New"

global win:tgadget=createwindow("New",100,100,500,500,,15-window_menu-window_status+window_hidden)
global can:tgadget=createcanvas(0,0,500,500,win)
setgraphics canvasgraphics(can)

sethotkeyevent key_x  ,modifier_alt,createevent(event_windowclose,win)
sethotkeyevent key_escape,0           ,createevent(event_windowclose,win)

'------------------------------------------

global secmil%=millisecs(),oldmil%
addhook fliphook,hookflip
function hookflip:object(id%,data:object,context:object)
  local a%=millisecs()
  oldmil=a-secmil
  secmil=a
endfunction

function drawbox(x%,y%,w%,h%)
  w:+x-1
  h:+y-1
  drawline x,y,w,y,false
  drawline w,y,w,h,false
  drawline w,h,x,h,false
  drawline x,h,x,y,false
endfunction

function drawcbox(x%,y%,w%,h%,rgbl%,rgbr%)
  w:+x-1
  h:+y-1
  setcolor rgbr shr 16,rgbr shr 8&$ff,rgbr&$ff
  drawline w,y,w,h,false
  drawline w,h,x,h,false
  setcolor rgbl shr 16,rgbl shr 8&$ff,rgbl&$ff
  drawline x,y,w,y,false
  drawline x,h,x,y,false
endfunction

'------------------------------------------

type tev
  field x%,y%
  field mx%,my%,mz%
  field down%,up%,first%,last%

  method area%(x1%,y1%,w1%,h1%)
    return (x>=x1) and (y>=y1) and (x<=x1+w1) and (y<=y1+h1)
  endmethod

  method upd()
    mx=0
    my=0
    mz=0
    up=0
    first=0
    last=0
    select currentevent.id
    case event_mousemove
      mx=x
      my=y
      x=currentevent.x
      y=currentevent.y
      mx=x-mx
      my=y-my
    case event_mousewheel
      mz=currentevent.data

    case event_mousedown
      local a%=1 shl (currentevent.data-1)
      if not down then first=a
      down:|a
    case event_mouseup
      local a%=1 shl (currentevent.data-1)
      down:&~a
      if not down then last=a
      up=a
    endselect
  endmethod
endtype

'-----------------------------------------

type tframe
  field x%,y%,w%,h%
  field prev:tframe
  field lvl%
  field opt% '$1=mouse over,$2=hold,$80=on/off state

  global gx%,gy%,gw%,gh%
  global vx%,vy%,vw%,vh%
  global active:tframe
  global ox%,oy%

  method draw() abstract
'  method upd%(ev:tev) abstract

  method reset(xx%,yy%,ww%,hh%,p:tframe=null)
    x=xx
    y=yy
    w=ww
    h=hh
    prev=p
    lvl=0
    while p
      lvl:+1
      p=p.prev
    wend
  endmethod
  method posglobal(xx%,yy%)
    x=xx
    y=yy
    local p:tframe=prev
    while p
      x:-p.x
      y:-p.y
      p=p.prev
    wend
  endmethod

  method get%()
    gx=x
    gy=y
    gw=w
    gh=h
    vx=x
    vy=y
    vw=w
    vh=h
    local p:tframe=prev
    while p
      gx:+p.x
      gy:+p.y
      if (vx<0) then
        vw:+vx
        vx=0
      endif
      if (vy<0) then
        vh:+vy
        vy=0
      endif
      if (vx+vw>p.w) then vw=p.w-vx
      if (vy+vh>p.h) then vh=p.h-vy
      vx:+p.x
      vy:+p.y
      p=p.prev
    wend
    return (vw>0) and (vh>0)
  endmethod

  method upd%(ev:tev)
    if active and (active<>self) then return false
    if not get() then
      if ev.last then
        opt:&~$3
        active=null
      endif
      return false
    endif

    if ev.area(vx,vy,vw,vh) then
      opt:|$1
      if ev.first then
        active=self
        opt:|$2
        ox=gx-ev.x
        oy=gy-ev.y
      endif
      if (ev.last&$1) and (active=self) then opt:~$80
    else
      opt:&~$1
    endif

    if ev.last then
      opt:&~$2
      active=null
    endif
    return true
  endmethod
endtype

type tframe_empty extends tframe
  method upd%(ev:tev)
'    return super.upd(ev)
super.upd(ev)
if opt&$2 then posglobal ev.x+ox,ev.y+oy
'get
'if (vw<0) then x=-w+1
'if (vh<0) then y=-h+1
  endmethod

  method draw()
    if not get() then return
    setviewport vx,vy,vw,vh
if opt&$2 then setcolor 255,255,255 else setcolor 0,255,0
'setalpha 0.5
'drawrect gx,gy,gw,gh
'setalpha 1
    drawbox gx,gy,gw,gh
setviewport 0,0,canw,canh
drawtext bin(opt),gx,gy
  endmethod
endtype

type tframe_but extends tframe
  field txt$,tx%,ty%

  method set(t$)
    txt=t
    tx=(w-textwidth(txt))/2
    ty=(h-textheight(txt))/2
  endmethod

  method upd%(ev:tev)
    return super.upd(ev)
  endmethod

  method draw()
    if not get() then return
    setviewport vx,vy,vw,vh
    if (opt&$1) then setcolor 0,96,96 else setcolor 0,0,128
    if (opt&$2) then setcolor 0,128,128' else setcolor 128,0,0
    drawrect gx+1,gy+1,gw-1,gh-1
'    if (opt&$1) then setcolor 255,255,255 else setcolor 128,128,128
if (opt&$80) then drawcbox gx,gy,gw,gh,$00008888,$0000ffff else drawcbox gx,gy,gw,gh,$0000ffff,$00008888
    setcolor 255,255,255
    drawtext txt,gx+tx,gy+ty
  endmethod
endtype

type tframe_win extends tframe
  field border%=12

  method upd%(ev:tev)
    super.upd(ev)
    if (opt&$2) then
      if (ev.down&$1) then posglobal ev.x+ox,ev.y+oy
'      if (ev.down&$2) then w=(ev.x-gx)'+(ev.x+ox-gx)
      if (ev.down&$2) then
        w:+ev.mx
        h:+ev.my
      endif
    endif
  endmethod

  method draw()
    if not get() then return
    setviewport vx,vy,vw,vh
    setcolor 0,0,0
    drawrect gx+1,gy+1,gw-2,gh-2
    setcolor 255,255,255
    drawbox gx,gy,gw,gh
    drawline gx+1,gy+border,gx+gw-1,gy+border,false
    drawline gx+gw-border,gy+1,gx+gw-border,gy+gh-1,false
    drawline gx+gw-1,gy+gh-border,gx,gy+gh-border,false
    drawline gx+border,gy+gh-1,gx+border,gy,false
  endmethod
endtype

function sorttframe(f:tframe[])
  if not f[0].active or (f[0].active=f[0]) then return
  local a%=f.length
  while a
    a:-1
    if (f[a]=f[0].active) then exit
  wend
local l%=a
  for local b%=a until f.length'-1
'if f[b].prev=f[0].active.prev then
if f[b].lvl<=f[l].lvl then
    local x:tframe=f[b]
    f[b]=f[l]
    f[l]=x
l=b
endif
  next
endfunction

'-----------------------------------------

'global ev:tev_old=new tev_old
global ev:tev=new tev
global canw%=clientwidth(can)
global canh%=clientheight(can)

global tf:tframe[6]
tf[0]=new tframe_empty
tf[0].reset 50,50,canw-100,canh-100
tf[0].upd ev
tf[1]=new tframe_empty
tf[1].reset 50,30,canw-170,canh-170,tf[0]
tf[2]=new tframe_but
tf[2].reset 20,0,90,20,tf[1]
tframe_but(tf[2]).set "Hello"
tf[3]=new tframe_but
tf[3].reset 20,30,90,20,tf[1]
tframe_but(tf[3]).set "aha"
tf[4]=new tframe_win
tf[4].reset 60,5,130,80,tf[1]
tf[5]=new tframe_but
tf[5].reset 10,4,50,40,tf[4]
tframe_but(tf[5]).set "win"

showgadget win

setclscolor 64,64,64
global timer:ttimer=createtimer(25)
repeat
  waitevent
'printevent

  select currentevent.id
  case event_windowclose  exit
  case event_gadgetpaint,event_timertick
    cls
for local a%=0 until tf.length
'for local a%=tf.length-1 to 0 step-1
tf[a].draw
next
setviewport 0,0,canw,canh
'    ev.draw
    flip

  default
    ev.upd
for local a%=tf.length-1 to 0 step-1
'for local a%=0 until tf.length
tf[a].upd ev
next
sorttframe tf
  endselect
forever


darf ich nicht mehr bearbeiten....toll, programmieren ist ganz toll heutzutgage

BladeRunner

Moderator

BeitragSo, Okt 05, 2014 7:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Mehrerlei:
1. Benutze in Zukunft Codetags, ich habe sie reineditiert für dich diesmal.
2.Auch mit Codetags ist dein Code sehr schwer zu lesen. Du benutzt kryptische Variablennamen und hast vorher einen Riesen Frameworkwust - der mag für das endgültige Programm nützlich sein, hier stört er.
Um Hilfestellung zu Erlangen sollte dein Code auf das nötigste reduziert sein.

Zudem ist deine Fragestellung nicht klar. Warum willst Du TList bei welchem Stück deines Codes vermeiden?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Xeres

Moderator

BeitragSo, Okt 05, 2014 10:53
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~
Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group