![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 12.04.2009
Beiträge: 52
|
Ich bin nicht so bewandert im Zeichnen
und hätte da mal eine ganz banale Frage: Wie bekomme ich ein Bild auf einen Dialog ? Mit einem normalen Fenster klappt das ja auch : Code:
bild& = @Create("hNewPic", 100, 100, RGB(0,0,0))
DrawSizedPic bild&, 10, 50 - 200, 100; 1
Wenn es geht, kann man da auch noch einen Rahmen ähnlich wie bei TBox drum herum machen ? |
|
|
|
|
|
|
#2 (Direktlink) |
|
Stammuser
![]() Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
|
Mit "StartPaint Handle&" und "EndPaint". Um's Neuzeichnen musst Du dich dann aber selbst kümmern.
Code:
Dialog% = @Create("Dialog", %hWnd, "Test", 0, 0, 320, 200)
StartPaint Dialog%
'Zeichenfunktionen
EndPaint
Gruß Jonathan
__________________
ASUS K50IJ Notebook --- Pentium T4500 2x 2,4GHz --- 4GB RAM --- 64GB m4 SSD --- Win 7 Home Premium 32-Bit --- XProfan X2.0b Das Schönste am Programmieren ist immernoch die Fehlersuche Dieser Beitrag besteht zu 100% aus Recycling-Bytes.
|
|
|
|
|
|
#3 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 12.04.2009
Beiträge: 52
|
Danke, so funktioniert es.
Dann dürfte mir vorerst ein simples <SetAutoPaint 1> genügen, da das Bild ja nicht verschoben wird. |
|
|
|
|
|
#4 (Direktlink) | |
|
Stammuser
![]() Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
|
Zitat:
Gruß Jonathan
__________________
ASUS K50IJ Notebook --- Pentium T4500 2x 2,4GHz --- 4GB RAM --- 64GB m4 SSD --- Win 7 Home Premium 32-Bit --- XProfan X2.0b Das Schönste am Programmieren ist immernoch die Fehlersuche Dieser Beitrag besteht zu 100% aus Recycling-Bytes.
|
|
|
|
|
|
|
#5 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 15.02.2011
Beiträge: 106
|
Es geht auch so:
Code:
Declare hdlg&,hbmp&,bild&
Proc Male
Startpaint bild&
UsePen Rnd(5),Rnd(20),RGB(Rnd(255),Rnd(255),Rnd(255))
Line Rnd(40),Rnd(40) - 90,90
EndPaint
SendMessage(hbmp&,$172,0,bild&) 'STM_SETIMAGE
EndProc
Cls
hdlg& = Create("Dialog",%hwnd,"Bild malen",410,490,400,400)
bild& = @Create("hNewPic", 100, 100, RGB(0,200,0))
hbmp& = Create("Bitmap",hdlg&,bild&,2,2)
Randomize
While 1
WaitInput
Male
Wend
__________________
Anhören lohnt sich wuestensand.info |
|
|
|
|
|
|
#6 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Schöne Vereinfachung, geht auch. Aber Experten werden jetzt bemängeln, daß Du zu oft malst. WaitInput wird zum Beispiel auch bei einem einfachen Mausklick verlassen und da ist Malen gar nicht notwendig.
Set("AutoPaint", 1) nach der Erstellung des Dialoges und dann Case %wmPaint : Male beschränkt die Malaktivitäten auf das Notwendige. Wäre auf jeden Fall zum empfehlen, wenn mehr als nur ein einfacher Strich gemalt werden muß. Gruß Volkmar |
|
|
|
|
|
#7 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 15.02.2011
Beiträge: 106
|
Das sollte nur als Beispiel dienen. Den Einsatz der Male-Proc sollte man dann nach eigenem Ermessen einsetzen...
Das ist kein "Ersatz" für Set("AutoPaint",...) , sondern eine Malmöglichkeit, bei der man sich überhaupt nicht mehr ums Neuzeichnen kümmern muß. Quasi wie Malen auf dem Hauptfenster.
__________________
Anhören lohnt sich wuestensand.info |
|
|
|
|
|
#8 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Aber, wie Volkmar schon sagte: Wird unter Umständen öfters mal neu gemalt als nötig. Bloss keinen Timer verwenden.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#9 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 12.04.2009
Beiträge: 52
|
Das wird sowieso für mich als "Nicht-Maler" schwierig.
Ich wollte eigentlich den Purebasic-Source code von Droopy's Lib für die 7Segementanzeige in XProfan umsetzen. Der Code für PB gibt es ja frei. Ich hab auch noch nicht den richtigen Plan, die Datas optimal umzusetzen. Evtl. hat ja jemand noch Ideen. Code:
;->7LedGadget Create a Seven Segment Led Gadget
;->7LedGadget (Idea from Localmotion34) <BR> <IMG SRC="7LedGadget.png">
;{/*
; OpenWindow(0,0,0,580,290,"7 Segment Led demo",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
; SLed1=SevenSegmentLed(10,10,220,260,8404992,16776960,10485760)
; SLed2=SevenSegmentLed(250,10,110,130,4227072,65280,4210688)
; SLed3=SevenSegmentLed(400,10,55,65,1118481,255,0)
; SLed4=SevenSegmentLed(455,10,55,65,1118481,255,0)
; SLed5=SevenSegmentLed(510,10,55,65,1118481,255,0)
; SLed6=SevenSegmentLed(400,110,150,165,1,65535,0)
;
; AddWindowTimer(0,1,300)
; AddWindowTimer(0,2,700)
; AddWindowTimer(0,3,10)
; AddWindowTimer(0,4,700)
;
; Repeat
;
; evt=WaitWindowEvent()
;
; If evt= #PB_Event_Timer
; Select EventTimer()
; Case 1
; ; 0-9
; temp=SevenSegmentLedGet(SLed1)+1
; If temp=10 : temp=0 : EndIf
; SevenSegmentLedSet(SLed1,temp,0)
; Case 2
; ; Random dot and value
; SevenSegmentLedSet(SLed2,Random(16)-1,Random(1))
; Case 3
; ; 0 - 9999
; c+1 : If c=1000 : c=0 : EndIf
; tc.s=Str(c)
; tc=RSet(tc,3,"0")
; SevenSegmentLedSet(SLed3,Val(Mid(tc,1,1)),0)
; SevenSegmentLedSet(SLed4,Val(Mid(tc,2,1)),0)
; SevenSegmentLedSet(SLed5,Val(Mid(tc,3,1)),0)
; Case 4
; ; Blink 0
; If SevenSegmentLedGet(SLed6)=0
; SevenSegmentLedSet(SLed6,-1,0)
; Else
; SevenSegmentLedSet(SLed6,0,0)
; EndIf
;
;
; EndSelect
; EndIf
;
; Until evt=#PB_Event_CloseWindow
;}
Structure SevenSegmentLed
x.l
y.l
width.l
height.l
Image.l
Gadget.l
Value.l
point.l
color1.l
color2.l
BackgroundColor.l
EndStructure
;{ Datasection
DataSection
Led:
; Segment a
Data.l 1,1,1,-1,6,0,1,1,-1,1,-6,0,-1,-1,0,0
; Segment g
Data.l 1,6,1,-1,6,0,1,1,-1,1,-6,0,-1,-1,0,0
; Segment d
Data.l 1,11,1,-1,6,0,1,1,-1,1,-6,0,-1,-1,0,0
; Segment f
Data.l 1,1,1,1,0,3,-1,1,-1,-1,0,-3,1,-1,0,0
; Segment b
Data.l 9,1,1,1,0,3,-1,1,-1,-1,0,-3,1,-1,0,0
; Segment e
Data.l 1,6,1,1,0,3,-1,1,-1,-1,0,-3,1,-1,0,0
; Segment c
Data.l 9,6,1,1,0,3,-1,1,-1,-1,0,-3,1,-1,0,0
; Point
Data.l 10,11,1,1,-1,1,-1,-1,1,-1,0,0
; Fin dessin Leds
Data.l 0,0
SegmentA:
Data.l 5,1
SegmentB:
Data.l 9,3
SegmentC:
Data.l 9,8
SegmentD:
Data.l 5,11
SegmentE:
Data.l 1,9
SegmentF:
Data.l 1,4
SegmentG:
Data.l 5,6
SegmentP:
Data.l 10,12
EndDataSection
;}
ProcedureDLL SevenSegmentLed(x,y,width,height,color1,color2,BackgroundColor) ; Initialise 7 segment gadget
;// Return gadget id
; Initialise the LinkedList the first call
Static Init
If Init=0
Global NewList SevenSegmentLedLList.SevenSegmentLed()
EndIf
Init=1
; Fill the Structure
AddElement(SevenSegmentLedLList())
SevenSegmentLedLList()\x=x
SevenSegmentLedLList()\y=y
SevenSegmentLedLList()\width=width
SevenSegmentLedLList()\height=height
SevenSegmentLedLList()\color1=color1
SevenSegmentLedLList()\color2=color2
SevenSegmentLedLList()\BackgroundColor=BackgroundColor
SevenSegmentLedLList()\Image=CreateImage(#PB_Any,width,height)
PWidth.f=SevenSegmentLedLList()\width/11
PHeight.f=SevenSegmentLedLList()\height/13
;/ Dessine les Leds
StartDrawing(ImageOutput(SevenSegmentLedLList()\Image))
Box(0,0,SevenSegmentLedLList()\width,SevenSegmentLedLList()\height,SevenSegmentLedLList()\BackgroundColor)
Restore Led
Repeat
Read x
Read y
If x=0 And y=0 : Break : EndIf
Repeat
Read a
Read b
If a=0 And b=0 : Break : EndIf
H=b*PHeight
w=a*PWidth
If H=0 : H=1 : EndIf
If w=0 : w=1 : EndIf
Line(x*PWidth,y*PHeight,w,H,color1)
x=x+a : y=y+b
ForEver
ForEver
StopDrawing()
; create the gadget & show the image
SevenSegmentLedLList()\Gadget=ImageGadget(#PB_Any,SevenSegmentLedLList()\x,SevenSegmentLedLList()\y,width,height,ImageID(SevenSegmentLedLList()\Image),#PB_Image_Border)
; Return the gadget id
ProcedureReturn ListIndex(SevenSegmentLedLList())
EndProcedure
ProcedureDLL SevenSegmentLedSet(Id,Value,dot) ; Set value and dot state
;// Set value from -1 to 15
;// -1 power off 7 segments
;// value = 0/15 (10=A 11=B 12=C 13=D 14=E 15=F)
;// Dot #true=on / #false=off
SelectElement(SevenSegmentLedLList(),Id)
SevenSegmentLedLList()\Value=Value
SevenSegmentLedLList()\point=dot
PWidth.f=SevenSegmentLedLList()\width/11
PHeight.f=SevenSegmentLedLList()\height/13
;/ Allume les Segments
StartDrawing(ImageOutput(SevenSegmentLedLList()\Image))
; Eteind les segments
Restore SegmentA
For n=1 To 8
Read a
Read b
FillArea(a*PWidth,b*PHeight,SevenSegmentLedLList()\color1,SevenSegmentLedLList()\BackgroundColor)
Next
Select Value
Case -1
temp.s=""
Case 0
temp.s="abcdef"
Case 1
temp="bc"
Case 2
temp="abged"
Case 3
temp="abgcd"
Case 4
temp="fbgc"
Case 5
temp="afgcd"
Case 6
temp="afedgc"
Case 7
temp="abc"
Case 8
temp="abcdefg"
Case 9
temp="abcdfg"
Case 10 ; A
temp="abcefg"
Case 11 ; b
temp="fgcde"
Case 12 ; c
temp="ged"
Case 13 ; d
temp="bcdeg"
Case 14 ; E
temp="afged"
Case 15 ; F
temp="afeg"
EndSelect
; Gestion du point
If SevenSegmentLedLList()\point=1
temp+"p"
EndIf
For n=1 To Len(temp)
Select Mid(temp,n,1)
Case "a"
Restore SegmentA
Case "b"
Restore SegmentB
Case "c"
Restore SegmentC
Case "d"
Restore SegmentD
Case "e"
Restore SegmentE
Case "f"
Restore SegmentF
Case "g"
Restore SegmentG
Case "p"
Restore SegmentP
EndSelect
Read a
Read b
FillArea(a*PWidth,b*PHeight,SevenSegmentLedLList()\color1,SevenSegmentLedLList()\color2)
Next
StopDrawing()
SetGadgetState(SevenSegmentLedLList()\Gadget,ImageID(SevenSegmentLedLList()\Image))
EndProcedure
ProcedureDLL SevenSegmentLedGet(Id) ; Get the value of the SevenSegmentLed Gadget .
SelectElement(SevenSegmentLedLList(),Id)
ProcedureReturn SevenSegmentLedLList()\Value
EndProcedure
|
|
|
|
|
|
#10 (Direktlink) |
|
Stammuser
![]() Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
|
Da kann man doch eine Textdatei mit den Daten erstellen und diese beim Programmstart in ein Array laden. Geht ganz einfach
Gruß Jonathan
__________________
ASUS K50IJ Notebook --- Pentium T4500 2x 2,4GHz --- 4GB RAM --- 64GB m4 SSD --- Win 7 Home Premium 32-Bit --- XProfan X2.0b Das Schönste am Programmieren ist immernoch die Fehlersuche Dieser Beitrag besteht zu 100% aus Recycling-Bytes.
|
|
|
|
|
|
|
#11 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Ich würde das so ungefähr angehen
Code:
Declare Data%[7,3]
'Segment A
Data%[0,0] = 2
Data%[0,1] = 0
Data%[0,2] = 8
Data%[0,3] = 0
'Segment B
Data%[1,0] = 10
Data%[1,1] = 2
Data%[1,2] = 10
Data%[1,3] = 8
'Segment C
Data%[2,0] = 10
Data%[2,1] = 12
Data%[2,2] = 10
Data%[2,3] = 18
'Segment D
Data%[3,0] = 2
Data%[3,1] = 20
Data%[3,2] = 8
Data%[3,3] = 20
'Segment E
Data%[4,0] = 0
Data%[4,1] = 12
Data%[4,2] = 0
Data%[4,3] = 18
'Segment F
Data%[5,0] = 0
Data%[5,1] = 2
Data%[5,2] = 0
Data%[5,3] = 8
'Segment G
Data%[6,0] = 2
Data%[6,1] = 10
Data%[6,2] = 8
Data%[6,3] = 10
'Segment H bezeichnet hier den Dezimalpunkt
Data%[7,0] = 14
Data%[7,1] = 18
Data%[7,2] = 14
Data%[7,3] = 21
Proc MaleZiffer
Parameters Code$, X%, Y%
Declare Feld%
WhileLoop Len(Code$)
Select Mid$(Code$, &Loop, 1)
CaseOf "A"
Line X% + Data%[0,0], Y% + Data%[0,1] - X% + Data%[0,2], Y% + Data%[0,3]
CaseOf "B"
Line X% + Data%[1,0], Y% + Data%[1,1] - X% + Data%[1,2], Y% + Data%[1,3]
CaseOf "C"
Line X% + Data%[2,0], Y% + Data%[2,1] - X% + Data%[2,2], Y% + Data%[2,3]
CaseOf "D"
Line X% + Data%[3,0], Y% + Data%[3,1] - X% + Data%[3,2], Y% + Data%[3,3]
CaseOf "E"
Line X% + Data%[4,0], Y% + Data%[4,1] - X% + Data%[4,2], Y% + Data%[4,3]
CaseOf "F"
Line X% + Data%[5,0], Y% + Data%[5,1] - X% + Data%[5,2], Y% + Data%[5,3]
CaseOf "G"
Line X% + Data%[6,0], Y% + Data%[6,1] - X% + Data%[6,2], Y% + Data%[6,3]
CaseOf "H"
Line X% + Data%[7,0], Y% + Data%[7,1] - X% + Data%[7,2], Y% + Data%[7,3]
EndSelect
EndWhile
EndProc
CLS
UsePen 0, 2, RGB(0, 64, 196)
MaleZiffer "BC", 15, 5
MaleZiffer "ABCDGH", 32, 5
MaleZiffer "BCGF", 49, 5
MaleZiffer "ABGDE", 66, 5
WaitInput
|
|
|
|
|
|
#12 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Warum nicht Byte, oder besser Long?
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#13 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Statt dem Array einfach einen Bereich mit Bytefolge? Da habe ich dran gedacht, als ich fertig war
Gruß Volkmar |
|
|
|
|
|
#14 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Und hier das Ganze nomal ohne Array, einfach als Folge von Longs in einer Bereichsvariablen:
Code:
Declare Data#
DIM Data#, 128
'Segment A
Long Data#, 0 = 2
Long Data#, 4 = 0
Long Data#, 8 = 8
Long Data#, 12 = 0
'Segment B
Long Data#, 16 = 10
Long Data#, 20 = 2
Long Data#, 24 = 10
Long Data#, 28 = 8
'Segment C
Long Data#, 32 = 10
Long Data#, 36 = 12
Long Data#, 40 = 10
Long Data#, 44 = 18
'Segment D
Long Data#, 48 = 2
Long Data#, 52 = 20
Long Data#, 56 = 8
Long Data#, 60 = 20
'Segment E
Long Data#, 64 = 0
Long Data#, 68 = 12
Long Data#, 72 = 0
Long Data#, 76 = 18
'Segment F
Long Data#, 80 = 0
Long Data#, 84 = 2
Long Data#, 88 = 0
Long Data#, 92 = 8
'Segment G
Long Data#, 96 = 2
Long Data#, 100 = 10
Long Data#, 104 = 8
Long Data#, 108 = 10
'Segment H bezeichnet hier den Dezimalpunkt
Long Data#, 112 = 14
Long Data#, 116 = 18
Long Data#, 120 = 14
Long Data#, 124 = 21
Proc MaleZiffer
Parameters Code$, X%, Y%
Declare Feld%
WhileLoop Len(Code$)
Select Mid$(Code$, &Loop, 1)
CaseOf "A"
Line X% + Long(Data#, 0), Y% + Long(Data#, 4) - X% + Long(Data#, 8), Y% + Long(Data#, 12)
CaseOf "B"
Line X% + Long(Data#, 16), Y% + Long(Data#, 20) - X% + Long(Data#, 24), Y% + Long(Data#, 28)
CaseOf "C"
Line X% + Long(Data#, 32), Y% + Long(Data#, 36) - X% + Long(Data#, 40), Y% + Long(Data#, 44)
CaseOf "D"
Line X% + Long(Data#, 48), Y% + Long(Data#, 52) - X% + Long(Data#, 56), Y% + Long(Data#, 60)
CaseOf "E"
Line X% + Long(Data#, 64), Y% + Long(Data#, 68) - X% + Long(Data#, 72), Y% + Long(Data#, 76)
CaseOf "F"
Line X% + Long(Data#, 80), Y% + Long(Data#, 84) - X% + Long(Data#, 88), Y% + Long(Data#, 92)
CaseOf "G"
Line X% + Long(Data#, 96), Y% + Long(Data#, 100) - X% + Long(Data#, 104), Y% + Long(Data#, 108)
CaseOf "H"
Line X% + Long(Data#, 112), Y% + Long(Data#, 116) - X% + Long(Data#, 120), Y% + Long(Data#, 124)
EndSelect
EndWhile
EndProc
CLS
UsePen 0, 2, RGB(0, 64, 196)
MaleZiffer "BC", 15, 5
MaleZiffer "ABCDGH", 32, 5
MaleZiffer "BCGF", 49, 5
MaleZiffer "ABGDE", 66, 5
WaitInput
|
|
|
|
|
|
#15 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 12.04.2009
Beiträge: 52
|
Danke für die tatkräftige Unterstützung.
|
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Dialog für Wechseldatenträger | Wiii | Hardware - Problemlösungen | 4 | 28.11.2008 10:28 |
| Titel für Dialog ändern | Frau GAst | C/C++, Visual C++, Visual C++.NET | 0 | 24.05.2006 17:48 |
| Bit Map im Dialog | Der_Fremde | C/C++, Visual C++, Visual C++.NET | 0 | 28.12.2005 16:42 |
| Webdienst-Dialog abstellen | B.Fischer | Windows XP | 2 | 12.12.2004 10:18 |
| andockbar dialog | studilm | C/C++, Visual C++, Visual C++.NET | 0 | 02.11.2004 16:11 |