Hi Martin et all,
Ich danke Dir für die Hilfe. Mein Problem war letztendlich, daß ich in der
Sub vergessen hatte die Werte mit Byval zu übergeben. Hier ist mein jetziger (funktionsfähiger ;o) Code:
Code:$crystal = 16000000 $regfile = "M128def.dat" Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portb , Ce = 3 , Cd = 0 , Wr = 2 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6 Declare Sub Text_2_lcd(text As String , Byval Xloc As Integer , Byval Yloc As Integer , Byval Invert_it As Integer) Dim Text As String * 40 Cursor Off Cls Gosub Menu Do Loop End Sub Text_2_lcd() Dim X As Integer , Y As Integer Dim X_start As Integer , Y_start As Integer , X_start_old As Integer , Y_start_old As Integer Dim X_stop As Integer , X_stop_old As Integer , Y_stop As Integer , Y_stop_old As Integer If Invert_it = 1 Then Locate Yloc , Xloc ' WTF! First y and then x? No sensible person writes this way :( Geez! ldi r24,&H81 rcall _GWrite_Cmd Lcd Text X_start = Xloc * 6 X_start = X_start - 6 X_start_old = X_start ' Store values in a new variable as we need to remove the black bar once the item should no longer be highlighted X_stop = 6 * Len(text) X_stop = X_stop + X_start X_stop_old = X_stop Y_stop = Yloc * 8 Y_stop_old = Y_stop Y_start = Y_stop - 8 Y_start_old = Y_start For X = X_start To X_stop For Y = Y_start To Y_stop Pset X , Y , Invert_it Next Y Next X Else ldi r24,&H80 rcall _GWrite_Cmd For X = X_start_old To X_stop_old For Y = Y_start_old To Y_stop_old Pset X , Y , Invert_it Next Y Next X Locate Yloc , Xloc 'WTF! First y and then x? No sensible person writes this way :( Geez! Lcd Text End If End Sub Menu: Text = "Dieser Text ist Inverse" Call Text_2_lcd(text , 3 , 7 , 1) Text = "und diese wieder normal" Wait 3 Call Text_2_lcd(text , 3 , 8 , 0) Text = "inverse is sooooo cool" Call Text_2_lcd(text , 3 , 9 , 1) Return
Vielleicht kann es ja einer brauchen. Das Sub funzt folgendermaßen:
Call Text_2_LCD (Text,x,y,Inverse). Damit wird der Text auf dem
Display an der Position x,y angezeigt. Der Code prüft wie lange der
eigentliche Text ist und macht den schwarzen Balken, womit der Text
invertiert wird, nur so lang wie nötig. Ist der nächste Parameter eine 1,
dann wird der Text invers dargestellt. Gleichzeit merkt sich der Code,
wo invers dargestellt wurde. Sobald die nächste Zeile wieder normal
aussehen soll wird der schwarze Balken (Pset) entfernt. Sprich das
inverse wird aufgehoben.
Ich werde es jedenfalls nicht benutzen.
Das Ganze wird viel zu aufwendig. Ich wollte eigentlich ein Menu
aufbauen und dann mittels einem Rotary Encoders die Zeile, die
verändert werden soll, auswählen (==>invers darstellen) und beim
drücken des Encoder Knopf ins Untermenu springen bzw eine Funktion
ein oder ausschalten.
Das Ganze geht mit Zahlen vor dem Menupukt und einem Keypad als
Spannungsteiler verdrahtet (Abfrage über ADC) viel schneller. Den
Code hatte ich in fünf Minuten geschrieben ;o))
Schade, daß gerade bei solchen einfachen Sachen BASCOM-AVR so
eingeschränkt ist. Auch solche Sachen, daß beim Locate erst der
Y Parameter kommt und dann der X Parameter, ergeben für mich
keinen Sinn. Evtl könnte Mark mal die GLCD Library ein wenig aufpeppen.
viele internette Grüße,
Reinhard







Zitieren

Lesezeichen