Code: Alles auswählen
Enumeration
#WINDOW_MAIN
#CAN_MESSAGE
#CAN_MESSAGERECBYTESString
#CAN_MESSAGERECBYTESText
#SELECTED_CAN_MESSAGE
#TRACER
#TRACERList
EndEnumeration
Structure MessageAttributes
Count.i
Period.w
Datalength.a
Databyte.s[8]
EndStructure
Dim CAN_Message$(7)
Dim CAN_Message(17)
Dim SelectedMessage(17)
Dim ButtonGadgetNumber(13)
NewMap Message.MessageAttributes()
Procedure createCANMessage(Array GadgetNumber(1), PosX, PosY, MaxWidth, AmountOfDataBytes, Title$, Array DataByteDesignation$(1))
Protected ID$ = "ID"
Protected Length = (MaxWidth-35)/(AmountOfDataBytes+1)
Protected n
;textgadgets
; TextGadget of the title
GadgetNumber(9) = TextGadget(#PB_Any, PosX, PosY, Len(Title$)*11, 20, Title$)
; TextGadget of ID
TextGadget(#PB_Any, PosX,20+PosY, Length, 20, ID$,#PB_Text_Center)
; TextGadget of D0...D7
For n=0 To AmountOfDataBytes-1
GadgetNumber(10+n) = TextGadget(#PB_Any, ((n+1)*Length)+15+PosX, 20+PosY, Length, 20, DataByteDesignation$(n), #PB_Text_Center)
Next
;stringgadgets
; GadgetNumber(8) => StringGadget# of ID
GadgetNumber(8) = StringGadget(#PB_Any, PosX, 40+PosY, Length, 20, "000", #PB_Text_Center|#SS_SUNKEN)
; GadgetNumber(0)...GadgetNumber(7) => StringGadget# of D0...D7
For n=0 To AmountOfDataBytes-1
GadgetNumber(n) = StringGadget(#PB_Any, ((n+1)*Length)+15+PosX, 40+PosY, Length, 20, "0" , #PB_Text_Center|#SS_SUNKEN)
Next
EndProcedure
Procedure createButton(Array GadgetNumber(1), PosX, PosY, Width, Height, Title$)
Protected LengthOfText = Len(Title$)*11
Protected HeightOfString = Height-30
Protected XOfString = ((LengthOfText-Width)/2)
TextGadget(#PB_Any, PosX, PosY, LengthOfText, 20, Title$, #PB_Text_Center)
GadgetNumber(0) = StringGadget(#PB_Any, XOfString+PosX, 20+PosY, Width, HeightOfString, "0", #PB_Text_Center|#SS_SUNKEN)
GadgetNumber(1) = ButtonGadget(#PB_Any, XOfString+PosX, Height-10+PosY, Width, 10,"")
SetGadgetColor(GadgetNumber(0), #PB_Gadget_BackColor, $00CCFF)
EndProcedure
Procedure createMainWindow()
Protected WindowWidth = 1600
Protected WindowHeight = 986
Protected CreateCANHeight = 60
Protected FrameCANPosX = WindowWidth-780
Protected FrameCANPosY = 10
Protected FrameCANWidth = WindowWidth-(10+FrameCANPosX)
Protected FrameCANHeight = 30+CreateCANHeight+10
Protected HalfFrameCANWidth = FrameCANPosX+(FrameCANWidth/2)
Protected FrameSelectedPosX = FrameCANPosX
Protected FrameSelectedPosY = FrameCANPosY+FrameCANHeight+10
Protected FrameSelectedWidth = WindowWidth-(10+FrameSelectedPosX)
Protected FrameSelectedHeight = 20+CreateCANHeight+10
Protected TracerPosX = FrameCANPosX
Protected TracerPosY = FrameSelectedPosY+FrameSelectedHeight+10
Protected TracerWidth = WindowWidth-(10+TracerPosX)
Protected TracerHeight = WindowHeight-(10+TracerPosY)
Protected ListPosX = TracerPosX+10
Protected ListPosY = TracerPosY+15
Protected ListWidth = TracerWidth-20
Protected ListHeight = TracerHeight-25
Protected Quotient.f = ListWidth/100
Protected ColumnWidth0 = Quotient* 8.77
Protected ColumnWidth1 = Quotient*12.28
Protected ColumnWidth2 = Quotient*10.53
Protected ColumnWidth3 = Quotient*12.63
Protected ColumnWidthRest = ListWidth-(ColumnWidth0 + ColumnWidth1 + ColumnWidth2 + ColumnWidth3)
Shared CAN_Message()
Shared SelectedMessage()
Shared CAN_Message$()
Shared ButtonGadgetNumber()
; window
If OpenWindow(#WINDOW_MAIN, 0, 0, WindowWidth, WindowHeight, "Beispiel", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_SizeGadget)
; CAN_MESSAGE
Frame3DGadget(#CAN_MESSAGE, FrameCANPosX, FrameCANPosY, FrameCANWidth, FrameCANHeight, "CAN_MESSAGE")
createCANMessage(CAN_Message(), 10+FrameCANPosX, 30+FrameCANPosY, FrameCANWidth, 8, "", CAN_Message$())
; textgadget for CAN_Message
TextGadget(#CAN_MESSAGERECBYTESText, HalfFrameCANWidth-100, 20+FrameCANPosY, 100, 20, "Received Bytes:", #PB_Text_Center)
; stringgadget for CAN_Message
StringGadget(#CAN_MESSAGERECBYTESString, HalfFrameCANWidth, 20+FrameCANPosY, 75, 20, " " , #PB_Text_Center | #SS_SUNKEN)
; SELECTED_CAN_MESSAGE
Frame3DGadget(#SELECTED_CAN_MESSAGE, FrameSelectedPosX, FrameSelectedPosY, FrameSelectedWidth, FrameSelectedHeight, "SELECTED_CAN_MESSAGE")
createCANMessage(SelectedMessage(), 10+FrameSelectedPosX, 20+FrameSelectedPosY, FrameSelectedWidth, 8, " ", CAN_Message$())
; TRACER
Frame3DGadget(#TRACER, TracerPosX, TracerPosY, TracerWidth, TracerHeight, "TRACER")
ListIconGadget(#TRACERList, ListPosX, ListPosY, ListWidth, ListHeight, "No.", ColumnWidth0, #PB_ListIcon_FullRowSelect | #PB_ListIcon_GridLines)
AddGadgetColumn(#TRACERList,1,"Time (ms)",ColumnWidth1)
AddGadgetColumn(#TRACERList,2,"Identifier",ColumnWidth2)
AddGadgetColumn(#TRACERList,3,"Datalength",ColumnWidth3)
AddGadgetColumn(#TRACERList,4, "Data" ,ColumnWidthRest-4)
ButtonGadgetNumber(0) = ButtonGadget(#PB_Any,10, 10,70,20,"Button 43F",#PB_Text_Center)
ButtonGadgetNumber(1) = ButtonGadget(#PB_Any,10, 50,70,20,"Button 53F",#PB_Text_Center)
ButtonGadgetNumber(2) = ButtonGadget(#PB_Any,10, 90,70,20,"Button 63F",#PB_Text_Center)
ButtonGadgetNumber(3) = ButtonGadget(#PB_Any,10,130,70,20,"Button 7FF",#PB_Text_Center)
ButtonGadgetNumber(4) = ButtonGadget(#PB_Any,10,170,70,20,"Button 03F",#PB_Text_Center)
ButtonGadgetNumber(5) = ButtonGadget(#PB_Any,10,210,70,20,"Button 743",#PB_Text_Center)
ButtonGadgetNumber(6) = ButtonGadget(#PB_Any,10,250,70,20,"Button 753",#PB_Text_Center)
ButtonGadgetNumber(7) = ButtonGadget(#PB_Any,10,290,70,20,"Button 763",#PB_Text_Center)
ButtonGadgetNumber(8) = ButtonGadget(#PB_Any,10,330,70,20,"Button 703",#PB_Text_Center)
ButtonGadgetNumber(9) = ButtonGadget(#PB_Any,10,370,70,20,"Button 02F",#PB_Text_Center)
ButtonGadgetNumber(10) = ButtonGadget(#PB_Any,10,410,70,20,"Button 01F",#PB_Text_Center)
ButtonGadgetNumber(11) = ButtonGadget(#PB_Any,10,450,70,20,"Button 010",#PB_Text_Center)
ButtonGadgetNumber(12) = ButtonGadget(#PB_Any,10,490,70,20,"Button 013",#PB_Text_Center)
ButtonGadgetNumber(13) = ButtonGadget(#PB_Any,10,530,70,20,"Button 7EF",#PB_Text_Center)
Else
MessageRequester("ERROR!","Can't open Window!",#PB_Window_ScreenCentered|#PB_MessageRequester_Ok)
EndIf
EndProcedure
Procedure setMonitor(Map Message.MessageAttributes(), Identifier$)
Protected n
Protected AmountOfItems
For n=0 To 7
Message(Identifier$)\Databyte[n] = "DB"+Str(n)
Next
Message()\Datalength = 8
AmountOfItems = CountGadgetItems(#TRACERList)
;ClearGadgetItems(#TRACERList)
SetGadgetItemText(#TRACERList,-1,"Count",0)
SetGadgetItemText(#TRACERList,-1,"Period(ms)",1)
Debug "GetGadgetItemData(#TRACERList, 0) = " + Str(GetGadgetItemData(#TRACERList, 0)) ; hier liefert GetGadgetItemData immer 0
For n=0 To AmountOfItems
If GetGadgetItemData(#TRACERList, n) = Val( Chr(36) + Identifier$) ; schau, ob eintrag mit Identifier$ schon existiert
Message(Identifier$)\Count+1
SetGadgetItemText(#TRACERList, n, Str(Message(Identifier$)\Count), 0) ; update des Eintrags
SetGadgetItemText(#TRACERList, n, Str(Message()\Period), 1)
SetGadgetItemText(#TRACERList, n, Identifier$, 2)
SetGadgetItemText(#TRACERList, n, Str(Message()\Datalength), 3)
SetGadgetItemText(#TRACERList, n, Message()\Databyte[0] + " " + Message()\Databyte[1] + " " + Message()\Databyte[2] + " " + Message()\Databyte[3] + " " + Message()\Databyte[4] + " " + Message()\Databyte[5] + " " + Message()\Databyte[6] + " " + Message()\Databyte[7], 4)
ElseIf AmountOfItems-n = 0 ; Eintrag existiert noch nicht --> erstelle eintrag mit dem Identifier$
Message(Identifier$)\Count+1
AddGadgetItem(#TRACERList, -1, Str(Message(Identifier$)\Count) + Chr(10) + " " + Str(Message()\Period) + Chr(10) + " " + Identifier$ + Chr(10) + " " + Str(Message()\Datalength) + Chr(10) + Message()\Databyte[0] + " " + Message()\Databyte[1] + " " + Message()\Databyte[2] + " " + Message()\Databyte[3] + " " + Message()\Databyte[4] + " " + Message()\Databyte[5] + " " + Message()\Databyte[6] + " " + Message()\Databyte[7] + Chr(10))
SetGadgetItemData(#TRACERList, -1, Val(Chr(36) + Identifier$)) ; speichere Identifier$ zum späteren wiederfinden (in if-Bedingung)
EndIf
Next
EndProcedure
createMainWindow()
Repeat ; eventloop
Event = WaitWindowEvent(10)
EventWindow = EventWindow()
EventGadget = EventGadget()
Select Event
Case #PB_Event_Gadget
setMonitor(Message(),"53F")
Case #PB_Event_CloseWindow
EXIT = 1
EndSelect
Until EXIT
End
Gruss alDo
//EDIT: Formatierung des Codes angepasst