Login Register
Frontpage Code library Pastebin

TextWindow

Author: Jonhux
Added: 27.8.2011 11:00
Edited: 28.8.2011 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 all
  1
  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

#26 Sent by: skorpioni_cb, 5.1.2012 10:02

Noniin, nyt kun tohon yhdistää vielä CBSdk ja tiedosto-komennot, voidaan tehdä Tekstieditori CoolBasicillä ;D

Leave a comment

You must be logged in to comment.