|
|||
| 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 >
|