Avatar billede mr.truck Nybegynder
01. december 2002 - 09:50 Der er 10 kommentarer og
1 løsning

farve i textbox afhængig af tal

jeg skal bruge noget til at vise en væskestand, alt afhængig af literantal, jeg forstiller mig at jeg skal bruge en textbox, hvis jeg har en tank på 50.000 liter, og jeg indtaster at der er 25.000 liter, så skal halvdelen farves rød. Er der en som har et bud, eller en mere smart måde at gribe sagen an
Avatar billede kjeld_klit Nybegynder
01. december 2002 - 09:55 #1
Hva' med at bruge en Progressbar (Microsoft Windows Commen Controls 6.0) Den kan du også "stille på højkant"
Avatar billede terry Ekspert
01. december 2002 - 11:03 #2
sa´me suggestion I would have made :o)
Avatar billede martin_moth Mester
01. december 2002 - 11:08 #3
Smid en picturebox (Picture1), en textbox (text1) og en knap (command1) på din form. Sørg for, at picture1 er 5000 høj!

Kopier følgende kode:

Private Sub Command1_Click()
  'Tjekker, at det indtastede tal er "lovligt"
  If Val(Text1.Text) > 50000 Then
    MsgBox "Indtast et tal mellem 0 og 50000", vbOKOnly, "Fejl"
  End If
  'Kalder optegnings-procedure
  OptegnPicture1
End Sub

Private Sub Form_Load()
  Text1.Text = "25000"
  Command1.Caption = "Optegn"
End Sub

Sub OptegnPicture1()
  'Optegner Picture1 afhængigt af hvad der står i text1
 
  Picture1.Cls
  Picture1.FillStyle = vbFSSolid
  'Skifter farve afhængig af vædskestand
  'Jo mere vædske, jo mørkere
  Select Case Val(Text1.Text)
    Case Is < 1
      Exit Sub
    Case Is < 25000
      Picture1.FillColor = vbBlue
    Case Is < 45000
      Picture1.FillColor = vbRed
    Case Else
      Picture1.FillColor = &H80& 'Som du ser, kan du også vælge hexidecimale farvekoder
  End Select
 
  'Tegner vædsken
  Picture1.Line (Picture1.Width, Picture1.Height - Round(Val(Text1.Text) / 10)) _
                -(0, Picture1.Height), , B
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
'Procedure der kun tillader tal (samt backspace m.v.) som input
  Select Case KeyAscii
    Case vbKeyReturn 'Enter-tast
      SendKeys "{tab}" 'Enter virker på samme måde som tab
    Case vbKeyBack 'Backspace
    Case 48 To 57 'Tallene 0-9
    Case Else 'Alle andre tastetryk
      KeyAscii = 0
  End Select
End Sub
Avatar billede martin_moth Mester
01. december 2002 - 11:20 #4
PS: For at gejle helt, kan du lave Picture1.FillColor direkte afhængig af text1.text, ved at lade text1.text indgå som en del af farvekoden  - så kan den helt "trinløst" gå fra lyserød ved min vandstand til mørkerød ved max vandstand ;o)
Avatar billede martin_moth Mester
01. december 2002 - 11:34 #5
Dat var da en god ide, jeg fik i ovenstående kommentar:
Skift Sub OptegnPicture1() ud med nedenstående - det er meget enklere uden den select-case, og nu varierer farven fra 100% rød ved lavt land til 100% sort ved højt vand, varierende i 256 trin :oD

Sub OptegnPicture1()
  Picture1.Cls
  Picture1.FillStyle = vbFSSolid
  Picture1.FillColor = RGB(Round(255 - (Val(Text1.Text) / 50000 * 255)), 0, 0)

  Picture1.Line (Picture1.Width, Picture1.Height - Round(Val(Text1.Text) / 10)) _
                -(0, Picture1.Height), , B
End Sub

med mindre du altså VIL have den skifter fra blå til rød ved 25000 - så brug bare mit første svar ;o)
Avatar billede kjeld_klit Nybegynder
01. december 2002 - 11:49 #6
>mr.truck Hele 2 forslag, et simpelt og avanceret! Du er en heldig "kartoffel". :-)

>Martin, det ser spændende ud. Skal der ikke være en Exit Sub efter Msgbox fejlmeddelelsen? Ellers kører koden vel bare videre og gi'r en kørselsfejl.
Avatar billede mr.truck Nybegynder
01. december 2002 - 11:51 #7
Tak, for det hurtige svar
Avatar billede martin_moth Mester
01. december 2002 - 11:51 #8
Næ - om koden kører videre eller ej giver ingen fejl! Men en "Exit Sub" giver en mere pæn og korrekt kode, så den skulle mr. truck da ta og smide ind :o))
Og hvoddn stiller man egentligt en progress-bar på højkant?
Avatar billede kjeld_klit Nybegynder
01. december 2002 - 11:57 #9
Du får overflow hvis man indtaster et for stort tal uden Exit Sub!

ProgressBar1.Orientation = ccOrientationVertical - Vælges evt fra Propertiesvinduet
Avatar billede kjeld_klit Nybegynder
01. december 2002 - 11:58 #10
...eller man kan ændre det indtastede til max-værdien ved fejlbehandlingen
Avatar billede martin_moth Mester
01. december 2002 - 16:07 #11
Yep - du har ret - så lad mig omformulere:

  If Val(Text1.Text) > 50000 Then
    MsgBox "Indtast et tal mellem 0 og 50000", vbOKOnly, "Fejl"
    Text1.SetFocus
    Text1.SelStart = 0
    Text1.SelLength = Len(Text1.Text)
    Picture1.Cls
    Exit Sub
  End If
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester