StringGrid unter Carbon beim Scrollen sehr langsam

Antworten
gastonx
Beiträge: 13
Registriert: Mi 1. Nov 2006, 18:54
OS, Lazarus, FPC: Mac OS 10.6 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64 Bit
Wohnort: Villingen-Schwenningen
Kontaktdaten:

StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von gastonx »

Hallo,

ich arbeite im Moment an einem Programm das per StringGrid Daten ausgeben soll.
Da die Felder sehr individuell sind in Größe, Farbe und Darstellung entfällt die Verwendung vom ListView. Hier scheint das CustomDraw grundsätzlich nicht zu funktionieren, warum auch immer :)
VirtualStringTree hab ich in Delphi geliebt, ist aber unter Lazarus total instabil bzw. lässt sich nicht mal installieren ^^

Daher verwende ich nun das StringGrid. Soweit passt auch alles, aber:

Das Scrollen per Mauswheel ist unzumutbar langsam. Das Grid Scrollt noch sekunden nachdem das Rad losgelassen wurde weiter und ruckelt vor sich hin. Auch ohne CustomDraw ist das nachstellbar, je größer die Anzeigefläche desto langsamer wird es. Bei mir so extrem das bei voller Ansicht sogar das ändern der Fenstergröße ruckelt.

Wenn ich das ganze unter Windows Compiliere ruckelt nix, 1A Scroll. Nur unter Mac.
Ich schiebe im Moment die schuld auf Carbon und deren Umsetzung in Lazarus, dennoch frage ich mich warum z.B. das Listview nicht ruckelt.

Nachstellen: Einfach eine StringGrid auf die Form, min. 10 Spalten und 50 Zeilen rein. Das ganze mit Daten füllen und fertig ist das geruckel.

PS: Mein Mac ist unheimlich schnell, daher kann die Hardware nicht schuld sein :)

Falls hier jemand bereits Erfahrung gemacht hat wäre ich über ein Feedback sehr dankbar.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von theo »

gastonx hat geschrieben:VirtualStringTree hab ich in Delphi geliebt, ist aber unter Lazarus total instabil bzw. lässt sich nicht mal installieren ^^


Das funzt prima unter Lazarus. Welche Version hast du denn getestet?

gastonx
Beiträge: 13
Registriert: Mi 1. Nov 2006, 18:54
OS, Lazarus, FPC: Mac OS 10.6 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64 Bit
Wohnort: Villingen-Schwenningen
Kontaktdaten:

Re: StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von gastonx »

Derzeit nutze ich v0.9.28.2

Beim installieren von VST kommen jede Menge Fehler, unter anderen Timerlist was dazu führt das weder die Header noch sonst was ordentlich gezeichnet werden :(

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von theo »

Ich meinte welchen VST Port. Es gibt zwei. Der hier läuft imho recht gut (auf Mac hab ich den aber nicht getestet):
http://lazarus-ccr.svn.sourceforge.net/ ... new/trunk/

Hat möglicherweise noch Abhängigkeiten. Bin mir nicht sicher ob die noch nötig sind. Die wären allenfalls hier:
https://code.google.com/p/luipack/sourc ... svn/trunk/

gastonx
Beiträge: 13
Registriert: Mi 1. Nov 2006, 18:54
OS, Lazarus, FPC: Mac OS 10.6 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64 Bit
Wohnort: Villingen-Schwenningen
Kontaktdaten:

Re: StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von gastonx »

1. Versuch , sofort "vtgraphicsi.inc" nicht gefunden -.-
Unter include/intf/ ist die überall drin ausser in carbon.

Was hast Du da gemacht ?

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von theo »

gastonx hat geschrieben:Was hast Du da gemacht ?


Gar nichts. Wie gesagt ich hab's nicht auf Mac getestet da ich keinen besitze.

Das ist aber "nur" Alpha-Blend Zeugs. Kannst ja mal versuchen, das soweit auszukommentieren bis es kompiliert.

gastonx
Beiträge: 13
Registriert: Mi 1. Nov 2006, 18:54
OS, Lazarus, FPC: Mac OS 10.6 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64 Bit
Wohnort: Villingen-Schwenningen
Kontaktdaten:

Re: StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von gastonx »

das ist doch zum Haare raufen, geht nicht mal dieses Extension packet.

Code: Alles auswählen

function KillTimer(hWnd: THandle; nIDEvent: LongWord):Boolean;
begin
  Result := LCLIntf.KillTimer(hWnd, nIDEvent);
end;
 
function SetTimer(hWnd: THandle; nIDEvent: LongWord; uElapse: LongWord; lpTimerFunc: TTimerNotify): LongWord;
begin
  Result := LCLIntf.SetTimer(hWnd, nIDEvent, uElapse, nil{lpTimerFunc});
end;


Diese Funktion existiert nicht, also Kill und Set in LCLIntf und dessen incs.
Hab aber alle aktuell eigentlich :(

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von theo »

gastonx hat geschrieben:Hab aber alle aktuell eigentlich :(


Naja, zieh dir die SVN Version.
Diese Funktionen wurden am 10 Januar eingebaut.
http://svn.freepascal.org/cgi-bin/viewv ... ot=lazarus

gastonx
Beiträge: 13
Registriert: Mi 1. Nov 2006, 18:54
OS, Lazarus, FPC: Mac OS 10.6 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64 Bit
Wohnort: Villingen-Schwenningen
Kontaktdaten:

Re: StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von gastonx »

sooo :)
ich hab das nun alles hinbekommen.
VST ist drauf.
Nur folgendes Problem:
Die VST Fläche bleibt weiß.
Ich seh zwar das er nodes hinzufügt aber ich seh keine Spalten oder Header.
Liegts am Alphablend? Kann man das abschalten , finde hierzu keine Option :/

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von theo »

gastonx hat geschrieben:sooo :)
ich hab das nun alles hinbekommen.
VST ist drauf.
Nur folgendes Problem:
Die VST Fläche bleibt weiß.
Ich seh zwar das er nodes hinzufügt aber ich seh keine Spalten oder Header.
Liegts am Alphablend? Kann man das abschalten , finde hierzu keine Option :/


Ich glaube das wurde auf Carbon nicht wirklich getestet (wie so vieles, da die Mac-Laz Community nicht sehr gross ist).
Der Autor hat afaik keinen Mac, ich auch nicht.
Es wäre natürlich schön, wenn du VST auf Carbon hinkriegen könntest.
Ich glaube als Mac-Laz User muss man sich ein bisschen zu Helfen wissen. ;-)
Kompilieren und nicht crashen tut's ja offenbar schon mal. :D

