German Draw 9 Patch Bilder

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hi Klaus,

danke für den Tipp, nach dem Entfernen der DoEvents, hat sich das ganze dramatisch beschleunigt.

Jetzt habe ich ganz unten in der AddRow Sub die Zeile

B4X:
ScrollView1.ScrollPosition = TotalHeight

zu stehen, ich dachte es scrollt automat. bis nach unten bis zu der letzte Zeile.

Aber es tun nichts :-(

gruß
Sinan
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
:)


na das mit dem DoEvents müsste ich doch wegnehmen, da sonst das ganze langsam wird.

gruß
sinan
 

klaus

Expert
Licensed User
Longtime User
Ich meinte das so:
B4X:
ScrollView1.ScrollPosition = TotalHeight
DoEvents
Wenn nur ein DoEvents drin ist sollte es das Progamm nicht merkbar langsamer machen.
Wenn Du viele DoEvents in einer Schlaufe hast dann wirde es merkbar.

Beste Grüsse.
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hi Klaus,

ich verstehe nicht, warum ich hier eine Fehlermeldung bekomme
B4X:
Sub AddRow(siranum As Int, Nerden As String, txt As String)

und so nicht
B4X:
Sub AddRow(Nerden As String, txt As String)

Die Fehlermeldung lautet:
An error has occurred in Sub: Java.lang.Exception: Sub addrow signature does not match expected signature.


gruß
sinan
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Weil Deine Routine zwei Parameter verlangt und Du im ersten Beispiel aber 3 Parameter übergibst !

Beste Grüsse.

nein nein, war mein Fehler habe wenig Code gepostet,
also übergeben tue ich auch drei Parametern

B4X:
AddRow(Cursor1.GetInt("id"),Cursor1.GetString("Taraf"),Cursor1.GetString("Mesaj"))

und trotzdennoch bekomme ich die Fehlermeldung.

Aber jetzt habe ich eins gemacht, habe die erste Parameter in eine Variable reingeschrieben
B4X:
siranumarasi = Cursor1.GetInt("id")

und die Sub Routine mit zwei Parametern gelassen
B4X:
Sub AddRow(Nerden As String, txt As String)

und habe dann die die dritte Parameter in der AddRow Routine
aus der Variable hergerufen
B4X:
 lbl.Tag = siranumarasi
 lbl.TextColor = Colors.Black
 lbl.Text = txt

mein Absicht war gewesen, den lbl.Tag nicht mit dem internen Zählerwert von Index zu versehen, sondern mit dem id aus der DB vom auto-increment,
denn so kann ich auch die Sprechblasen einzeln in Scrollview löschen und auch aus der DB.


Funktioniert auch wunderbar.... nur das mit dem Scrollview refresh muss ich noch hinbekommen... denn die gelöschte Zeile bleibt dann leer und sieht nich so schön aus, also müssen die Zeilen vorrücken.

vielleicht könntest du mir da behilflich sein wie ich das machen kann.
gruß
sinan
 
Last edited:

klaus

Expert
Licensed User
Longtime User
Das ist leider zu oft das Problem wenn man fast keinen Code bekommt und dann versuchen muss heraus zu finden was falsch gemacht wurde.

Folgendes sollte funktionieren:
B4X:
AddRow(Cursor1.GetInt("id"),Cursor1.GetString("Taraf"),Cursor1.GetString("Mesaj"))
B4X:
Sub AddRow(ID as Int, Nerden As String, txt As String)

Wenn Du eine Zeile löschen willst musst Du alle Daten der darüber liegenden Labels um eine Stelle nach unten verschieben und dann das letzt Label mit ScrollView1.Panel.RemoveViewAt(X) löschen.
Oder die ganze Tabelle löschen und neu ertellen.
Du musst aber wissen welchen Index das zu löschende Label hat.
Das ist einfach wenn der Tag Parameter dem internen Index entspricht.
Wenn Du aber den SQL ID nimmst brauchst Du eine Referenz zum internen Index.

Beste Grüsse.
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hi Klaus,

B4X:
Sub AddRow(ID as Int, Nerden As String, txt As String)

so hatte ich das ja am Anfang gemacht aber da das Word ID bei mir in grün hinterlegt wird an dieser Stelle , gehe ich davon aus, dass das Wort ID von irgend wo im code verwendet wird.
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Wenn Du eine Zeile löschen willst musst Du alle Daten der darüber liegenden Labels um eine Stelle nach unten verschieben und dann das letzt Label mit ScrollView1.Panel.RemoveViewAt(X) löschen.
Beste Grüsse.

