Hallo!
Wie versprochen kommt hier die Rückmeldung.
Der Tip von Green Snake es mit ProgramParameter() zu versuchen war goldrichtig.
Damit ihr seht, wozu ich die Info brauchte, habe ich den Quellcode drangehängt.
Das Programm dient dem Vergleichen zweier Files. Es kann, deshalb meine Frage, mit Rechtsklick und 'Öffnen mit' auf eines der beiden zu vergleichenden Files gestartet werden.
Bitte nicht zu sehr zerreißen, da Erstlingswerk.
Es gibt sicherliche sehr viele Möglichkeiten, das Programm anders zu gestalten, doch es erledigt ersteinmal seine Aufgabe.
DeltaG
Code: Alles auswählen
IncludeFile "IncludeFile.pb"
Global OK1, OK2
Global Sector
Global FileLenght1, FileLenght2
Global FileName1$, FileName2$
Global File1$, File2$
Global FilePath1$, FilePath2$
Global Dim df1$(256)
Global Dim df2$(256)
Global Home$="C:\"
Procedure GetFile1()
SetGadgetText(#String_1, "")
SetGadgetText(#Text_1, "Filesize: ")
If FilePath1$
Home$=FilePath1$
ElseIf FilePath2$
Home$=FilePath2$
Else
Home$="C:\"
EndIf
File1$ = OpenFileRequester("Select File 1", Home$, "Alle Dateien (*.*)|*.*", 2)
If File1$
OK1=ReadFile(1, File1$)
If OK1
FileName1$=GetFilePart(File1$)
FilePath1$=GetPathPart(File1$)
SetGadgetText(#String_1, FileName1$)
FileLenght1=Lof(1)-1
TGFcolor=$000000
If FileLenght1+1=0
TGFcolor=$0000FF
EndIf
SetGadgetColor(#Text_1, #PB_Gadget_FrontColor, TGFcolor)
SetGadgetText(#Text_1, "Filesize: " + RSet(Hex(FileLenght1+1),8,"0")+ " Byte")
Sector=0
EndIf
EndIf
EndProcedure
Procedure GetFile2()
SetGadgetText(#String_2, "")
SetGadgetText(#Text_2, "Filesize: ")
If FilePath2$
Home$=FilePath2$
ElseIf FilePath1$
Home$=FilePath1$
Else
Home$="C:\"
EndIf
File2$ = OpenFileRequester("Select File 2", Home$, "Alle Dateien (*.*)|*.*", 2)
If File2$
OK2=ReadFile(2, File2$)
If OK2
FileName2$=GetFilePart(File2$)
FilePath2$=GetPathPart(File2$)
SetGadgetText(#String_2, FileName2$)
FileLenght2=Lof(2)-1
TGFcolor=$000000
If FileLenght2+1=0
TGFcolor=$0000FF
EndIf
SetGadgetColor(#Text_2, #PB_Gadget_FrontColor, TGFcolor)
SetGadgetText(#Text_2, "Filesize: " + RSet(Hex(FileLenght2+1),8,"0")+ " Byte")
EndIf
Sector=0
EndIf
EndProcedure
Procedure RedrawBox()
Box(14, 63, 352, 387, RGB(212,208,200))
Box(404, 63, 352, 387, RGB(212,208,200))
FrontColor($000000)
EndProcedure ; RedrawBox()
Procedure ShowPage()
If OK1; file 1 is selected, so we got something to show
FileSeek(1,Sector*256)
i=0
j=0
byte.c=0
Repeat
f1$= " "+RSet(Hex(i*8+256*Sector),8,"0")+": "
merk$=""
j=0
Repeat
byte=ReadByte(1)
df1$(i*8+j)=Chr(byte)
f1$=f1$+RSet(Hex(byte),2,"0")+" "
If byte<32
merk$=merk$+"."
Else
merk$=merk$+Chr(byte)
EndIf
INC j
Until j=8
f1$=f1$+" "+merk$+" "
DrawText(20, 64+i*12, f1$)
INC i
Until i=32
EndIf
If OK2; file 2 is selected, so we got something to show
FileSeek(2,Sector*256)
i=0
j=0
byte=0
Repeat
f2$= " "+RSet(Hex(i*8+256*Sector),8,"0")+": "
merk$=""
j=0
Repeat
byte=ReadByte(2)
df2$(i*8+j)=Chr(byte)
f2$=f2$+RSet(Hex(byte),2,"0")+" "
If byte<32
merk$=merk$+"."
Else
merk$=merk$+Chr(byte)
EndIf
INC j
Until j=8
f2$=f2$+" "+merk$+" "
DrawText(410, 64+i*12, f2$)
INC i
Until i=32
EndIf
EndProcedure ; ShowPage()
Procedure ShowDiff()
If OK1 And OK2; we got two files to compare
DrawingMode(2)
i=0
Repeat
j=0
Repeat
If df1$(i*8+j) <> df2$(i*8+j)
Box(110+j*21, 64+i*12,16,12)
Box(300+j*7, 64+i*12,7,12)
Box(500+j*21, 64+i*12,16,12)
Box(690+j*7, 64+i*12,7,12)
EndIf
INC j
Until j=8
INC i
Until i=32
DrawingMode(0)
EndIf
EndProcedure ; ShowDiff()
Procedure Compare()
If File1$=File2$
MessageRequester("Ooops...", "Please select two different files.", #MB_OK|#MB_ICONWARNING)
Else
INC Sector
FileSeek(1,Sector * 256)
FileSeek(2,Sector * 256)
i=(Sector)*256
If i<FileLenght1 And i<FileLenght2
If FileLenght1>FileLenght2
ProgressBarGadget(#ProgressBar_1, 10, 493, 750, 10, 0, FileLenght1/256)
Else
ProgressBarGadget(#ProgressBar_1, 10, 493, 750, 10, 0, FileLenght2/256)
EndIf
Repeat
byte=ReadByte(1)
SetGadgetState (#ProgressBar_1, i/256)
INC i
Until (byte <> ReadByte(2)) Or i>FileLenght1 Or i>FileLenght2
DEC i
Sector = Int (i/256 )
ShowPage()
ShowDiff()
SetGadgetState (#ProgressBar_1, 0)
EndIf
EndIf
EndProcedure ; Compare()
;---MAIN--------------------------------------------------------
Open_Window_1()
; Get Parameter if started via 'Öffnen mit'
If CountProgramParameters()
File1$ = ProgramParameter()
FilePath1$=GetPathPart(File1$)
FileName1$ = GetFilePart(File1$)
OK1=ReadFile(1, File1$)
SetGadgetText(#String_1, FileName1$)
FileLenght1=Lof(1)-1
TGFcolor=$000000
If FileLenght1+1=0
TGFcolor=$0000FF
EndIf
SetGadgetColor(#Text_1, #PB_Gadget_FrontColor, TGFcolor)
SetGadgetText(#Text_1, "Filesize: " + RSet(Hex(FileLenght1+1),8,"0")+ " Byte")
ShowPage()
EndIf
;- Main loop
Repeat
Event = WaitWindowEvent()
;- Repaint
If Event = #PB_Event_Repaint
ShowPage()
ShowDiff()
EndIf
;- Menu
If Event = #PB_Event_Menu
MenuID = EventMenu()
;- -Open
If MenuID = #MENU_1
If OK1; we already openend a file as file 1, so close it first
CloseFile(1)
OK1=0
EndIf
GetFile1()
If OK2; we already openend a file as file 2, so close it first
CloseFile(2)
OK2=0
EndIf
GetFile2()
If File1$=File2$ Or File1$="" Or File2$=""; just to make sure you noticed
MessageRequester("Ooops...", "Please select two different files.", #MB_OK|#MB_ICONWARNING)
RedrawBox()
EndIf
If OK1 And OK2; show the new files
ShowPage()
ShowDiff()
EndIf
;- -Close
ElseIf MenuID = #Menu_2
If OK1
CloseFile(1)
EndIf
If OK2
CloseFile(2)
EndIf
End
;- -Compare
ElseIf MenuID = #Menu_3
Compare()
;- -Top of file
ElseIf MenuID = #Menu_4
Sector=0
ShowPage()
ShowDiff()
;- -Bottom of file #1
ElseIf MenuID = #MENU_5
Sector=Int(FileLenght1/256)
ShowPage()
ShowDiff()
;- -Bottom of file #2
ElseIf MenuID = #Menu_6
Sector=Int(FileLenght2/256)
ShowPage()
ShowDiff()
;- -Help ;-)
ElseIf MenuID = #Menu_7
InfoText$="Do you really need help???"+Chr(13)
InfoText$=InfoText$+"Sorry, but this tiny program comes without any help."+Chr(13)
MessageRequester("Help needed?",InfoText$,#PB_MessageRequester_Ok)
If OK1 And OK2
ShowPage()
ShowDiff()
EndIf
InfoText$="Here are some hints:"+Chr(13)
InfoText$=InfoText$+Chr(13)+"... = Pick files to compare."+Chr(13)+Chr(13)
InfoText$=InfoText$+Chr(13)+"T = Move to start of file."+Chr(13)
InfoText$=InfoText$+Chr(13)+"B = Move to end of file."+Chr(13)
InfoText$=InfoText$+Chr(13)+"U = Move one page up."+Chr(13)
InfoText$=InfoText$+Chr(13)+"D = Move one page down."+Chr(13)+Chr(13)
InfoText$=InfoText$+Chr(13)+"Compare = Find next different page"+Chr(13)+Chr(13)
InfoText$=InfoText$+Chr(13)+"Or use the menue"+Chr(13)
MessageRequester("Almost no help...",InfoText$,#PB_MessageRequester_Ok)
;- -Info
ElseIf MenuID = #MENU_8
InfoText$="FileCompare is a little tool to compare files."+Chr(13)+Chr(13)
InfoText$=InfoText$+"Written in PureBasic v4b7 by DeltaG."+Chr(13)+Chr(13)
InfoText$=InfoText$+"V 0.0.1 ;-) There will be no update."+Chr(13)
MessageRequester("Info...",InfoText$,#PB_MessageRequester_Ok)
;- -Up
ElseIf MenuID = #Menu_9
DEC Sector
If Sector<0
Sector=0
EndIf
ShowPage()
ShowDiff()
;- -Down
ElseIf MenuID = #Menu_10
INC Sector
If Sector > Int(FileLenght1/256) And Sector > Int(FileLenght2/256)
DEC Sector
EndIf
ShowPage()
ShowDiff()
EndIf; Menu
EndIf; EventMenu
;- Gadgets
If Event = #PB_Event_Gadget
GadgetID = EventGadget()
;- -Select file #1
If GadgetID = #Button_1
If OK1
CloseFile(1)
OK1=0
EndIf
GetFile1()
RedrawBox()
ShowPage()
;- -Select file #2
ElseIf GadgetID = #Button_2
If OK2
CloseFile(2)
OK2=0
EndIf
GetFile2()
RedrawBox()
ShowPage()
;- -Compare
ElseIf GadgetID = #Button_3
Compare()
;- -Top
ElseIf GadgetID = #Button_4
Sector=0
ShowPage()
ShowDiff()
;- -Bottom
; (toggles between file 1 and file 2)
ElseIf GadgetID = #Button_5
If Sector=Int(FileLenght2/256)
Sector=Int(FileLenght1/256)
Else
Sector=Int(FileLenght2/256)
EndIf
ShowPage()
ShowDiff()
;- -Up
ElseIf GadgetID = #Button_6
DEC Sector
If Sector<0
Sector=0
EndIf
ShowPage()
ShowDiff()
;- -Down
ElseIf GadgetID = #Button_7
INC Sector
If Sector > Int(FileLenght1/256) And Sector > Int(FileLenght2/256)
DEC Sector
EndIf
ShowPage()
ShowDiff()
EndIf; Gadgets
EndIf; EventMenu
Until Event = #PB_Event_CloseWindow
End
;-
Das dazugehörige Include-File:
Code: Alles auswählen
; IncludeFile for CompareFile
;- Window Constants
;
Enumeration
#Window_1
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_1
EndEnumeration
Enumeration
#MENU_1
#Menu_2
#Menu_3
#Menu_4
#MENU_5
#Menu_6
#Menu_7
#MENU_8
#MENU_9
#MENU_10
EndEnumeration
;- Gadget Constants
;
Enumeration
#Frame3D_1
#Frame3D_2
#Frame3D_3
#Frame3D_4
#String_1
#String_2
#Text_1
#Text_2
#Button_1
#Button_2
#Button_3
#Button_4
#Button_5
#Button_6
#Button_7
#ProgressBar_1
EndEnumeration
Procedure Open_Window_1()
If OpenWindow(#Window_1, 130,125,775,530 , "FileCompare", #PB_Window_SystemMenu | #PB_Window_TitleBar)
If LoadFont (1, "Courier New", 8)
If StartDrawing(WindowOutput(#Window_1))
DrawingMode(0)
DrawingFont(FontID(1))
If CreateMenu(#MenuBar_1, WindowID(#Window_1))
MenuTitle("File")
MenuItem(#MENU_1, "&Open"+Chr(9)+" O")
MenuBar()
MenuItem(#Menu_2, "&Quit"+Chr(9)+" Q")
MenuTitle("Project")
MenuItem(#Menu_3, "&Compare"+Chr(9)+" C")
MenuBar()
MenuItem(#Menu_4, "&Top"+Chr(9)+" T")
MenuItem(#MENU_5, "Bottom File &1"+Chr(9)+" 1")
MenuItem(#Menu_6, "Bottom File &2"+Chr(9)+" 2")
MenuTitle("Help")
MenuItem(#Menu_7, "&Help"+Chr(9)+" H")
MenuBar()
MenuItem(#MENU_8, "&Info"+Chr(9)+" I")
EndIf
If CreateGadgetList(WindowID(#Window_1))
ProgressBarGadget(#ProgressBar_1, 10, 493, 750, 10, 0, 10)
StringGadget(#String_1, 50, 20, 310, 20, "")
StringGadget(#String_2, 440, 20, 310, 20, "")
Frame3DGadget(#Frame3D_1, 10, 0, 360, 50, "File 1")
Frame3DGadget(#Frame3D_2, 400, 0, 360, 50, "File 2")
ButtonGadget(#Button_1, 20, 20, 20, 20, "...")
ButtonGadget(#Button_2, 410, 20, 20, 20, "...")
ButtonGadget(#Button_3, 350, 463, 70, 20, "Compare")
Frame3DGadget(#Frame3D_3, 10, 54, 360, 399, "")
Frame3DGadget(#Frame3D_4, 400, 54, 360, 399, "")
TextGadget(#Text_1, 70, 463, 200, 20, "Filesize: ", #PB_Text_Center)
TextGadget(#Text_2, 500, 463, 200, 20, "Filesize: ", #PB_Text_Center)
ButtonGadget(#Button_4, 375, 60, 20, 30, "T")
ButtonGadget(#Button_5, 375, 423, 20, 30, "B")
ButtonGadget(#Button_6, 375, 216, 20, 30, "U")
ButtonGadget(#Button_7, 375, 266, 20, 30, "D")
GadgetToolTip(#Button_1, "Select file 1")
GadgetToolTip(#Button_2, "Select file 2")
GadgetToolTip(#Button_3, "Compare files and jump to next difference")
GadgetToolTip(#Button_4, "Top of files")
GadgetToolTip(#Button_5, "Toggles between end of file 1 and end of file 2")
GadgetToolTip(#Button_6, "One page up")
GadgetToolTip(#Button_7, "One page down")
GadgetToolTip(#String_1, "Selected file 1")
GadgetToolTip(#String_2, "Selected file 2")
EndIf
AddKeyboardShortcut(0, #PB_Shortcut_O, #MENU_1)
AddKeyboardShortcut(0, #PB_Shortcut_Q, #MENU_2)
AddKeyboardShortcut(0, #PB_Shortcut_C, #MENU_3)
AddKeyboardShortcut(0, #PB_Shortcut_T, #MENU_4)
AddKeyboardShortcut(0, #PB_Shortcut_1, #MENU_5)
AddKeyboardShortcut(0, #PB_Shortcut_2, #MENU_6)
AddKeyboardShortcut(0, #PB_Shortcut_H, #MENU_7)
AddKeyboardShortcut(0, #PB_Shortcut_I, #MENU_8)
AddKeyboardShortcut(0, #PB_Shortcut_U, #MENU_9)
AddKeyboardShortcut(0, #PB_Shortcut_D, #MENU_10)
EndIf
EndIf
EndIf
EndProcedure