Liten Datorhandbok För Målmedvetna

Academic Computer Club, Umeå Universitet, 2000


Macintosh Programmering

QuickDraw & TextEdit

QuickDraw är samlingsnamnet på de ritfunktioner som ingår i Apple-systemet. Dessa kan rita geometriska figurer och bilder som har lagrats i resursfilen. All ritning sker till något som kallas en GrafPort. Vanligtvis motsvaras den av ett fönster, men den kan också användas för att rita utanför skärmen eller för att göra skrivarutskrifter.

QuickDraw innehåller väldigt många rutiner och det finns inte plats här att gå igenom dem alla. Det här momentet blir därför mycket översiktligt.

Fig. Några QuickDraw-element och funktioner för att rita dem.

Ett vanligt fel vid anrop till QuickDraw är att den aktuella GrafPorten inte är korrekt vald. Innan du börjar rita till ett visst fönster är det lämpligt att göra anropet:

SetPort(windowPtr);

QuickDraw kan utföra sex typer av grafiska operationer på de olika geometriska objekt som det behandlar. Frame-funktioner ritar en ram kring objektet; Paint-funktioner fyller objektet med pennans aktuella färg; Erase-funktioner raderar objektets område; Invert-funktioner inverterar det; Fill-funktioner fyller det med ett specificerat svartvitt mönster och FillC-funktioner fyller det med ett specificerat färgmöster.

För rektangeln så ser dessa anrop ut som:

FrameRect(&rect); PaintRect(&rect); EraseRect(&rect); InvertRect(&rect); FillRect(&rect,pattern); FillCRect(&rect,pixelPattern);

Resultatet av dessa grafiska operationer beror på de inställningar som har gjorts för pennan. De funktioner som styr pennan är:

PenSize(width,height); PenMode(transferMode); PenPat(pattern); PenNormal((); RGBForeColor(color); RGBBackColor(color);

Ett vanligt fel när man arbetar med QuickDraw är att man använder färgrutiner i fönster som inte specificerats som färgfönster. Om man gör det så får man bara tillgång till åtta färger, oavsett hur många färger som bildskärmen stödjer. För att skapa ett färgfönster använder du rutinerna NewCWindow och GetNewCWindow.

Att rita en linje med QuickDraw är en tvåstegsprocess. Först flyttar du pennan till utgångspunkten, sedan drar du ett streck till slutpunkten. Anropen ser ut som:

MoveTo(startH,startV); LineTo(stopH,stopV);

Du kan även rita text med QuickDraw. Det görs med funktionerna

DrawChar(char); DrawString(str255); DrawText(textPtr,firstCharOffset,noChars);

Utseendet på texten sätter du med funktionerna:

TextFont(fontNo); TextFace(style); TextMode(mode); TextSize(size);

QuickDraw innehåller också funktioner för att manipulera muspekare, bitmaps, polygoner, med mera, med mera.

TextEdit är namnet på den ordbehandlare som finns inbyggd i systemet. Ordbehandlaren är tänkt endast för enklare uppgifter, som att skriva in text i ett textfält i en dialogruta och saknar många av de finesser som kommersiella ordbehandlare har. De dokument den kan hantera är dessutom begränsade till att omfatta högst 32 000 bytes.

För att skapa ett nytt TextEdit-fält använder du kommandot

teHandle = TEStylNew(&destRect, &viewRect);

destRect är här den rektangel som styr flödet av texten och viewRect är den rektangel på skärmen där texten kommer att synas. För textfält som syns i sin helhet på skärmen kan du sätta destRect = viewRect. Om texten sedan scrollas får du sätta destRect högre upp än viewRect.

När du är klar med textfältet ger du kommandot:

TEDispose(teHandle);

Du kan sätta och hämta fältets text genom anropen:

TESetText(textPtr, textLength, teHandle); textHandle = TEGetText(teHandle);

När du har ett textfält uppe på skärmen måste du med jämna mellanrum anropa

TEIdle(teHandle);

för att få insättningsmarkören att blinka. För att sätta markeringsområdet i texten kan du anropa

TESetSelect(selStart, selEnd, teHandle);

När användaren klickar någonstans i textfältet skall du anropa:

TEClick(clickPoint, extend, teHandle);

med extend satt till true om skifttangenten hölls nere vid musklicket. Den här funktionen tar automatiskt hand om att markera och avmarkera text.

När du får activate- och deactivate-händelser i din händelseslinga måste du aktivera respektive deaktivera textfältet med anropen:

TEActivate(teHandle); TEDeactivate(teHandle);

När användaren trycker på en tangent kan du vidarebefodra tangenttryckningen till det aktuella textfältet genom kommandot:

TEKey(keyChar, teHandle);

TextEdit hanterar automatiskt urklippet åt dig. Allt du behöver göra är att anropa funktionerna:

TECut(teHandle); TECopy(teHandle); TEStylPaste(teHandle); TEDelete(teHandle);

när användaren väljer de mostvarande funktionerna i redigera-menyn. Du kan sätta in din egen text vid insättningsmarkören genom kommandot:

TEInsert(textPtr, textLength, teHandle);

Du sätter utseendet på texten genom anropet:

TESetStyl(mode, newStyle, redraw);

newStyl är här av typen TextStyle. Se till exempel Inside Maicntosh för att se hur den här rutinen fungerar.

Du kan sätta justeringen för texten genom anropet:

TESetJust(align, teHandle);

Här är align = 0 för vänsterjusterad text, align = 1 för centrerad och align = -1 för högerjusterad text.

När du får en updateEvent för ett fönster som innehåller ett textfält så vidarebefodrar du den till textfältet genom kommandot:

TEUpdate(&updateRect, teHandle);

Normalt specificerar du rektangeln till hela fönstrets rektangel (windowPtr->portRect). Du bör också radera rektangeln med EraseRect(&updateRect); innan du börjar rita i den.

Du kan rulla texten ett givet antal pixels genom kommandot:

TEScroll(scrollH, scrollV, teHandle);

Om du ändrar några fält direkt i teHandle, det vill säga utan att använda dig av funktionerna ovan så måste du anropa:

TECalText(teHandle);

när du är klar, så att TextEdit kan beräkna de nya radbrytningarna.

Ibland behöver du inte ett redigerbart textfält utan vill kanske bara vissa litet text i en ruta för användaren. Då kan du använda anropet:

TextBox(textPtr, textLength, &destRect, align);

Författat av Niklas Frykholm


Bakåt , Framåt , Upp, Huvudsida
Denna sida ändrades sist av handbok den 26/05 1996 12:37:21.
Last modified Sunday, 26-May-1996 12:37:21 CEST