Code: Alles auswählen
GetTextDimensions
Moderator: Moderatoren
'sle' findet z.B. kein XbpSle(), denn XbpSle es ist nur ein Teilbegriff.Suche nach Wörtern:
Setze ein + vor ein Wort, das gefunden werden muss und ein - vor ein Wort, das nicht gefunden werden darf. Verwende mehrere Wörter getrennt durch | innerhalb einer Klammer, wenn nur eines der Wörter gefunden werden muss. Benutze ein * als Platzhalter für teilweise Übereinstimmungen.
GetTextDimensions ist ein Artikel von Günter Beyes und es ging um GetTextExtentPoint32() vs. GraQueryTextBox().Herbert hat geschrieben:Wie kommst du auf dieses Wort? Im API ist das nicht bekannt.
Code: Alles auswählen
FUNCTION HandleFromFont( oFont )
Soweit ich weiß, programmiert Alaska hauptsächlich in xBase (auch den Compiler!). Lediglich Schnittstellen, die in xBase nicht zu realisieren sind, der P-Code-Kernel und vereinzelte Optimierungen sind in C++ programmiert.Herbert hat geschrieben:Aha, danke.
Womit programmiert eigentlich Alaska? Doch auch mit C und entsprechenden API-Calls?
Falls diese Funktion intern beim Aufbau von Dialogen verwendet wird, wäre eine Optimierung der Gra-Funktionen zur Performance-Steigerung mehr als angebracht. Nicht erst mit Version 3.0, wenn dort dann überhaupt.
Stimmtbrandelh hat geschrieben:...Ebenso die Möglichkeit zur Laufzeit mal so eben aus einem Quellcode einen codeblock zu erstellen, das setzt
neben den flexiblen Variablen eben auch vorraus, dass der compiler selbst zumindest teilweise im runtimesystem hinterlegt ist.
Alles hat Vor- und Nachteile
Code: Alles auswählen
bBlock := {||12*12+10-123+12929}
FOR I = 1 TO 1000000
Eval( bBlock }
NEXT I
Code: Alles auswählen
FOR I = 1 TO 1000000
Eval( {||12*12+10-123+12929} }
NEXT I
Code: Alles auswählen
bBlock := {||12*12+10-123+12929}
FOR I = 1 TO 1000000
Eval( bBlock }
NEXT I
Code: Alles auswählen
bBlock :=&("{||12*12+10-123+12929}")
FOR I = 1 TO 1000000
Eval( bBlock }
NEXT I
Code: Alles auswählen
#include "XBP.CH"
proc main
local bBlock, nDauer1, nDauer2
set alternate to test.txt
set alternate on
?
? "Nicht vermuten, sondern testen ;-) "
?
? "direkt compilierter codeblock, start ",time()
nDauer1 := seconds()
bBlock := {||12*12+10-123+12929}
FOR I = 1 TO 1000000
Eval( bBlock )
NEXT I
nDauer1 := seconds() - nDauer1
? "Ende Test 1 ", time(), " Dauer: ", nDauer1, "Sekunden"
bBlock := NIL // sicher ist sicher
? "über string compilierter codeblock, start ",time()
nDauer2 := seconds()
bBlock :=&("{||12*12+10-123+12929}")
FOR I = 1 TO 1000000
Eval( bBlock )
NEXT I
nDauer2 := seconds() - nDauer2
? "Ende Test 2 ", time(), " Dauer: ", nDauer2, "Sekunden"
set alternate to
wait
return
Code: Alles auswählen
Nicht vermuten, sondern testen ;-)
direkt compilierter codeblock, start 17:38:04
Ende Test 1 17:38:05 Dauer: 0,80 Sekunden
über string compilierter codeblock, start 17:38:05
Ende Test 2 17:38:06 Dauer: 1,50 Sekunden
Code: Alles auswählen
FOR i := 1 TO ::titleHeight
aColors[1] += ::gradientStep
aColors[2] += ::gradientStep
aColors[3] += ::gradientStep
GraSetColor( oPS, GraMakeRGBColor(aColors), XBPSYSCLR_TRANSPARENT )
GraBox( oPS, aStartPos, aEndPos, GRA_OUTLINEFILL, ::radius, ::radius )
aStartPos[2]++
aEndPos[2]--
NEXT