|
|||
Forrige < |
Innhold ^
|
Neste >
|
ruby.exe
og rubyw.exe
.
ruby.exe
er ment til å bli brukt fra kommandolinjen i Unix(DOS-skall).
For applikasjoner som leser og skriver til standard input og output, er dette fint.
Men det betyr også at hver gang du kjører ruby.exe
, vil du få et
DOS-skall selv om du ikke vil ha et---Windows vil lage et nytt kommandovindu og vise det
mens Ruby kjører. Dette er kanskje ikke rette oppførsel hvis, for eksempel,
du dobbelklikker på et Ruby-skript som bruker et grafisk grensesnitt (slik som Tk),
eller hvis du kjører et Ruby-skript som bakgrunnsoppgave, eller inne i et annet program.
I disse tilfellene kan du bruke rubyw.exe
.
Dette er det samme som ruby.exe
,
men den hverken angir ikke standard inn, standard ut, eller standard feil,
eller setter igang
et DOS-skall når den kjøres.
Du kan sette fil-assosiasjoner[ ved å bruke
View/Options/Filetypes
i Explorer.]
slik at filer med endelsen ".rb
" will automatisk
bruke rubyw.exe
. Ved å gjøre dette kan du dobbelklikke
på Ruby-skript og de vil ganske enkelt kjøre uten at et DOS-vindu
dukker opp.
Win32API
-utvidelsen.
Win32API
-modulen er dokumentert fra side 508, men her er
et raskt overblikk over dens funksjonalitet.
Du lager et Win32API
-objekt som representerer et kall til et
spesielt DLL-inngangspunkt ved å spesifisere navnet på funksjonen, navnet på DLL-en som
inneholder funksjonen, og funksjons-signaturen(argumenttypen og returtypen). Det resulterende
ojektet kan benyttes til å utføre funksjonskallet.
Mange av argumentene til DLL-funksjoner er binære strukturer i en eller annen form. Win32API
-objektet håndterer dette ved å bruke Ruby String
-objekter til å sende de binære dataene fram og tilbake. Du
vil trenge å pakke inn og ut disse strengene når det er nødvendig (se eksempelet på side 508).
WIN32OLE
, skrevet av Masaki Suketa.
Eksemplene i denne seksjonen er tatt fra de som er i
WIN32OLE
distribution.c
Windows-automatisering tillater en automatiseringskontroller (en klient) til å
sende kommandoer og spørringer mot en automatiseringsserver, slik som
Microsoft Excel, Word, PowerPoint, o.s.v.
Du kan kalle en metode til en automatiseringsserver ved å kalle
en metode med det samme navnet fra et WIN32OLE
-objekt. For eksempel
kan du lage en ny WIN32OLE
-klient som starter en ny kopi
av Internet Explorer og kommanderer den til å besøke hjemmesiden.
ie = WIN32OLE.new('InternetExplorer.Application') ie.visible = true ie.gohome |
WIN32OLE
(slik som visible
eller gohome
)blir sendt til
WIN32OLE#invoke
-metoden, som sender
de rette kommandoene til serveren.WIN32OLE
-referansen
som begynner på side 505 beskriver klassen i detalj, men vi vil gå over
et par av dens særtrekk her.
Rotation
-egenskapen
til en Excel-graf kan du skrive
excel = WIN32OLE.new("excel.application") excelchart = excel.Charts.Add() ... excelchart['Rotation'] = 45 puts excelchart['Rotation'] |
WIN32OLE
-objektet.
Det betyr at du kan sette en parameter ved å tilordne til en objektattributt.
excelchart.rotation = 45 r = excelchart.rotation |
rotation
istedenfor Rotation
.
Song(artist, title, length): rem Visual Basic |
Song title := 'Get It On': rem Visual Basic |
Song(nil, 'Get It On', nil)
.
I Ruby kan du bruke denne egenskapen til å sende en hash med de navngitte
argumentene.
Song.new( 'title' => 'Get It On' ) |
WIN32OLE
-objektet en
each
-metode (som tar en blokk) for å gjøre den samme tingen.
WIN32OLE
-objekt tilknyttet
Excel og setter noen celle-verdier. Så velger vi en område av celler og lager en graf.
Vi setter Type
-egenskapen i excelchart
-objektet for å gjøre det om til en
3D-graf. Så lager vi en løkke for å gå igjennom og forandre graf-rotasjonen, 10° hver gang.
Vi legger til noen få grafer, og så bruker vi each
for å gå igjennom og skrive dem ut.
Til slutt kan vi lukke Excel-applikasjonen og avslutte.
require 'win32ole' # -4100 er verdien til Excel-konstanten xl3DColumn. ChartTypeVal = -4100; # Lager OLE-objekt for Excel excel = WIN32OLE.new("excel.application") # Lag og roter grafen excel['Visible'] = TRUE; workbook = excel.Workbooks.Add(); excel.Range("a1")['Value'] = 3; excel.Range("a2")['Value'] = 2; excel.Range("a3")['Value'] = 1; excel.Range("a1:a3").Select(); excelchart = workbook.Charts.Add(); excelchart['Type'] = ChartTypeVal; 30.step(180, 10) do |rot| excelchart['Rotation'] = rot end excelchart2 = workbook.Charts.Add(); excelchart3 = workbook.Charts.Add(); charts = workbook.Charts charts.each { |i| puts i } excel.ActiveWorkbook.Close(0); excel.Quit(); |
WIN32OLE
, trenger du å være forsiktig med unødvendige
dynamiske oppslag. Hvis mulig, er det bedre å tildele et WIN32OLE
-objekt
til en variabel og så referere elementer fra det, enn å lage en lang kjede med
"."-uttrykk.
For eksempel, istedenfor å skrive:
workbook.Worksheets(1).Range("A1").value = 1 workbook.Worksheets(1).Range("A2").value = 2 workbook.Worksheets(1).Range("A3").value = 4 workbook.Worksheets(1).Range("A4").value = 8 |
worksheet = workbook.Worksheets(1) worksheet.Range("A1").value = 1 worksheet.Range("A2").value = 2 worksheet.Range("A3").value = 4 worksheet.Range("A4").value = 8 |
$Log: win32.xml,v $ Revision 1.7 2002/11/30 20:28:55 kent Små kosmetiske endringer. Ikke rørt "port" ennå. Revision 1.6 2002/10/31 13:22:38 kent Lenke Win32 kapittelet inn i index.xml
Forrige < |
Innhold ^
|
Neste >
|