TextWindow
Author: Jonhux
Added: 27. elokuuta 2011 kello 11.00
Edited: 28. elokuuta 2011 kello 9.49
Category: Käyttöliittymä
Description
Ohjelma näyttää halutusta tekstistä ruudulle mahtuvan osan. Lukukohtaa voi muuttaa raahaamalla palkkia hiirellä, nuolinäppäimillä tai hiiren rullalla.
Esimerkissä voit muuttaa ikkunan kokoa ja luoda/poistaa sanoja.
Code
Select all1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | // Jonhu 20.6.2010
Type FILELIST
Field s As String
EndType
For i = 0 To 20
addword()
Next i
ww = 300
wh = 200
Repeat
Color cbwhite
CenterText ScreenWidth()/2,20,"TextWindow"
scroll = TextWindow( 50,50,ww,wh, 10, scroll )
If MouseDown(1) Then
If BoxOverlap(MouseX(),MouseY(),1,1, 50+ww,50+wh,10,10) Then grab = 1
Else
grab = 0
EndIf
If grab = 1 Then
ww = Max(MouseX()-50,20)
wh = MouseY()-50
EndIf
If KeyDown(28) Then addword() // entter
If KeyDown(14) Then deleteword() // backspace
Box 50+ww,50+wh,10,10
DrawScreen
Forever
Function deleteword()
aa.FILELIST = First(FILELIST)
If aa<>NULL Then Delete aa
EndFunction
Function addword()
aa.FILELIST = New (FILELIST)
For i = 0 To Rand(1,60)
aa\s = aa\s + Chr( Rand(65,90) )
Next i
EndFunction
Function TextWindow( wx,wy, ww,wh, scroll_width, scroll )
Color cbblack : Box wx,wy,ww,wh,1
Color cbwhite : Box wx,wy,ww,wh,0
vx = 10 : vy = 10 // tekstin alkupaikka ikkunan reunasta
If scroll = 0 Then scroll = MakeMEMBlock(8) : PokeFloat scroll, 0, 0
scroll_pos# = PeekFloat(scroll, 0)
kkk = 0
Color cbwhite
th = TextHeight("|")+2
tw = TextWidth("M")
For a.FILELIST = Each FILELIST
If kkk >= scroll_pos And wy+vy+(kkk-scroll_pos)*th <= wy+wh-th Then
chars = RoundDown((ww-scroll_width-vx-1)/tw)
Text wx+vx, wy+vy+(kkk-scroll_pos)*th, Left(a\s,chars)
EndIf
kkk + 1
Next a
Riveja_Nakyvissa_max# = RoundDown(Float(wh-vy-1.0)/th)
Riveja_Yhteensa# = kkk
max_pos = Riveja_Yhteensa - Riveja_Nakyvissa_max
If Riveja_Yhteensa < Riveja_Nakyvissa_max Then max_pos = 0
scroll_pos = scroll_pos + KeyDown(208) - KeyDown(200) // nappaimet, alas-ylos nuolet
scroll_pos = Min( Max(scroll_pos-MouseMoveZ(),0), max_pos ) // rulla
// palkin koordinaatit
bw = scroll_width
bh = Min(Riveja_Nakyvissa_max / Riveja_Yhteensa,1.0) * wh-2
bx = wx + ww - scroll_width-1
by = wy + scroll_pos*Float(wh/riveja_yhteensa) + 1
delta_graby = PeekInt(scroll,4)
If MouseDown(1) Then
If delta_graby = 99999 And BoxOverlap( MouseX(), MouseY(), 1,1,bx, by, bw, bh) Then
delta_graby = MouseY() - by
EndIf
If delta_graby <> 99999 Then
by = Max( Min( MouseY()-delta_graby, wy+wh-bh-1 ), wy+1 )
scroll_pos = ( by - wy-1 ) / Float(wh/riveja_yhteensa)
EndIf
Else
delta_graby = 99999
by = Max( Min( by, wy+wh-bh-1 ), wy+1 )
EndIf
Color 100,100,100
Line bx,wy+1,bx,wy+wh-2
Box bx, by, bw, bh
PokeFloat scroll,0,scroll_pos#
PokeInt scroll,4,delta_graby
Return scroll
EndFunction
|
Comments
Leave a comment
You must be logged in to comment.
#26 Sent by: skorpioni_cb, 5. tammikuuta 2012 kello 10.02
Noniin, nyt kun tohon yhdistää vielä CBSdk ja tiedosto-komennot, voidaan tehdä Tekstieditori CoolBasicillä ;D