Hallo,
hier mal ´n kleiner Code, mit dem die Steine durchnummeriert werden
können... Auch als Basis anderer SeinLayout-Manipulationen zu benutzten
In der vorliegenden Form wird dieses SteinLayout generiert:
Neben besserer Unterscheidbarkeit ist nun auch die Meldung "Joker wg.
99 Steine der Farbe x" verdeutlicht... Und es ist eben als Basis eigener
Manipulationen zu gebrauchen:
(muss im SubDir ....\99Seconds\Graphics gestartet werden!!!
Orginal-Layout bleibt als "Blicks1.BMP.BAK" erhalten)
Code: Alles auswählen
#Prg_Name = "99SecStones"
#Prg_Vers = "9604a" ;<-- set by PB_VersUpd Vers 9301a
#PB_Vers = "4.30"
#Size = 48 ;SteinGröße [Pixels]
#Steine = 29 ;Anz. definierter Steine
#FontSize = 16 ;Schriftgröße
#FontName = "VAGRounded BT" ;Schriftart
#WhiteStones = " 14 19 23 28 29 13 4 " ;Nr´s der dunklen Steine (bekommen weisse Schrift)
#Mode = 0
; XIncludeFile "C:\AlsterSoft\PB4.20\Module\FileBackup.PBI"
; XIncludeFile "C:\AlsterSoft\PB4.20\Module\ImageTransparenz.PBI"
; XIncludeFile "C:\AlsterSoft\PB4.20\Module\Win_Upd.PBI"
Procedure DrawTextOutline(DC, x, y, Text$, FontID, Farbe)
Protected oldspacing = GetTextCharacterExtra_(DC)
Protected Text = @Text$
Protected Lang = Len(Text$)
Protected Brush = CreateSolidBrush_(Farbe)
SelectObject_(DC, FontID)
SetTextCharacterExtra_(DC, 2) ;Zeichen-Abstand
SetBkMode_(DC, #TRANSPARENT)
SetTextAlign_(DC, #TA_NOUPDATECP)
BeginPath_(DC)
TextOut_(DC, x, y, Text, Lang)
EndPath_(DC)
SelectObject_(DC, Brush)
StrokeAndFillPath_(DC)
DeleteObject_(Brush)
SetTextCharacterExtra_(DC, oldspacing)
EndProcedure
;- Init´s
ImgFile$ = "Blocks1.bmp"
BaseImgID = LoadImage(0, ImgFile$)
; Win_MinB=500
; Win_MinT=180
; Win_Upd(1) ;get WinPos & -Size(last Session)
Win_X = 10 : Win_Y = 10 : Win_B = 500 : Win_T = 180
WinNr = 1
WinID = OpenWindow(WinNr, Win_X, Win_Y, Win_B, Win_T, "Steine 99Sec´s", #PB_Window_SystemMenu|#PB_Window_SizeGadget)
;CreateGadgetList(WinID) <-- updated by PB_SrcUpd Vers. 9303b
UseGadgetList(WinID)
ImageGadget(1, 0, 0, ImageWidth(0), ImageHeight(0), BaseImgID)
FontID = LoadFont(1, #FontName, #FontSize, #PB_Font_Bold)
;- erstmal die Ziffern-Bildchen aufbauen
For Stein = 1 To #Steine
Stein$ = Str(Stein) ;Stein-Beschriftung
CreateImage(Stein, #Size, #Size)
DC = StartDrawing(ImageOutput(Stein))
Box(0, 0, #Size, #Size, #White) ;Schrift-Hintergrund einweissen
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID)
xPos = (#Size - TextWidth(Stein$)) / 2 ;Schrift horizontal mittig auf´n Stein
yPos = (#Size - TextHeight(Stein$)) / 2 - 2 ;auch vertikal
DrawTextOutline(DC, xPos , yPos, Stein$, FontID, #White) ;Schrift nur als Zeichen-Umrahmung
;DrawText(xPos ,yPos,Stein$,#Black,#White) ;volle Schrift
StopDrawing()
StartDrawing(WindowOutput(WinNr))
DrawImage(ImageID(Stein), x, y)
x + #Size ;Position-Pointer auf nächsten Stein setzen
If x>#Size * 9
x = 0
y + #Size
EndIf
Next
; Repeat
; Event = WaitWindowEvent()
; Until Event = #PB_Event_CloseWindow
;- Ziffern-Bildchen in´s HauptBild einschmelzen
x = 0 : y = 0 ;Position-Pointer reseten
StartDrawing(ImageOutput(0))
For Stein = 1 To #Steine
Stein$ = " " + Str(Stein) + " " ;für Suche in #WhiteStones
For x2 = 1 To #Size ;aktuellen Stein Pixelweise durchgehen:
For y2 = 1 To #Size
StartDrawing(ImageOutput(Stein))
Farbe = Point(x2 , y2) ;Schrift-Farbe holen
StopDrawing()
If Farbe = #Black ;nur schwarze Ziffern-Pixels umsetzen
StartDrawing(ImageOutput(0))
Farbe = Point(x + x2 , y + y2) ;Farbe Pixel HauptBild holen
Select #Mode
Case 1
r = 255 - Red(Farbe)
g = 255 - Green(Farbe)
b = 255 - Blue(Farbe)
Farbe = RGB(r, g, b)
Case 2
r = Red(Farbe) - 128 : If r<0 : r + 255 : EndIf
g = Red(Farbe) - 128 : If g<0 : g + 255 : EndIf
b = Red(Farbe) - 128 : If b<0 : b + 255 : EndIf
Farbe = RGB(r, g, b)
Case 3
;Farbe = ImageTransparenz(Farbe, #Black)
Default
If FindString(#WhiteStones, Stein$, 1)
Farbe = #White
Else
Farbe = #Black
EndIf
EndSelect
Plot(x + x2, y + y2, Farbe)
StopDrawing()
EndIf
Next
Next
BaseImgID = ImageID(0)
SetGadgetState(1, BaseImgID) ;aktuellen Stein darstellen
x + #Size ;Position-Pointer auf nächsten Stein setzen
If x>#Size * 9
x = 0
y + #Size
EndIf
Next
RenameFile(ImgFile$, ImgFile$ + ".BAK") ;Sicherheits-Kopie aufbauen
SaveImage(0, ImgFile$)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
;Win_Upd(9) ;store WinPos & -Size
; updated durch Prg. PB_SrcUpd Vers. 9303b am 07.06.2009, 13:49h
Gruss SiBru