gastonx
Beiträge: 13
Registriert: Mi 1. Nov 2006, 18:54
OS, Lazarus, FPC: Mac OS 10.6 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64 Bit
Wohnort: Villingen-Schwenningen
Kontaktdaten:

Re: StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von gastonx »

hehe jo das stimmt. Mac Technisch ist wenig los.
Ich werd mir das mal in ruhe anschauen, derweil weiter mit StringGrid ^^
Vielen Dank für Deine Infos.

gastonx
Beiträge: 13
Registriert: Mi 1. Nov 2006, 18:54
OS, Lazarus, FPC: Mac OS 10.6 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64 Bit
Wohnort: Villingen-Schwenningen
Kontaktdaten:

Re: StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von gastonx »

Jetzt muss ich doch nochmal fragen :D
Ich hab ja das Problem das VST komplett Weiß ist, also nicht auf den Canvas zeichnet.
Nun habe ich mir mal den Debugger angeschaut und sehe das dieser

Sat Oct 16 01:00:18 N-iMac.local dataarray[44510] <Error>: CGContextRestoreGState: invalid context 0x0
Sat Oct 16 01:00:18 N-iMac.local dataarray[44510] <Error>: CGContextSaveGState: invalid context 0x0
Sat Oct 16 01:00:18 N-iMac.local dataarray[44510] <Error>: CGContextScaleCTM: invalid context 0x0
Sat Oct 16 01:00:18 N-iMac.local dataarray[44510] <Error>: CGContextRestoreGState: invalid context 0x0

Meldet, im Dauerlauf...

Kann damit jemand was anfangen?

PS: Sonderfrage für Newbie: Im VST Code steht {$ifdef DEBUG_VTV} ... , wie kann ich mir diesen Log einblenden lassen? Nicht wundern hab noch nicht all zu viel mit logs gemacht :)

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von theo »

Ich weiss nur, dass LCL Carbon sehr strikt ist, mit dem OnPaint Ereignis. Ausserhalb läuft da scheint's gar nix.

Was das DEBUG_VTV betrifft, bin ich nicht ganz sicher.
Ich würde das mal bei Werkzeuge -> Lazarus kompilieren einrichten unter Einstellungen als
-dDEBUG_VTV
eintragen und danach die IDE mit Packages neu bauen.
könnte klappen, wenn du danach die Konsolenmeldungen anschaust.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: StringGrid unter Carbon beim Scrollen sehr langsam

Beitrag von Scotty »

Wie Theo sagt, gibt es unter Carbon kein OnPaint, OnDrawCell, OnDrawItem etc. Dein TStringGrid kann also nur mit Text gefüllt sein und das ist bei einer Standarddarstellung sicher nicht zu langsam. Wahrscheinlich machst du irgendetwas eigenartiges, zum Beispiel wiederholt Zellen füllen. Falls du wirklich selber was zeichnen willst/musst, kannst du unter Darwin halbwegs gut Qt benutzen. Damit stehen alle benutzerdefinierten Paint-Events zur Verfügung.
Zeichenoperationen sind übrigens auch zwischen Windows und Linux verschieden. Ohne das genau beschreiben zu können, vermute ich etwas in der Art, dass Linux den Canvas immer komplett neu erzeugt und Windows nur den notwendigen Bereich. Oder Windows bricht die letzte Ausgabe ab, wenn eine neue Nachricht kommt. Meine Graphikausgaben werden jedenfalls unter Windows viel schneller gezeichnet.

Antworten