das verstehe ich nicht so ganz genau... warum muss ich die Labels die darüber liegen nach unter verschieben?
nur um die letzte Label zu löschen?

und was mache ich wenn ich irgend eine Zeile löschen möchte?

ich habe das mal jetzt so realisiert.
B4X:
Label_longClick
    Dim lbl As Label
 lbl = Sender
lbl.RemoveView
SQL1.ExecNonQuery("DELETE FROM '" & user& "' WHERE id = '" & lbl.Tag & "'")

somit lösche ich sie vom Scrollview aber auch aus der Datenbank,
nur es wird nicht refresht, so das ich die Zeilenlücken noch in der Scrollview sehe.

entweder ich schreibe sie nach dem löschen neu in die Scrollview, oder es gibt ein besseren Trick was schneller ist und Sinnvoller, den du natürlich kennst :)

gruß
sinan
 

klaus

Expert
Licensed User
Longtime User
Bist Du sicher dass es so war:
B4X:
Sub AddRow(ID as Int, Nerden As String, txt As String)
und nicht so:
B4X:
Sub AddRow(ID as String, Nerden As String, txt As String)
Falls ID wo anders verwendet wird einfach den Namen ändern.

Beste Grüsse.
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Bist Du sicher dass es so war:
B4X:
Sub AddRow(ID as Int, Nerden As String, txt As String)
und nicht so:
B4X:
Sub AddRow(ID as String, Nerden As String, txt As String)
Falls ID wo anders verwendet wird einfach den Namen ändern.

Beste Grüsse.

in thread 50 habe ich den Orginale reinkopiert
B4X:
Sub AddRow(siranum As Int, Nerden As String, txt As String)

so hatte ich dann versucht aber leider ohne Erfolg immer wieder der gleiche Fehlermeldung... aber ist auch egal, weil ich das jetzt über die Variable gelöst habe.
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hi Klaus,

seit über 3 stunden versuche ich, eine zweite Label in die Sprechblase rein zubekommen, leider ohne Erfolg :)

könntest du mir bitte da ne Ansatz geben, wie ich das realisieren kann?

gruß
sinan
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hi klaus,

verstehe mich bitte nicht falsch aber ich versuche es zu verstehen wie du das meinst.

Könntest du mir da etwas code zeigen?
du weis doch das mein code so asschaut:

B4X:
Dim lbl As Label
Dim Breite As Float  
lbl.Initialize("Label")

   
Breite = Canvas1.MeasureStringWidth(txt, Typeface.DEFAULT, 14) + RaenderX
   
   Select Nerden
   
       Case "karsidan"
           Breite = Min(Breite, 0.8 * ScrollView1.Width) ' Du kannst hier mit x * ScrollView1.Width die die maximale Breite bestimmen
         ScrollView1.Panel.AddView(lbl, 0, TotalHeight, Breite, 0)
         SetNinePatchDrawable(lbl, "karsidangelen")
         lbl.Gravity = Gravity.LEFT   'Text wird linksbündig dargestellt
   
       Case "benden"
           Breite = Min(Breite, 0.8 * ScrollView1.Width) ' Du kannst hier mit x * ScrollView1.Width die die maximale Breite bestimmen
           ScrollView1.Panel.AddView(lbl, ScrollView1.Width - Breite, TotalHeight, Breite, 0)
           SetNinePatchDrawable(lbl, "bendengelen")
           lbl.Gravity = Gravity.LEFT
      
    End Select
   
    lbl.Tag = siranumarasi 'Index
    lbl.TextColor = Colors.Black
    lbl.Text =  txt

    ht = su.MeasureMultilineTextHeight(lbl, txt) + RaenderY

    lbl.Height = ht
    TotalHeight = TotalHeight + ht + Bosluk
    Index = Index + 1
   
 ScrollView1.Panel.Height = TotalHeight

Meinst du, soll ich den Teil ändern?:
B4X:
ScrollView1.Panel.AddView(lbl, 0, TotalHeight, Breite, 0)
         SetNinePatchDrawable(lbl, "karsidangelen")
         lbl.Gravity = Gravity.LEFT   'Text wird

so etwa?

B4X:
ScrollView1.Panel.AddView(Panel, 0, TotalHeight, Breite, 0)
         SetNinePatchDrawable(Panel, "karsidangelen")
         Panel.Gravity = Gravity.LEFT   'Text wird

?

gruß
sinan
 
Top