Documentation component by D.Glodt (c)2000-2004 |
Appendix A: QICON |
|
QICON Component
QICON is a component no visible with icons extraction from exe,dll,icl,ico
files or associated files and save file to icon format.
QICON Properties
Field |
Type |
R/W |
Default |
|
|
|
|
FileName |
STRING |
RW |
|
|
Name of icon file including the path,
the files type are *.ico,*.exe,*.dll,*.icl or
other files associated to an exé.a empty string delete the current
icon in mémory. |
Count |
INTEGER |
R |
|
|
Number of icons in the file. |
Handle |
LONG |
R |
|
|
Icon handle. |
Index |
INTEGER |
RW |
0 |
|
Icon index ,for selection of icon from
file if it has many icons. |
Associated |
BOOLEAN |
RW |
FALSE |
|
Icon associated to a exe file if the value is true. |
|
|
QICON Methods
Method |
Type |
Description |
Params |
|
|
|
|
SaveToFile |
Sub(FileName$,pixelFormat%,mask%) |
Save to icon format
FileName is the file name,PixelFormat can be pf4bit(16 colors) or
pf8bit(256 colors , mask is transparence(true or false) |
3 |
SaveBmpToFile |
Sub(QBitmap,FileName$,pixelFormat%,mask%) |
Save a bitmap to icon format. |
4 |
ConvertAsCursor |
Sub(FileName$,XHotSpot?,YHotSpot?) |
Convert icon filename$ as cursor, parameters XHotSpot and YHotSpot
are cursor coordinates |
3 |
QICON Events
Event |
Type |
Occurs when... |
Params |
|
|
|
|
QICON Examples
$TYPECHECK ON
$Option ICON "IconLib.ico"
$Include "Rapidq.inc"
$Include "QFuncLib.inc"
$Include "Object\QICON.inc"
$Include "Object\QCanvasEx.inc"
$INCLUDE "Object\QCOLORDIALOG.INC"
$INCLUDE "Object\QDrawFocus.INC"
$INCLUDE "Object\QFileListView.inc"
$INCLUDE "Object\QFormEx.inc"
$include "Object\QAbout.inc"
$Resource CODE as "IconLib.ico"
$Resource ICO_DEFAUT as "defaut.ico"
$Resource ICO_EXE as "exe.ico"
$Resource ICO_DLL as "dll.ico"
$Resource ICO_IMG as "img.ico"
$Resource ICO_SMALL_DEFAUT as "SmallDefaut.ico"
$Resource ICO_SMALL_EXE as "SmallExe.ico"
$Resource ICO_SMALL_DLL as "SmallDll.ico"
$Resource ICO_SMALL_IMG as "SmallImg.ico"
declare Sub open(file as string)
declare Sub draw
declare sub ChangeDirectory
declare sub ShowFiles
declare sub ShowIco
declare sub ShowIcl
declare sub ShowDll
declare sub ShowExe
declare sub ShowCur
declare sub showColor
declare sub SaveAs
declare sub MenuMask
declare sub SelectIco(button as long,x as long,y as long,shift as long)
declare Sub ShowList(sender as QMenuItem)
declare sub ResizeImage
declare sub OnAbout
declare sub DrawCursor
declare sub GridCursor
declare sub InfoGrid(x as short,y as short)
declare sub CloseGrid(Button as short,x as short,y as short)
declare sub OpenGrid
declare sub CheckIco
const Offset=38
dim bitmap as QBITMAP
bitmap.PixelFormat=pf24bit
bitmap.width=32
bitmap.height=32
dim rect as QRECT
dim dest as QRECT
dim icon as Qicon
dim Dial as QColorDialog
dim ImageColor as long
ImageColor=&HFFFFFF
Dim SaveDialog as QSaveDialog
SaveDialog.Filter="icones 16 couleurs(*.ico)|*.ico|icones 256 couleurs(*.ico)|*.ico|bitmap 24 bits(*.bmp)|*.bmp|"
SaveDialog.Caption= "Sauver sous"
dim popup as QPOPUPMENU
dim pop1 as QMENUITEM
pop1.caption="&Sauver sous..."
pop1.OnClick=SaveAs
popup.addItems(pop1)
popup.autoPopup=true
dim IconSelect as integer
dim focus as QDrawFocus
focus.noresize=true
focus.showcursor=false
dim about as QAbout
const AppTitle="Icon viewer"
const AppVersion="1.2"
CREATE Form AS QFormEx
Caption=AppTitle
Width=640
Height=500
Center
DeskBar=true
CREATE Menu as QMAINMENU
CREATE Menu1 as QMENUITEM
caption="&Fichier"
OnClick=CheckIco
CREATE item11 as QMENUITEM
caption="&Sauver sous..."
OnClick=SaveAs
END CREATE
CREATE item12 as QMENUITEM
caption="&Mode transparent"
checked=true
OnClick=MenuMask
END CREATE
CREATE item13 as QMENUITEM
caption="-"
END CREATE
CREATE item14 as QMENUITEM
caption="&Conversion curseur"
OnClick=OpenGrid
END CREATE
END CREATE
CREATE Menu2 as QMENUITEM
caption="&Affichage"
CREATE item1 as QMENUITEM
caption="&Couleur de fond"
OnClick=ShowColor
END CREATE
CREATE item2 as QMENUITEM
caption="-"
END CREATE
CREATE item3 as QMENUITEM
caption="&Fichiers ico"
checked=true
OnClick=ShowIco
END CREATE
CREATE item4 as QMENUITEM
caption="&Fichiers icl"
checked=true
OnClick=ShowIcl
END CREATE
CREATE item5 as QMENUITEM
caption="&Fichiers dll"
checked=true
OnClick=ShowDll
END CREATE
CREATE item6 as QMENUITEM
caption="&Fichiers exe"
checked=true
OnClick=ShowExe
END CREATE
CREATE item7 as QMENUITEM
caption="&Fichiers cur"
checked=true
OnClick=ShowCur
END CREATE
CREATE item8 as QMENUITEM
caption="-"
END CREATE
CREATE item21 as QMENUITEM
caption="&Grandes icones"
Tag=1
OnClick=ShowList
END CREATE
CREATE item22 as QMENUITEM
caption="&Petites icones"
Tag=2
OnClick=ShowList
END CREATE
CREATE item23 as QMENUITEM
caption="&Liste"
Tag=3
OnClick=ShowList
END CREATE
CREATE item24 as QMENUITEM
caption="&Détails"
Tag=4
checked=true
OnClick=ShowList
END CREATE
END CREATE
CREATE Menu3 as QMENUITEM
caption="&?"
CREATE item31 as QMENUITEM
caption="&A Propos..."
OnClick=OnAbout
END CREATE
END CREATE
END CREATE
CREATE Splitter1 AS QSPLITTER
Align=alLeft
width=5
END CREATE
CREATE DirTree AS QDirTree
Align=alLeft
InitialDir = CURDIR$
Width =300
OnChange=ChangeDirectory
END CREATE
CREATE EXEList AS QFileListView
Align=alClient
Width = 325
ViewStyle=vsReport
ExtensionsList.AddItems ("exe","dll","icl","ico","cur","ani")
SmallImageList.AddIcoHandle(ICO_SMALL_DEFAUT)
LargeImageList.AddIcoHandle(ICO_DEFAUT)
SmallImageList.AddIcoHandle(ICO_SMALL_EXE)
LargeImageList.AddIcoHandle(ICO_EXE)
SmallImageList.AddIcoHandle(ICO_SMALL_DLL)
LargeImageList.AddIcoHandle(ICO_DLL)
SmallImageList.AddIcoHandle(ICO_SMALL_IMG)
LargeImageList.AddIcoHandle(ICO_IMG)
SmallImageList.AddIcoHandle(ICO_SMALL_IMG)
LargeImageList.AddIcoHandle(ICO_IMG)
SmallImageList.AddIcoHandle(ICO_SMALL_IMG)
LargeImageList.AddIcoHandle(ICO_IMG)
SmallImageList.AddIcoHandle(ICO_SMALL_IMG)
LargeImageList.AddIcoHandle(ICO_IMG)
ColumnCaption(1)="Nom"
ColumnCaption(2)="Taille"
ColumnCaption(3)="Type"
ColumnCaption(4)="Modifié"
Mask = "*.dll;*.exe;*.icl;*.ico;*.cur;*.ani"
OnFileChange=Open
END CREATE
CREATE Splitter2 AS QSPLITTER
Align=alBottom
cursor=crVSplit
width=5
END CREATE
CREATE box as QSCROLLBOX
Align=alBottom
height=150
OnResize=ResizeImage
CREATE image as QCanvasEx
top=0
left=0
width=box.width-4
height=box.height-4
fillrect(0,0,image.width,image.height,&HFFFFFF)
PopupMenu=Popup
OnPaint=Draw
OnMouseDown=SelectIco
END CREATE
END CREATE
CREATE Infos AS QSTATUSBAR
SizeGrip=false
AddPanels "Nombre d'icons:","selection:"
Panel(0).width=200
END CREATE
END CREATE
'========================================================
' boite dialogue coordonnées x,y curseur
'========================================================
CREATE Form2 as QFORM
width=300
height=340
caption="Coordonnées curseur"
center
borderstyle=4
CREATE SpotInfo as QLABEL
top=10
left=15
autosize=true
caption="X:"+space$(3)+"Y:"
transparent=true
END CREATE
CREATE BoxIco AS QSCROLLBOX
top=40
left=15
width=260
height=260
CREATE ImgIco AS QCANVASEX
left=0
top=0
width=256
height=256
OnPaint=DrawCursor
OnMouseMove=InfoGrid
OnMouseDown=CloseGrid
END CREATE
END CREATE
END CREATE
Form.ShowModal
sub OpenGrid
Dim msgButton as integer
msgButton=MessageBox("Convertir "+GetFileName(icon.filename)+" en curseur?",application.title,36)
if msgButton=mrYes then form2.show
end sub
sub CheckIco
if instr(lcase$(icon.filename),".ico")>0 then
item14.enabled=true
else
item14.enabled=false
end if
end sub
sub DrawCursor
ImgIco.fillrect(0,0,256,256,&hffffff)
ImgIco.DrawIco(0,0,256,256,Icon.handle)
GridCursor
end sub
'============================
' Affichage grille zoom
'============================
Sub GridCursor
dim ptHorz as integer
dim ptVert as integer
dim i as integer
ptHorz=0
ptVert=0
ImgIco.pensize=1
for i=1 to int(ImgIco.height/8)
ptHorz=ptHorz+8
ImgIco.line(0,ptHorz,ImgIco.width,ptHorz,&h0)
next i
for i=1 to int(ImgIco.width/8)
ptVert=ptVert+8
ImgIco.line(ptVert,0,ptVert,ImgIco.height,&h0)
next i
End Sub
Sub InfoGrid(x as short,y as short)
SpotInfo.caption="X:"+str$(int(x/8)+1)+" Y:"+str$(int(y/8)+1)
End Sub
Sub CloseGrid(Button as short,x as short,y as short)
Form2.close
icon.ConvertAsCursor(icon.filename,(x/8)+1,(y/8)+1)
icon.filename=FullPathNoExt(icon.filename)+".cur"
EXEList.Refresh
End Sub
Sub Open(file as string)
icon.filename=file
image.repaint
infos.panel(0).caption="Nombre d'icons:"+str$(icon.count)
infos.panel(1).caption="Selection:"
End Sub
Sub ResizeImage
image.width=box.width-4
End Sub
Sub Draw()
dim i as integer
dim col as integer
dim x as integer
dim y as integer
x=0
y=0
focus.remove(image.handle)
image.fillrect(0,0,image.width,image.height,ImageColor)
if icon.count>1 then
if icon.count*Offset>(image.width-Offset) then
col=icon.count/((image.width-Offset)/Offset)
if box.height<(Offset*col+Offset) then
image.height=Offset*col+Offset
else
image.height=box.height-4
end if
else
image.height=box.height-4
end if
for i=0 to icon.count
if x+Offset>image.width then
x=0
y=y+Offset
end if
icon.index=i
image.DrawIco(x,y,0,0,Icon.handle)
x=x+Offset
next i
else
image.height=box.height-4
image.DrawIco(0,0,0,0,Icon.handle)
end if
End Sub
SUB ChangeDirectory
EXEList.Directory =DirTree.Directory
END SUB
Sub ShowFiles
EXElist.Mask=""
if item3.checked then
if EXElist.Mask="" then
EXElist.Mask=EXElist.Mask+"*.ico"
else
EXElist.Mask=EXElist.Mask+";*.ico"
end if
end if
if item4.checked then
if EXElist.Mask="" then
EXElist.Mask=EXElist.Mask+"*.icl"
else
EXElist.Mask=EXElist.Mask+";*.icl"
end if
end if
if item5.checked then
if EXElist.Mask="" then
EXElist.Mask=EXElist.Mask+"*.dll"
else
EXElist.Mask=EXElist.Mask+";*.dll"
end if
end if
if item6.checked then
if EXElist.Mask="" then
EXElist.Mask=EXElist.Mask+"*.exe"
else
EXElist.Mask=EXElist.Mask+";*.exe"
end if
end if
if item7.checked then
if EXElist.Mask="" then
EXElist.Mask=EXElist.Mask+"*.cur;*.ani"
else
EXElist.Mask=EXElist.Mask+";*.cur;*.ani"
end if
end if
End Sub
Sub ShowIco
if item3.checked then
item3.checked=false
else
item3.checked=true
end if
ShowFiles
End Sub
Sub ShowIcl
if item4.checked then
item4.checked=false
else
item4.checked=true
end if
ShowFiles
End Sub
Sub ShowDll
if item5.checked then
item5.checked=false
else
item5.checked=true
end if
ShowFiles
End Sub
Sub ShowExe
if item6.checked then
item6.checked=false
else
item6.checked=true
end if
ShowFiles
End Sub
Sub ShowCur
if item7.checked then
item7.checked=false
else
item7.checked=true
end if
ShowFiles
End Sub
Sub ShowColor
Dial.style=cdNormal
if Dial.Execute then
ImageColor=Dial.Color
image.repaint
end if
End Sub
Function Selection(x as long,y as long)as integer
dim left as integer
dim top as integer
dim i as integer
left=0
top=0
for i=1 to icon.count
if left+Offset>image.width then
left=0
top=top+Offset
end if
if x>left and x<(left+32) and y>top and y<(top+32) then
Selection=i
IconSelect=i-1
rect.left=left
rect.top=top
rect.right=left+32
rect.bottom=top+32
focus.start(image.handle,left-1,top-1)
focus.draw(image.handle,left+34,top+34,true)
end if
left=left+Offset
next i
End function
Sub SelectIco(button as long,x as long,y as long,shift as long)
if Selection(x,y)=0 then focus.remove(image.handle)
infos.panel(1).caption="Selection:icon"+str$(Selection(x,y))
End Sub
Sub MenuMask
if item12.checked then
item12.checked=false
else
item12.checked=true
end if
End Sub
Sub ShowList(sender as QmenuItem)
item21.checked=false
item22.checked=false
item23.checked=false
item24.checked=false
sender.checked=true
Select Case sender.tag
Case 1
ExeList.ViewStyle=vsIcon
Case 2
ExeList.ViewStyle=vsSmallIcon
Case 3
ExeList.ViewStyle=vsList
Case 4
ExeList.ViewStyle=vsReport
End Select
End Sub
Sub SaveAs
If SaveDialog.Execute Then
Select case SaveDialog.FilterIndex
case 1
icon.index=IconSelect
if instr(lcase$(SaveDialog.filename),".ico")=0 then
icon.saveToFile(SaveDialog.filename+".ico",pf4bit,item12.checked)
else
icon.saveToFile(SaveDialog.filename,pf4bit,item12.checked)
end if
case 2
icon.index=IconSelect
if instr(lcase$(SaveDialog.filename),".ico")=0 then
icon.saveToFile(SaveDialog.filename+".ico",pf8bit,item12.checked)
else
icon.saveToFile(SaveDialog.filename,pf8bit,item12.checked)
end if
case 3
dest.left=0
dest.top=0
dest.right=32
dest.bottom=32
bitmap.fillrect(0,0,32,32,&HFFFFFF)
Bitmap.copyRect(Dest,image,rect)
if instr(lcase$(SaveDialog.filename),".bmp")=0 then
Bitmap.saveToFile(SaveDialog.FileName+".bmp")
else
Bitmap.saveToFile(SaveDialog.FileName)
end if
end Select
end if
End Sub
Sub OnAbout
about.AppName=AppTitle
about.AppVersion=AppVersion
about.Caption="A propos"
about.text="Auteur:Glodt dominique"+chr$(13)+"License libre"
about.image.icohandle=Code
about.EmailFont.color=&hff0000
about.email="dominique.glodt@libertysurf.fr"
about.show
End Sub