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