Komponent för att visa grafisk information i delphi. Presentation om ämnet "Visa grafisk information i Delphi." Kort information från teorin

Arbeta med grafik i Delphi är det inte bara linjer och teckningar, utan även tryck textdokument. Därför i Delphi på jobbet med grafik du behöver spendera lite tid. Arbeta med grafik i Delphi involverar åtkomst till duken - Canvas-egenskapen för komponenter. Canvas Delphi detta är en duk som låter programmeraren ha tillgång till var och en av dess punkter (pixlar) och, som en artist, visa vad som krävs. Naturligtvis rita pixel för pixel för arbetar med grafik i Delphi är inte nödvändigt, Delphi-systemet ger kraftfull grafiska verktyg, vilket gör programmerarens uppgift enklare.

När man arbetar med grafik i Delphi har programmeraren en disposition till sitt förfogande (canvas, canvas - egenskap Duk Delphi-komponenter), penna (egenskap Penna), pensel (penselegenskap) för komponenten eller föremålet som du ska måla på. Vid pennan Penna och borstar Borsta du kan ändra färg (Färg-egenskap) och stil (Style-egenskap). Tillgång till typsnitt tillhandahålls av canvas-egenskapen Font. Dessa verktyg låter dig visa både text och ganska komplexa grafer av matematiskt och tekniskt innehåll, såväl som ritningar. Förutom, arbetar med grafik låter dig använda sådana resurser i Delphi Windows som grafik och videofiler.

Naturligtvis har inte alla komponenter i Delphi dessa egenskaper. På fliken Ytterligare en specialiserad komponent finns TImage, speciellt utformad för ritning, men även fastigheten Duk har till exempel komponenter som ListBox, ComboBox, StringGrid, samt själva Formen som placerar våra komponenter! Dessutom, för att skriva ut dokument, har Delphi åtkomst till Canvas-egenskapen för ett objekt som skrivaren.

Huvudegenskapen för ett sådant objekt som Canvas Delphi är Pixels typ TColor, det vill säga det är en tvådimensionell matris av punkter (pixlar) som specificeras av deras färg. Ritning på duken sker i det ögonblick då en given färg tilldelas till valfri punkt på duken. Varje pixel kan tilldelas vilken som helst tillgänglig för Windows färg. Till exempel exekvera uttalandet

Image1.Canvas.Pixels:=clRed;

Kommer att resultera i att en röd prick med koordinater ritas. Du kan ta reda på färgen på en pixel genom omvänd tilldelning:

Färg:=Bild1.Canvas.Pixels;

Typ TColor definieras som ett långt heltal (LongInt). Dess fyra byte innehåller information om proportionerna av blå (B), grön (G) och röd (R) färger. I hexadecimalt system det ser ut så här: $00BBGGRR. Andelen av varje färg kan variera från 0 till 255. För att visa den maximala röda punkten måste den därför tilldelas färg $000000FF.
För standardfärger i Delphi definieras en uppsättning textkonstanter. Du kan se det genom att öppna egenskapen Color, till exempel, för samma formulär i objektgranskaren.

Följande tabell innehåller några egenskaper och metoder för canvas:

Procedur TextOut(X, Y: Heltal; konst Text: WideString);
Ger en strängutgång Text från (X, Y) - den övre vänstra pixeln i texten.
Egenskap TextWidth( var Text: Sträng): Heltal;
Innehåller längden på strängen Text i pixlar.
Egenskap TextHeight( var Text: Sträng): Heltal;
Innehåller linjehöjden Text i pixlar.
Procedur Flytta Till(X, Y: Heltal);
Flyttar positionen till pixeln med adress (X, Y).
Procedur LineTo(X, Y: Heltal);
Ritar en rak linje från punkten för den aktuella positionen till pixeln med adressen (X, Y). Adressen (X, Y) blir punkten för den aktuella positionen.
Procedur FillRect( konst Rect: TRect);
Fyller en rektangel Rect på duken med den aktuella penseln. Kan bland annat användas för att radera en del av en bild på duken.

Låt oss skriva en applikation för en bild på komponentduken, med bara dessa metoder Bild text som skrivs in i komponenten PM:

Det första vi kommer att göra är att initiera variablerna när programmet startar. Det är nödvändigt att bestämma storleken på ritytan (vi kommer att skapa en global variabel Rect av typen TRect för detta) och ställa in bakgrundsfärgen Bild vit:

procedur TForm1.FormCreate(Avsändare: TObject);
Börja
Rekt.vänster:=0;
Rect.Top:=0;
Rect.Right:=Image1.Width;
Rect.Bottom:=Bild1.Höjd;
Image1.Canvas.Brush.Color:=clWhite;
slutet;

Rita sedan en ram på sidorna av bilden:

procedur TForm1.sida;
Börja
med Bild1.Canvas do
Börja
Flytta Till(0, 0);
LineTo(Image1.Width-1, 0);
LineTo(Image1.Width-1, Image1.Height-1);
LineTo(0, Image1.Height-1);
LineTo(0, 0);
slutet;
slutet;

Låt oss försöka vad som hände. Allt fungerar, men ramen visas inte ännu. Låt oss därför lägga till en procedur sida i förfarandet FormCreate. Nu är det vackert. Nästa kommer vi att skriva enkel procedur radera, rensa bild. Den måste anropas innan någon bilduppdatering, annars överlappar de föregående och efterföljande bilderna.

procedur TForm1.clearing;
Börja
Image1.Canvas.FillRect(Rect); //Rektangel Rect fylls med vitt och bilden raderas.
slutet;

Nu är det turen till själva textutmatningsproceduren. Låt oss börja rita text från punkt (3, 3) - det övre vänstra hörnet av arket, med en liten indragning på 3 pixlar. Varje efterföljande rad kommer att förskjutas med linjehöjd:

procedur TForm1.prn;
var i: heltal;
Börja
med Bild1.Canvas do
för i:=1 till Memo1.Lines.Count do
TextOut(3, 3+(i-1)*TextHeight("A"), Memo1.Lines);
slutet;

Nu är allt klart för att mata ut text. Vi kommer att göra detta med OnChange-händelsen:

procedur TForm1.Memo1Change(Avsändare: TObject);
Börja
clearing;
prn;
sida;
slutet;

Och slutligen, proceduren för att ändra teckenstorleken:

procedur TForm1.Edit1Change(Avsändare: TObject);
Börja
Memo1.Font.Size:=UpDown1.Position;
Image1.Canvas.Font.Size:=UpDown1.Position;
Memo1Change(Avsändare);
slutet;

Du kan ändra detta program för att skriva ut text. För att arbeta med skrivaren måste du ansluta modulen Skrivare:

enhet Enhet 1;

Gränssnitt

använder
Windows, meddelanden, SysUtils, varianter, klasser, grafik, kontroller, formulär,
Dialoger, StdCtrl, Skrivare ;

När man arbetar med skrivaren som canvas kallas metoden för att börja skriva ut StartDoc, sedan matas dokumentet ut, utskriften slutförs genom att anropa metoden EndDoc:

Printer.BeginDoc;
med Printer.Canvas do
Börja
...Skriv ut dokument...
slutet;
Printer.EndDoc;

Bredden och höjden på skrivarbanan är tillgängliga via egenskaperna Printer.PageWidth Och Printer.PageHeight. Du kan avsluta utskriften på en sida och börja skriva ut på en annan med metoden Printer.NewPage.

Lista över displaykomponenter grafisk information

För att visa grafisk information tillhandahåller Delphi-biblioteket komponenter, vars lista finns i Tabell 4.1.

Tabell 4.1 Komponenter för grafisk informationsdisplay Piktogram

Komponent

Sida

Beskrivning

Bild

Används för att visa grafik: ikoner, bitmappar och metafiler.


PaintBox (fönster för ritning)

Används för att skapa ett område på formuläret där du kan rita.


DrawGrid (tabell med ritningar)

Används för att visa icke-textdata i rader och kolumner.


Diagram (diagram och grafer)

Komponenten tillhör TChart-familjen av komponenter, som används för att skapa diagram och grafer.


Dessutom kan du visa och ange grafisk information på ytan av vilken som helst Visa grafik på en Canvas.

Duk Dukär inte en komponent, så strängt taget bör den inte betraktas inom ramen för denna bok. Men eftersom många komponenter, i synnerhet former, har en kontur och konturen ger möjlighet att visa olika grafisk information, är det ändå tillrådligt att ge lite inledande information om konturen.

Duken är det område av en komponent som du kan rita eller visa färdiga bilder på. Den innehåller egenskaper och metoder som avsevärt förenklar Delphi-grafik. Alla komplexa interaktioner med systemet är dolda för användaren, så en person som inte alls har erfarenhet av datorgrafik kan rita i Delphi.

Varje punkt i konturen har koordinater X Och Y. Dukens koordinatsystem, som på andra ställen i Delphi, har sitt ursprung i det övre vänstra hörnet av duken. Samordna Xökar när du flyttar från vänster till höger, och koordinaten Y- när du rör dig uppifrån och ner. Koordinater mäts i pixlar. En pixel är den minsta delen av en designs yta som kan manipuleras. Den viktigaste egenskapen hos en pixel är dess färg.

Duken har egenskapen Pixels. Den här egenskapen är en tvådimensionell array som ansvarar för färgerna på duken. Till exempel, Duk. Pixels matchar färgen på pixeln 10:e från vänster och 20:e från toppen. Du kan behandla en array av pixlar som vilken egenskap som helst: ändra färgen genom att ge pixeln ett nytt värde, eller bestäm dess färg från ett värde som lagras i den. Till exempel, Duk. Pixlar:=0 eller Duk. Pixels:=clSvart- detta är för att ställa in pixeln till svart.

Fast egendom Pixels kan användas för att rita på duk. Låt oss försöka rita en pixel-för-pixel-graf av en sinusform på konturen av formuläret. För att göra detta, i formuläret händelsehanterare OnPaint(ritning) kan du infoga följande kod:

TForm1. FormPaint(Avsändare: TObject);

var,Y:real; // funktionskoordinater,PY: longint; // pixelkoordinater

Börja:=clVit;

för PX:=0 till ClientWidth do

(X är grafargumentet,

:=PX*4*Pi/ClientWidth;:=Sin(X);

(PY - pixelkoordinat,

: =trunc (ClientHeight - (Y+1) *ClientHeight/2);

(Ställer in färgen på den valda

pixel (om ljusstyrka). Pixlar: = 0;

slutet;

Kör den här testapplikationen och du kommer att se resultatet som visas i figur 4.1a. Sinusvågsgrafen blev, även om den inte var särskilt bra, eftersom är uppdelad i enskilda punkter - pixlar.

Canvas - klassobjekt TCanvas har många metoder som låter dig rita grafer, linjer, former med hjälp av egenskapen Penna- fjäder. Denna egenskap är ett objekt, som i sin tur har ett antal egenskaper. En av dem är en fastighet du redan känner till Färg- den färg som ritningen appliceras med. Andra fastigheten - Bredd(linjebredd). Bredden anges i pixlar. Standardbredden är 1.

Fast egendom Stil bestämmer typen av linje. Den här egenskapen kan ha följande värden:

Duken har egenskapen PenPos typ TPoint(centimeter .). Den här egenskapen bestämmer pennans aktuella position i arbetsytans koordinater. Att flytta pennan utan att dra en linje, d.v.s. förändra PenPos, producerad med canvasmetoden Flytta till(X,Y). Här ( X, Y) - koordinaterna för den punkt till vilken pennan rör sig. Denna nuvarande punkt blir utgångspunkten, från vilken metoden LineTo(X,Y) du kan dra en linje till en punkt med koordinater ( X,Y). I detta fall flyttas den aktuella punkten till linjens slutpunkt och ett nytt samtal LineTo kommer att dra en punkt från denna nya nuvarande punkt.

Låt oss försöka rita sinusgrafen från föregående exempel med en penna. I det här fallet, formulärhändelsehanteraren OnPaint kan se ut så här:

procedur TForm1. FormPaint(Avsändare: TObject);

var,Y:real; // funktionskoordinater,PY: longint; // pixelkoordinater

Börja: =clVit;. MoveTo(0,ClientHeight div 2);

för PX: =0 till ClientWidth do

(X är grafargumentet,

motsvarande pixeln med koordinaten РХ):=PX*4*Pi/ClientWidth;:=Sin(X);

(PY - pixelkoordinat,

som motsvarar Y-koordinaten):=trunc(ClientHeight - (Y+1) *ClientHeight/2);

(En linje dras på grafen). LineTo(PX,PY);

Du kan se resultatet av applikationen i denna version i Fig. 4.1b. Som du kan se har kvaliteten på grafiken förbättrats avsevärt.

Pennan kan rita inte bara raka linjer utan också former. För en komplett lista över dukmetoder som använder pennan, se Delphis inbyggda hjälp. För nu, som ett exempel, kommer vi bara att ge en av dem - Ellips, som ritar en ellips eller cirkel. Det deklareras som

procedur Ellips(Xl, Y1, X2, Y2: heltal);

var finns parametrarna X1, X2, Y1, Y2 bestäm koordinaterna för en rektangel som beskriver en ellips eller cirkel. Till exempel operatören

Ellips (10, 40, 20, 50);

kommer att rita en cirkel med en diameter på 10 och mittkoordinater (15, 45).

I det allmänna fallet ritas figurer inte tomma, utan fylls i med hjälp av egenskapen canvas Borsta- borsta. Fast egendom Borstaär ett objekt som i sin tur har ett antal egenskaper. Fast egendom Färg definierar fyllningsfärgen. Fast egendom Stil definierar fyllningsmönstret (skuggning). Standardvärde Stil lika bsSolid, vilket betyder enfärgad Färg.

Vid pennan Penna Det finns ytterligare en fastighet som vi ännu inte har övervägt. Denna fastighet är Läge(läge). Standardvärde Läge = pmCopy. Det betyder att linjerna ritas med den färg som anges i egenskapen Färg. Men andra lägen är också möjliga, där inte bara färg beaktas Färg, men också färgen på motsvarande bakgrundspixlar. Det mest intressanta av dessa lägen är pmNotXor- tillägg med bakgrund med invers exklusivt OR. Om det här läget är inställt, om du ritar samma figur igen på samma plats på duken, tas den tidigare ritade bilden bort och pixelfärgerna som var före den första bilden av figuren återställs.

Denna funktion i läget pmNotXor kan användas för att skapa enkla animationer. Det räcker med att rita något, radera sedan det du ritade, rita om det något ändrat - och ritningen kommer att tyckas komma till liv.

Försök att göra en enkel animation själv - en rörlig cirkel. Starta en ny applikation och gå till genomförande infoga annons

X,Y: heltal;

Detta kommer att introducera globala variabler X Och Y- aktuella bildkoordinater.

I formhändelsen OnPaint infoga uttalanden

Borsta. Färg:=clWhite;:=clWhite;. Penna. Mode:=pmNotXor;

Den första av dessa operatörer ställer in penselfärgen på vit Borsta. Det betyder att din cirkel kommer att målas vit inuti. Den andra operatorn ställer in bakgrundsfärgen på formulärytan till vit.

Den tredje operatören ställer in pennläget pmNotXor, vilket gör att du kan radera den gamla bilden innan du ritar en ny.

Även den enklaste animationen behöver synkroniseras. Annars kommer rörelsehastigheten att bestämmas av datorns hastighet. Överför därför komponenten till formuläret Timer- timer från systemsidan. Denna komponent beskrivs i avsnitt 5.7 .

Du kan se den där detaljerad beskrivning. För nu, ställ in dess egenskap Intervall lika med till exempel 30 (detta är exponeringstiden i millisekunder, men realtid slutartiden blir längre - se avsnitt 5.7) och ställ in egenskapen Aktiverad likvärdig falsk(det betyder att timern inte startar automatiskt när applikationen startas).

I händelsehanteraren för denna komponent På timer infoga uttalanden

// Radera föregående bild. Ellips (X-5, Y, X+5, Y-lQ); (X);

// Rita en ny bild. Ellips (X-5, Y, X+5, Y-10);

// Stoppa när du når slutet av formuläret

om(X >= ClientWidth-20) sedan. Aktiverad: = false;

Den första av dessa operatorer ritar en cirkel på den plats där den ritades tidigare, dvs. raderar föregående bild.

Den sista operatorn stoppar bilden vid kanten av formuläret.

Lägg nu till en knapp i formuläret Knapp och placera operatorerna i klickhanteraren på den

X: =10;: =100;. Ellips (X-5, Y, X+5, Y-10);. Aktiverad: =true;

De två första operatorerna anger de initiala koordinaterna för cirkeln. Den tredje operatören ritar cirkeln vid dess startposition och den fjärde operatören startar timern.

Sänd applikationen, kör den, klicka på knappen. Du kommer att se en bild av en cirkel som rör sig över formen från vänster till höger. Och använd sedan din fantasi och förvandla denna inte särskilt intressanta applikation till något mer spännande.

Duken kan visa inte bara programmatiskt skapade bilder, utan även bilder lagrade i grafiska filer. Det är bara själva duken som inte har en metod för att ladda en bild från en fil. Därför måste filen laddas in i något annat grafiskt objekt som kan ta emot information från grafikfiler. Och skriv sedan om bilden från det här objektet till duken med canvasmetoden Dra. Dess beskrivning:

Draw(X, Y: Heltal; Grafik: TGraphic);

Här är parametrarna X Och Y bestäm koordinaterna för det övre vänstra hörnet av bildens placering på duken, a Grafisk- ett objekt som lagrar information. Ett sådant objekt kan till exempel vara ett objekt av typ TBitMap, utformad för att lagra bitmatriser. Låt oss se hur det hela ser ut i praktiken.

Öppna en ny applikation, dra en komponent till formuläret OpenPictureDialog från dialogrutan (detta är en komponent i dialogrutan för att öppna grafikfiler - se avsnitt 8.2 ) och knappen Knapp. Plats OpenPictureDialog var som helst i formuläret, eftersom den här komponenten är icke-visuell, och placera knappen längst ned i formuläret. Lägg till följande kod till din knappklickshanterare:

procedur TForm1. Button1Click(Avsändare: TObject);

var: TBitMap;

// Användarval grafisk fil

om OpenPictureDialog1. Kör sedan

// Skapa ett BitMap-objekt av typen TBitMap: =TBitMap. Skapa;

// Överför bilden till formulärduken. Draw(10, 10, BitMap);

//Förstöra BitMap-objektet. Fri;

slutet;

Denna kod skapar ett tillfälligt objekt av typen TBitMap Med namn BitMap. Då anropas dialogrutan för att öppna en grafikfil OpenPictureDialog1 och, om användaren har valt en fil, laddas den ner till BitMap metod LoadFromFile. Använd sedan metoden Dra den laddade bilden kopieras till duken i området med koordinaterna i det övre vänstra hörnet (10,10). Efter detta det tillfälliga objektet BitMapär förstörd.

Starta din applikation och klicka på dess knapp. Du kommer att se att du kan ladda upp vilken typ av grafisk fil som helst. bmp och det kommer att visas på formulärets kontur (se fig. 4.2 a). Du kan hitta grafikfiler i katalogen Bilder. I Delphi 5 och 4 finns det vanligtvis i en katalog. \programfiler\Common Files\Borland Shared. I Delphi 3 finns det i en katalog. \program files\Borland\Delphi 3, och i Delphi 1 - i katalogen Delphi 16. I katalogen Images finns det i synnerhet en underkatalog \Images\Splash\16Color\, som lagrar filen som laddats i exemplet i Fig. 4.2

Du har skapat ett bra program för att visa grafikfiler. Men låt oss nu försöka se dess stora nackdel. Utan att stänga din ansökan, gå till något annat program, till exempel gå tillbaka till Delphi. Gå sedan tillbaka till din applikation utan att göra något där. Om programfönstret du gick in i blockerade fönstret för din applikation helt och hållet, när du återvänder till det kommer du att se att bilden i fönstret har försvunnit. Om ditt applikationsfönster endast delvis överlappades kan du se ett resultat som liknar det som visas i Fig. 4.2b när du återgår till din applikation.

Du ser att om fönstret i någon annan applikation tillfälligt överlappar fönstret i din applikation, så är bilden som ritas på formulärkonturen förstörd. Låt oss se hur vi kan eliminera denna nackdel.

Om ett fönster har tilltäppts och bilden har blivit skadad, talar operativsystemet om för programmet att något har förändrats i miljön och att programmet bör vidta lämpliga åtgärder. Så snart en fönsteruppdatering krävs genereras en händelse för den OnPaint. I hanteraren av denna händelse (i vårt fall formhändelsen) måste du rita om bilden.

Omritning kan göras olika sätt beroende på applikation. I vårt exempel skulle det vara möjligt att deklarera en variabel BitMap(operatör var BitMap: TBitMap) utöver ovanstående procedur, dvs. gör denna variabel global genom att placera den direkt i sektionen genomförande. Operatör BitMap. Fri kan flyttas till formulärhändelsehanteraren OnDestroy, vilket inträffar när applikationen stängs. Sedan under hela körningen av din applikation kommer du att ha en kopia av bilden i komponenten BitMap och du behöver bara gå in i händelsehanteraren OnPaint form det finns bara en operatör:

Draw(10, 10, BitMap);

Gör detta så ser du att bilden på formuläret inte försämras på grund av överlappning av fönster.

Förutom den övervägda metoden Dra konturen har också en kopieringsmetod CopyRect:

CopyRect(Dest: TRect; Canvas: TCanvas; Källa: TRect);

Metoden kopierar den angivna parametern Källa bildområde i bildkällans arbetsyta Duk till den angivna parametern Dest område av denna duk. Typ TRect, som kännetecknar rektangulära områden Källa Och Dest, som redan beskrivs i avsnitt 3.2 .

Till exempel operatören

CopyRect(MyRect2, Bitmap. Canvas, MyRect1);

kopior till blankettöversikten i området MyRect2 bild från området MyRect1 komponentduk Bitmapp.

Kopieringsmetod CopyRect utförs i det läge som specificeras av egenskapen CopyMode. Som standard har den här egenskapen värdet cmSrcCopy, vilket helt enkelt innebär att ersätta bilden som tidigare fanns i området Dest, till den kopierade bilden. Andra möjliga värden CopyMode låter dig kombinera bilder, men deras övervägande ligger utanför den här bokens räckvidd.

Vi kommer att begränsa oss till denna grundläggande information om att visa grafisk information på duken. I avsnitt 3.2 information om utmatningen av texten till dispositionen lämnades. I allmänhet, konturerna - komplext objekt, som har många fler egenskaper och metoder. Men detta kräver en utvidgad diskussion utanför denna bok. Nästa bok i serien Allt om Delphi kommer att utforska dessa frågor mer i detalj.

En fönsterkomponent som har egenskapen Duk- duk.

Bild- och PaintBox-komponenter

Komponenter Bild Och PaintBox representera en begränsad yta med en duk på vilken bilder kan skrivas, som beskrivs i avsnitt 4.2 . I det här fallet komponenten PaintBox, strängt taget, ger inget nytt jämfört med att rita en form på en duk. Rita på PaintBox istället för en form har den inga fördelar, förutom kanske en viss lättnad i arrangemanget av en eller flera ritningar i fönsterområdet.

Men utöver dessa funktioner, komponenten Bild Det finns egenskaper som gör att du kan arbeta med olika typer grafiska filer Stöder tre typer av filer - bitmatriser, ikoner och metafiler. Alla tre filtyper lagrar bilder; skillnaden ligger bara i hur de lagras i filer och i sättet att komma åt dem. Bitmatris (fil med tillägg . bmp) visar färgen på varje pixel i bilden. I detta fall lagras informationen på ett sådant sätt att vilken dator som helst kan visa en bild med en upplösning och ett antal färger som motsvarar dess konfiguration.

Piktogram (filer med filtillägget . ico) är småbitmatriser. De används ofta för att beteckna programikoner, i snabbknappar, i menyalternativ, i olika listor. Metoden att lagra bilder i ikoner liknar att lagra information i bitmatriser, men det finns också skillnader. I synnerhet kan ikonen inte skalas, den förblir den storlek som den skapades i.

Metafiler lagrar inte sekvensen av bitar som utgör bilden, utan information om hur bilden skapades. De lagrar sekvenser av ritkommandon, som kan upprepas när bilden återskapas. Detta gör sådana filer i allmänhet mer kompakta än bitmatriser.

Komponent Bild låter dig visa information som finns i grafikfiler av alla specificerade typer. Detta uppnås genom dess egendom Bild- typ objekt Tbild.

Fig.4.3 Bildredigeringsfönster


För att bekanta dig med den här egenskapen, öppna en ny applikation och dra en komponent till formuläret Bild. Sträck ut den eller ställ in dess egenskaper Justera likvärdig alClient så att det tar upp hela formulärets klientområde. Klicka på knappen med ellipsen bredvid fastigheten Bild i Object Inspector-fönstret eller dubbelklicka helt enkelt på Bild. Bildredigeringsfönstret öppnas framför dig (Fig. 4.3), så att du kan ladda in i egenskapen Bild någon grafisk fil (Load-knappen), och även spara den öppna filen under ett nytt namn eller i en ny katalog. Klicka på Ladda för att ladda grafikfilen. Du kommer att se ett fönster för att öppna en grafikfil, som visas i Fig. 4.4 När du flyttar markören i listan över grafikfiler visas bilderna de innehåller i det högra fönstret, och ovanför dem finns siffror som kännetecknar bildens storlek . Du kan välja vilken typ av grafisk fil du vill ha. Låt oss påminna dig om att du kan hitta grafikfilerna som medföljer Delphi i katalogen Bilder. I Delphi 5 och 4 finns det vanligtvis i en katalog. \programfiler\Common Files\Borland Shared. I Delphi 3 finns det i en katalog. \program files\Borland\Delphi 3, och i Delphi 1 - i katalogen Delphi 16. När filen har laddats, klicka på OK i bildredigeringsfönstret och i din komponent Bild Bilden du valde kommer att visas. Du kan starta din applikation och beundra den. Men du ser redan bilden utan att ens köra programmet.

När du laddade en bild från en fil till en komponent under designprocessen Bild, det visar inte bara det, utan sparar det också i applikationen. Detta ger dig möjligheten att leverera din applikation utan en separat grafikfil. Men som vi kommer att se senare, i Bild Du kan också ladda externa grafikfiler medan programmet körs.

Låt oss återgå till att överväga komponentegenskaperna Bild.

Om du ställer in egenskapen AutoSize V Sann, sedan komponentstorleken Bild kommer automatiskt att anpassas till storleken på bilden som placeras i den. Om fastigheten AutoSize installerad i falsk, då kanske bilden inte passar in i komponenten eller omvänt kan komponentens yta vara mycket större än bildens yta.

En annan fastighet - Sträcka låter dig justera inte komponenten till storleken på bilden, utan bilden till storleken på komponenten. Installera AutoSize V falsk, sträck eller krymp storleken på komponenten Bild och installera Sträcka V Sann. Du kommer att se att ritningen kommer att ta upp hela arean av komponenten, men eftersom det är osannolikt att realistiskt bestämma dimensionerna Bild exakt proportionell mot bildens storlek kommer bilden att förvrängas. Installera Sträcka V Sann kanske bara är vettigt för vissa mönster, men inte för bilder. Fast egendom Sträcka påverkar inte ikonbilder som inte kan ändras storlek.

Fast egendom - Centrum, satt till Sann, centrerar bilden på området Bild, om komponentstorleken är större än bildstorleken.

Låt oss överväga ytterligare en egendom - Transparent(genomskinlighet). Om Transparent lika Sann, sedan bilden in Bild blir transparent. Detta kan användas för att lägga bilder ovanpå varandra. Placera den andra komponenten på formuläret Bild och ladda in en annan bild i den. Försök bara att ta en glest fylld konturbild. Du kan till exempel ta en bild bland de som vanligtvis placeras på knappar, till exempel en pil (file.\program files\common files\borland shared\images\buttons\arrow1l. bmp). Flytta din Bild så att de överlappar varandra, och i den översta komponentuppsättningen Transparent likvärdig Sann. Du kommer att se att den översta bilden inte längre skymmer den nedre. En av de möjliga användningsområdena för den här egenskapen är att överlägga en bild inskriptioner gjorda i form av en bitmatris. Dessa inskriptioner kan göras med hjälp av programmet Image Editor inbyggt i Delphi.

Observera att boendet Transparent påverkar bara bitmatriser. I det här fallet görs färgen på den nedre vänstra pixeln i bitmatrisen genomskinlig som standard (dvs ersatt av färgen på bilden som ligger under den).

Vi täckte in att ladda en bild från en fil under designprocessen. Men fastigheten Bild Det gör det också enkelt att organisera utbyte med alla typer av grafiska filer under applikationskörning. För att förklara tekniken för ett sådant utbyte måste vi först överväga mer i detalj fastigheten Bild.

Denna egenskap är ett objekt, som i sin tur har underegenskaper som pekar på det lagrade grafiska objektet. Om i Bild en bitmatris lagras och indikeras av egenskapen Bild. Bitmapp. Om en ikon är lagrad pekas den på av fastigheten Bild. Ikon. Den lagrade metafilen indikeras av fastigheten Bild. Metafil. Slutligen indikeras ett grafiskt objekt av vilken typ som helst av egenskapen Bild. Grafisk.

Ett objekt Bild och dess egenskaper Bitmapp, Ikon, Metafil Och Grafisk ha filläs- och skrivmetoder LoadFromFile Och Spara till fil:

procedur LoadFromFile( konst Filnamn: sträng);

procedur Spara till fil( konst Filnamn: sträng);

För fastigheter Bild. Bitmapp, Bild. Ikon Och Bild. Metafil Filformatet måste motsvara objektklassen: bitmatris, ikon, metafil. När du läser en fil i fastigheten Bild. Grafisk filen måste vara i metafilformat. Och för själva föremålet Bild Läs- och skrivmetoder anpassas automatiskt till filtypen. Låt oss förklara detta med ett exempel.

Låt oss bygga en applikation som liknar exemplet på att visa grafikfiler som diskuteras i avsnitt 4.2. För variation kan du styra den med något annat än en knapp Knapp och menyn. Placera en komponent på formuläret Bild. Sträck ut den eller ställ in dess egenskaper Justera likvärdig alClient så att det tar upp hela formulärets klientområde. Dra den grafiska filöppningsdialogkomponenten till formuläret OpenPictureDialog(se avsnitt 8.2 ). Placera en huvudmenykomponent på formuläret också Huvudmeny(se avsnitt 6.1 ) och ställ in en sektion i den - Arkiv. Skriv uttalandet i hanteraren för detta avsnitt

(OpenPictureDialog1.Execute) sedan. Bild. LoadFromFile(.FileName);

Denna operatör kommer att anropa en dialogruta för att öppna en grafisk fil (se Fig. 4.4) och ladda den i komponenten Bild1 bild från en fil som valts av användaren (se fig. 4.5). Dessutom kan filen vara av vilken typ som helst: bitmatris, ikon eller metafil.

Fig.4.5 Bild i komponent Bild bitmatris (a) och piktogram (6)



I denna ansökan metoden LoadFromFile appliceras på Bild1. Bild. Om endast bitmatrisfiler kommer att öppnas kan filladdningsoperatorn ersättas med

Bild. Bitmapp LoadFromFile(.FileName);

För piktogram kan en operatör användas. Bild. Ikon. LoadFromFile(.FileName);

och för metafiler - operatören. Bild. Metafil. LoadFromFile(.FileName);

eller. Bild. Grafisk. LoadFromFile(.FileName);

Men i alla dessa fall, om filformatet inte matchar det avsedda, kommer ett fel att uppstå. Metoden fungerar på liknande sätt Spara till fil med den skillnad som gällde Bild eller att Bild. Grafisk den sparar en bild av valfritt format i en fil. Till exempel om du utökar din ansökan med en dialogruta SavePictureDialog(se avsnitt 8.2 ), gå in i avsnittet Spara som i menyn och placera operatören i sin hanterare

SavePictureDialog1. Kör sedan. Bild. SaveToFile(SavePictureDialog1. Filnamn);

då kommer användaren att kunna spara en bild av vilket format som helst i en fil med ett nytt namn. Endast i detta fall, för att undvika förvirring i framtiden, måste tillägget av den sparade filen fortfarande överensstämma med formatet på den sparade bilden.

Programmet kommer att fungera helt identiskt för bilder av vilket format som helst om du ersätter spara-operatorn med

Bild. Grafisk. SaveToFile(.FileName);

använder egendom Bild. Grafisk. Och om du vet formatet på vad som lagras i komponenten Bild bilder, då kan du tillämpa metoden Spara till fil till fastigheter Bild. Bitmapp, Bild. Ikon Och Bild. Metafil.

För alla betraktade objekt Bild, Bild. Bitmapp, Bild. Ikon Och Bild. Metafil metoder för att tilldela objektvärden definieras:

Tilldela(Källa: TPersistent);

Men för BitMap, Ikon Och Metafil Du kan bara tilldela värden för homogena objekt: respektive bitmatriser, ikoner, metafiler. Ett undantag görs när man försöker tilldela värden till heterogena objekt EConvertError. Ett objekt Bild- universell, den kan tilldelas värdena för objekt i någon av de andra tre klasserna. Och meningen Bild kan endast tilldelas ett objekt vars typ matchar typen av objekt som lagras i det.

Metod Tilldela kan också användas för att utbyta bilder med urklippsbufferten. Till exempel operatören

Tilldela(Bild1.Bild);

sparar bilden som är lagrad i urklippet i urklippet Bild1. Liknande operatör

graphics delphi bildapplikation

Bild1. Bild. Tilldela (Urklipp);

läsa in Bild1 en bild på klippbordet. Dessutom kan det vara vilken bild som helst och till och med text.

Du behöver bara komma ihåg när du arbetar med klippbordet att klistra in i operatören använder din modullänk till modulen Clipbrd. Delphi infogar inte automatiskt denna länk.

Återgå till komponentegenskaperna Bild, kan vi notera en nackdel som är inneboende i vår testapplikation, som visas i Fig. 4.5 När du laddar olika bilder kan storleken på applikationsfönstret antingen vara för litet, och då ser du bara en del av bilden, eller för stor, och då kommer bilden att placeras oattraktivt i det övre vänstra hörnet av formuläret, vilket lämnar mycket tomt utrymme. Denna nackdel kan elimineras genom att använda egenskaperna Höjd(höjd) och Bredd(bredd) komponent Bild. Med egendom AutoSize installerad i Sann mått Bild ställs automatiskt in på samma storlek som den uppladdade bilden. Och dessa dimensioner kan användas för att ändra storlek på formuläret därefter. Till exempel kan den tidigare koden för att ladda en bild från en fil ersättas med följande:

OpenPictureDialog1. Kör sedan

Börja. Bild. LoadFromFile(.FileName); ClientHeight: = Bild1. Höjd+10;. Överst:=Form1. ClientRect. Topp

+ (Form1. ClientHeight - Image1. Height) div 2;. ClientWidth:=Bild1. Bredd+10;. Vänster: = Form1. ClientRect. Vänster

+ (Form1. ClientWidth - Image1. Width) div 2;

slutet;

Den här koden anger storleken på formulärets klientområde att vara något större än storleken på komponenten. Bild1, som i sin tur anpassar sig till bildens storlek tack vare fastigheten AutoSize. Gör dessa ändringar i din applikation, kör den och se formuläret anpassa sig automatiskt till storleken på den uppladdade bilden.

Formkomponent

Komponent Form kan endast villkorligt klassificeras som ett sätt att visa grafisk information, eftersom det helt enkelt representerar olika geometriska former, lämpligt skuggade. Huvudegenskapen för denna komponent är Form(form), som kan ha följande värden:

Exempel på dessa former visas i fig. 4.7

Fig.4.7 Komponentexempel Form


En annan väsentlig egenskap hos komponenten är Borsta(borsta). Den här egenskapen är ett objekt av typen TBrush, som har ett antal underegenskaper, särskilt: färg ( Borsta. Färg) och stil ( Borsta. Stil) fyll formen. Fyller på vissa värden Stil du kan se i Fig. 4.7 Den tredje av de specifika egenskaperna hos komponenten Form - Penna(penna) som definierar linjestilen. Den här egenskapen är som egendom Borsta, har redan diskuterats i avsnitt 4.2 . Du kan hitta referensdata om dessa egenskaper i kapitel 10*.

Diagramkomponent

Låt oss nu titta på komponenten Diagram. Denna komponent låter dig bygga olika diagram och grafer som ser väldigt imponerande ut (Fig. 4.8). Komponent Diagram har många egenskaper, metoder, händelser, så om vi betraktade dem alla skulle vi behöva ägna ett helt kapitel åt detta. Därför kommer vi att begränsa oss till att endast överväga de viktigaste egenskaperna Diagram. Du kan hitta resten i Delphis inbyggda hjälp, eller bara prova dem genom att experimentera med diagrammen.

Komponent Diagramär en behållare med föremål Serier typ TChartSeries- serier av data som kännetecknas av olika visningsstilar. Varje komponent kan inkludera flera serier. Om du vill visa en graf kommer varje serie att motsvara en kurva på grafen. Om du vill visa diagram kan du för vissa typer av diagram lägga flera olika serier ovanpå varandra, för andra (som cirkeldiagram) kommer det förmodligen att se fult ut. Men även i detta fall kan du ställa in för en komponent Diagram flera serier av samma data med olika diagramtyper. Sedan, genom att göra en av dem aktiv varje gång, kan du ge användaren ett val av vilken typ av diagram som visar de data de är intresserade av.

Placera en eller två (om du vill återge Fig. 4.8) komponenter Diagram på formuläret och titta på egenskaperna som öppnas i objektinspektören. Här är några förklaringar till några av dem.

Bestämmer om användaren kan rulla den observerade delen av grafen under körning genom att klicka med höger musknapp. Möjliga värden: pmInga - rullning är förbjuden, pmHorisontal, pmVertikal eller pmBåda - rullning är tillåten, respektive, endast i horisontell riktning, endast i vertikal riktning, eller i båda riktningarna.

Tillåter användaren att ändra bildskalan under exekvering, skära ut fragment av ett diagram eller en graf med muspekaren (fig. 4.8 b nedan visar ögonblicket för visning av ett fragment av grafen, helt presenterat i fig. 4.8 a).

Definierar diagrammets titel.

Definierar etiketten för diagrammet. Ingen som standard. Signaturtexten bestäms av underegenskapen Text.

Definierar en ram runt diagrammet.

Förklaringen till diagrammet är en lista med symboler.

MarginLeft, MarginRight, MarginTop, MarginBottom

Vänster, höger, övre och nedre marginalvärden.

BottomAxis, LeftAxis, RightAxis

Dessa egenskaper bestämmer egenskaperna för den nedre, vänstra och högra axeln, respektive. Att ställa in dessa egenskaper är meningsfullt för grafer och vissa typer av diagram.

LeftWall, BottomWall, BackWall

Dessa egenskaper bestämmer egenskaperna hos den vänstra, nedre och bakre kanten av den tredimensionella visningsytan av grafen, respektive (se Fig. 4.8 a, nedre grafen).

Lista över dataserier som visas i komponenten.

Aktiverar eller inaktiverar 3D-diagramvisning.

Egenskaper för tredimensionell display.

Tredimensionell skala (för Fig. 4.8 är detta tjockleken på diagrammet och bredden på grafremsorna).


Bredvid många av de listade egenskaperna i objektinspektören finns knappar med ellipser som låter dig anropa en eller annan sida i diagramredigeraren - ett flersidigt fönster som låter dig ställa in alla egenskaper för diagrammen. Diagrameditorn kan också anropas genom att dubbelklicka på komponenten Diagram eller genom att högerklicka på den och välja kommandot Redigera diagram från popup-menyn.

Om du vill försöka återskapa applikationen som visas i figur 4.8, dubbelklicka på den översta komponenten Diagram. Du kommer att föras till diagramredigerarens fönster (fig. 4.9) till diagramsidan, som har flera flikar. Först och främst kommer du att vara intresserad av seriefliken på den. Klicka på knappen Lägg till - lägg till en serie. Du kommer till ett fönster (Fig. 4.10), där du kan välja typ av diagram eller graf. I det här fallet väljer du Cirkel - ett cirkeldiagram. Med hjälp av fliken Titlar kan du ställa in diagrammets titel, fliken Legend låter dig ställa in parametrar för att visa diagramförklaringen (lista med symboler) eller ta bort den från skärmen helt och hållet, panelfliken bestämmer panelens utseende på som diagrammet visas ger 3D-fliken dig möjlighet att ändra utseendet på ditt diagram: lutning, skiftning, tjocklek, etc.

När du arbetar i diagramredigeraren och har valt en diagramtyp, kommer komponenterna Diagram Ditt formulär visar sitt utseende med de villkorliga data som anges i det (se fig. 4.11).

Fig.4.10 Välja en diagramtyp i diagramredigeraren


Därför kan du omedelbart se resultatet av att tillämpa olika alternativ på din applikation, vilket är väldigt bekvämt.

Seriesidan, som också har ett antal flikar, ger dig möjlighet att välja ytterligare egenskaper serie display. I synnerhet för ett cirkeldiagram på fliken Format är det användbart att aktivera alternativet Circled Pie, vilket säkerställer att, oavsett storlek på komponenten, Diagram visa diagrammet i form av en cirkel. På fliken Marks bestämmer knapparna i Style-gruppen vad som kommer att skrivas på etiketterna som är relaterade till individuella segment i diagrammet: Värde - värde, Procent - procent, Etikett - datanamn, etc. I exemplet i figur 4.8 är knappen Procent aktiverad, och på fliken Allmänt ställs en procentmall in för att säkerställa att endast heltalsvärden visas.

Du kan, om du vill, lägga till denna komponent Diagram en annan identisk serie genom att klicka på knappen Klona på fliken Serier på diagramsidan, och sedan för denna nya serie klicka på knappen Ändra och välja en annan diagramtyp, till exempel stapel. Självklart två olika typer diagram i en bild kommer att se dåligt ut. Men du kan stänga av indikatorn för denna nya serie på fliken Serier och sedan låta användaren välja en eller annan typ av diagramvisning (vi kommer att visa hur detta går till nedan).

Avsluta Diagram Editor, välj den nedersta komponenten i din applikation Diagram och upprepa inställningsegenskaper för den med hjälp av Diagram Editor. I det här fallet måste du ange två serier om du vill visa två kurvor på grafen och välja linjediagramtypen. Eftersom vi pratar om grafer kan du använda flikarna Axis och Walls för att specificera koordinategenskaperna för axlarna och tredimensionella kanter på grafen.

Det är det för design utseende ansökan avslutas. Allt som återstår är att skriva koden som anger vilken data du vill visa. För testapplikationen, låt oss bara ställa in några konstanta data i cirkeldiagrammet och sinus- och cosinusfunktioner i graferna.

För att ställa in de visade värdena måste du använda seriemetoder Serier. Låt oss bara fokusera på tre huvudmetoder.

Metod Klar rensar en serie tidigare inmatade data.

Metod Lägg till:

(Const AValue: Double; Const ALabel: String;: TColor)

låter dig lägga till en ny punkt i diagrammet. Parameter Ett värde motsvarar tilläggsvärdet, parameter En etikett- namnet som kommer att visas på diagrammet och i förklaringen, En färg- Färg. Parameter En etikett- valfritt, den kan ställas in tom: "".

Metod AddXY:(Const AXValue, AYValue: Double;ALabel: String; AColor: TColor)

låter dig lägga till en ny punkt i funktionsdiagrammet. alternativ AXVärde Och AYVärde motsvarar argument och funktion. alternativ En etikett Och En färg samma som i metoden Lägg till.

Således kan proceduren för att ladda data i vårt exempel se ut så här:

155;=251;=203;=404;

var: ord;

Börja Serie 1 do

Börja;(A1, "Workshop 1", clYellow);(A2, "Workshop 2", clBlue);(A3, "Workshop 3", clRed);(A4, "Workshop 4", clLila);

slutet;. Klar;. Klar;

för i: =0 till 100 do

Börja. AddXY (0,02*Pi*i, sin (0,02*Pi*i), "", clRed);. AddXY (0,02*Pi*i, cos (0,02*Pi*i), "", clBlue);

Om du till exempel har gett data som visas i ett diagram, två serier Serie 1 Och Serie 4 olika typer - Paj Och Bar, då kan du införa en procedur som ändrar typen av diagram enligt användarens begäran. Denna procedur kan ingå i en händelse OnClick någon knapp, ett menykommando eller, till exempel, helt enkelt bearbeta ett klick på en komponent Diagram. Att ladda data i Serie 4 och gör detta diagram osynligt i första ögonblicket, kan du infoga operatorerna i slutet av den tidigare givna proceduren

Tilldela (Series1); Aktiv: =falskt;

Den första av dessa operatörer skriver om den inlagda informationen Serie 1, i serie Serie 4. Och den andra operatören gör serien osynlig Serie 4. Ändring av diagramtyp utförs enligt proceduren

Aktiv: = inte Serie 1. Aktiva;. Aktiv: = inte Serie 4. Aktiva;

I Fig. 4.8 b kan du se resultatet av att användaren byter till en annan diagramvy.

LABORATORIEARBETE

ÄMNE: « Grafik iDelphi– konstruktion av det enklaste
geometriska former"

Kort information från teorin

Delphi ger utvecklaren tre sätt att visa grafik:

    plotta medan programmet körs

    användning av förskapad grafik

    skapa bilder med hjälp av grafiska komponenter

För att bygga grafer har speciella klasser skapats som ger verktyg och metoder för att rita: verktygen beskrivs i tre klasser - Tfont, Tpen, Tbrush; Ritområdet och metoderna tillhandahålls av klassen Tcanvas.

KlassTfont– anger egenskaperna för det teckensnitt som används för att visa text på duken. Klassens egenskaper beskrivs i avsnittet "Grundläggande egenskaper tillgängliga för de flesta komponenter."

KlassTpen– anger egenskaperna hos pennan (pennan) med vilken linjer ritas.

Egenskaper klass Tpen:

Färg:Tcolor – linjefärg (standard – svart)

Bredd:integer – linjetjocklek i pixlar;

Stil = (psSolid, psDash, psDot, psdashDot, psClear) – definierar linjestilen (heldragen, streckad, prickad, streckprickad, osynlig)

KlassTbrush– ställer in egenskaperna för penseln som målar bildens yta.

Egenskaper klass Tbrush:

Färg:Tcolor – penselfärg (standard – vit)

Stil– borstmönster, kan anta följande värden:

BsSolid – enfärgad

BsClear – brist på skuggning

BsVertikal – vertikala linjer

BsBdiagonal – höger diagonala linjer

BsDiagCross – sned cell

BsHorizontal – horisontella linjer

BsFdiagonal – vänster diagonala linjer

BsCross – bur

KlassTcanvas– bestämmer ytan som den skapade bilden placeras på, och verktygen som bilden skapas med: typsnitt, penna, pensel.

Som arbetsyta(canvas, "canvas"), som standard används hela klientområdet i formuläret (utan rubrik, huvudmeny och formulärrullningslinjer), men du kan tilldela mindre arbetsområden inuti formuläret med hjälp av komponenter PaintBox eller Bild. Ursprunget för dukkoordinaten är det övre vänstra hörnet av arbetsområdet, bredden på arbetsområdet bestäms av egenskapen ClientWidth, höjd – egendom Klienthöjd.

Egenskaper klass Tcanvas:

Duk:Tcanvas – definierar ritytan

Borsta:Tbrush – pensel för att måla slutna former

Font:Tfont – typsnitt för att visa text på duken

Penna:Tpen – penna (penna) för att rita

PenPos:Tpoint – aktuell position för den osynliga markören på duken

Kommentar : Tpoint-typ – definieras enligt följande:

Typ Point = rekord

Pixels: Tcolor - ställer in färgerna på canvaspixlarna, X, Y - pixelkoordinater. Egenskapen Pixels är bekväm att använda för att rita grafer med punkter i den valda färgen.

Huvudmetoder i TCanvas-klassen

    procedur Flytta till(x,y:heltal); - flyttar pennan utan att dra en linje till en punkt med koordinater (x, y).

    Procedur LineTo(x,y:heltal); - drar en linje från den aktuella punkten till punkten med koordinater (x, y).

Exempel : Rita en diagonal blå linje på formen från det övre vänstra hörnet av formen till det nedre högra hörnet.

Pen.färg:= clblue;

Flytta Till(0,0); LineTo(ClientWidth, ClientHeight);

    procedur Rektangel(xl,yl,x2,y2:heltal); - ritar en rektangel: x1,y1 – koordinaterna för det övre vänstra hörnet; x2, y2 är koordinaterna för det nedre högra hörnet.

Exempel : Rita en gulskuggad fyrkant med en sida på 60 pixlar i mitten av formen.

var Xc,Yc: heltal; //

Xc:=ClientWidth div 2;

Xy:=ClientHeight div 2;

Canvas.Brush.color:=clyellow;

Canvas.rectangle(xc-30,Yc-30,xc+30,Yc+30);

    procedur Ellips(xl,yl,x2,y2:heltal); - ritar en ellips inskriven i en rektangel med de angivna koordinaterna.

Exempel : rita en ellips inskriven i PaintBox-komponenten.

PaintBox1.Canvas.Pen.Width:=4; //linjebredd = 4 pixlar

PaintBox1.Canvas.Ellipse(0,0, PaintBox1. ClientWidth, PaintBox1. ClientHeight);

    procedur Polygon(); - ritar en sluten polygon specificerad av en array av koordinater.

Exempel : rita en fylld diamant som förbinder mittpunkterna på formens sidor

Var Xc,Yc:heltal; // koordinater för mitten av formulärets klientområde

Xc:=ClientWidth div 2;

Xy:=ClientHeight div 2;

Canvas.Brush.Color:=Rgb(275,140,70); // orange Färg skuggning

Canvas.Polygon();

slutet;

    Procedur Båge(xl,yl,x2,y2,x3,y3,x4,y4:heltal); - visar bågen för en ellips som avgränsas av en rektangel (x1, y1, x2, y2). Bågen visas från en punkt med koordinater (x3,y3) till en punkt med koordinater (x4,y4) mot medurs.

Exempel : rita en ellipsbåge som förbinder mitten av ovansidan av komponenten
PaintBox med mitten av sin högra sida.

Procedur Tform1.Button1Click(Sender:Tobject);

Var X3,y3,x4,y4: Heltal;

Med PaintBox1 gör det

Canvas.Pen.Color:= clWhite;

Canvas.Pen.Width:= 3;

Canvas.rectangle(0, 0, PaintBox1.ClientWidth, PaintBox1.ClientHeight);

X3:= ClientWidth div 2;

X4:= ClientWidth;

Y4:= ClientHeight div 2;

Canvas.Pen.Color:= clMaroon;

Canvas.ARC(0, 0, PaintBox1.ClientWidth, PaintBox1.ClientHeight, x3, y3, x4, y4);

Slutet;

    procedur Ackord(xl,yl,x2,y2,x3,y3,x4,y4:heltal); - ritar ett ackord - en rät linje som förbinder 2 punkter på ellipsen: en punkt med koordinater (x3, y3) med en punkt (x4, y4).

Exempel : Ersätt ARC-metoden med ARC-metoden i exemplet och få följande resultat.

    procedur Paj(xl,yl,x2,y2,x3,y3,x4,y4:heltal); - ritar ett ellipssegment som förbinder mitten av ellipsen med koordinater (x3,y3) och (x4,y4).

Exempel : I exemplet som ges för ARC-metoden, föreställ dig PIE-metoden och få detta resultat.

    procedur TextOut(x,y:heltal;Text:sträng); - matar ut strängen som skickas i parametern Text till en rektangel, vars övre vänstra hörn specificeras av x, y-koordinater. Teckensnittsegenskaper ställs in av teckensnittsverktyget.

Exempel : skriv namnet på den plottade grafen längst ner i formuläret.

Canvas.Font.Height:=20 ; //teckenhöjd 20 pixlar

Canvas.Font.Color:=clblue;

Canvas.TextOut(10, ClientHeight-24, 'graf av funktion SIN(X)');

Grafiska komponenter

Delphi erbjuder ett antal färdiga komponenter som gör att du kan förbättra dig användargränssnitt. Dessa komponenter finns på sidan Ytterligare Och Systemet komponentpaletter.

KomponentBild(KlassTimage) – skapad för att visa grafiska bilder lagrade i externa filer med tillägg:

    Ico(ikon, piktogram);

    bmp ( rasterbild, bitmapp);

    Wmf, .emf (metafil);

    Jpg, .jpeg (komprimerad JPEG-bild).

Grundläggande egenskaper :

Automatisk storlek:boolean – när Sann komponenten anpassar sina dimensioner till dimensionerna för den laddade bilden; standard är falskt.

Sträcka:boolean – om det är sant, upptar det laddade värdet hela arean av komponenten; standard är falskt.

Duk:Tcanvas – används för att rita inuti komponenten under programkörning.

Bild:Tbild - Definierar bilden som placeras i komponenten.

Grundläggande metoder klass Tbild:

Procedur LoadFromFile(Filnamn:sträng); - laddar en bild från en fil med namnet Filnamn till komponenten.

Procedur Spara till fil(Filnamn:sträng); -spara bilden från komponenten till en fil med namnet Filnamn.

KomponentPaintBox - definierar ett rektangulärt ritområde. Huvudegendomen är Duk, alla metoder i klassen Tcanvas är tillgängliga, den har inga oberoende egenskaper.

Exempel : rita en gul ellips inskriven i PaintBox1-komponenten.

Procedur Tform1Knapp1Klick(avsändare:objekt);

Med PaintBox1.Canvas göra

Brush.Color:=clyellow;

Ellipse(0,0,PaintBox1.ClientWidth, PaintBox1.ClientHeight);

slutet;

KomponentBitBtn rasterknapp

BitBtn-knappen kan, till skillnad från standarden, förutom titeln (Caption), innehålla en bild som specificeras av egenskapen Glyph. Det finns en uppsättning standard BitBtn-knappar, med fördefinierade egenskaper (med en specifik bild, inskription och syfte) - typen av standardknapp väljs genom egenskapen Snäll. Kind=(bkCustom, bkAbort,bkCancel, bkClose …)

Uppgift nr 1

Skapa en applikation som innehåller huvudform två bildkomponenter och 4 knappar ("Ladda bild", "Bygg en geometrisk figur", "Ändra färg", "Avsluta") och låter dig:

a) ladda den användarvalda grafiska bilden i Image1-komponenten så att bilden upptar hela området av Image-komponenten.

b) under Image1-komponenten visas inskriptionen "Detta är en bild från en fil.

(för varje mätning av komponentens storlek och positionBild1 inskription ska
ligger strikt under komponenten).

c) rita en geometrisk figur inuti Image2-komponenten: ett fyllt ellipssegment som förbinder mitten av Image-komponenten med mitten av den nedre och högra sidan av Image-komponenten.

(för eventuella förändringar i storlek och placering av komponentenBild2 figuren måste vara korrekt konstruerad, dvs. enligt specifikationen för komponentenBild2)

d) ändra färgen på linjen i en figur ritad i Image2 på användarens begäran med hjälp av ColorDialog-komponenten.

Uppgift nr 2

Skapa ett program som låter dig placera flera etiketter slumpmässigt (till exempel ordet "Hurra!") i bildkomponenten. För att implementera detta, använd Randomize slumptalsgeneratorn och Random-funktionen.

Måtten på bildkomponenten, ordet som visas i bilden och antalet ord måste anges av användaren.

Uppgift nr 3

Skapa ett program som låter dig välja namnet på en geometrisk form från en ListBox och rita den valda formen i bildkomponenten. Formens färg väljs från RadioGroup-komponenten.

Uppgift nr 4

Dela PaintBox1-komponenten i 4 lika delar, måla varje del i olika färger, till exempel: blå, gul, grön, röd.

Bredvid varje hörn av PaintBox1, skriv koordinaterna för det hörnet (i förhållande till ursprunget för formuläret där PaintBox1-komponenten finns).

Uppgift nr 5

MED

välj vilken typ av form som ska ritas från Radiogroup1-komponenten, fyllningsfärgen från Radiogroup2-komponenten och rita den valda formen i Image-komponenten.

Uppgift nr 6

Skapa ett program som låter användaren ställa in dimensionerna för PaintBox1-komponenten (i pixlar).

Dela PaintBox1-komponenten i 2 lika delar, inuti varje del rita en ellips, fylld med den färg som valts av användaren i ColorDialog.

Uppgift nr 7

MED Skapa en applikation som låter dig:

välj namnet på en geometrisk form från ListBox och rita den valda formen i bildkomponenten. Formen ska fyllas med den färg som valts av användaren i ColorDialog-komponenten om Ja är valt i RadioGroup-komponenten.

Uppgift nr 8

Skapa ett program som låter användaren ställa in dimensionerna för PaintBox1-komponenten (i pixlar).

Dela PaintBox1-komponenten i 4 lika delar, inuti varje del rita en annan geometrisk form (ellips, romb, triangel och rektangel). Färgen på varje form väljs av användaren i ColorGrid.

Uppgift nr 9

välj namnet på den geometriska formen från ListBox
former (ellips, romb, rektangel) och rita
den valda formen i bildkomponenten. Plats
former i bildkomponenten (I fjärdedel, II fjärdedel,

III eller IV quarter) och färgen på figuren väljs
från RadioGroup-komponenter.

Uppgift nr 10

Skapa ett program som låter användaren ställa in dimensionerna för PaintBox1-komponenten (i pixlar).

Se till att sidstorleken inte kan vara text, inte kan vara ett negativt tal och inte överstiga mindre storlek formulär.

Dela PaintBox1-komponenten i 4 lika delar, inuti varje del rita en geometrisk form vald av användaren i Combobox (ellips, romb, triangel och rektangel). Färgen på figuren väljs av användaren i ColorBox.

Uppgift nr 11

Skapa en applikation som låter dig:

välj positionen för ritningen från komponenten Radiogrupp

i bildkomponenten i den högra triangeln, ställ in
färgen på figurens skuggnings- eller konturfärg, beroende på
aktivera kryssruteknappar. Välj färg via
ColorGrid-komponent.

Uppgift nr 12

Skapa ett program som låter användaren ställa in dimensionerna för PaintBox1-komponenten (i pixlar).

Se till att sidstorleken inte kan vara text, inte kan vara ett negativt tal och inte överstiga den mindre formulärstorleken.

Dela PaintBox1-komponenten i 2 lika delar, inuti en av delarna rita en geometrisk form vald av användaren i Combobox (ellips, romb, triangel och rektangel). Färgen på figuren väljs av användaren i ColorBox.

Du kan till exempel ändra färgen på formuläret enligt följande:

form1.Color:= ColorBox1.Colors;

Uppgift nr 13

Skapa en applikation som låter dig:

a) rita en kvadrat i mitten av formen (storleken på sidan av kvadraten skrivs in av användaren). Se till att sidstorleken inte kan vara text, inte kan vara ett negativt tal och inte överstiga den mindre formulärstorleken.

b) dela kvadraten i en diagonal eller två, beroende på inkluderingen av kryssruteknapparna, och måla varje resulterande triangel i en annan färg. Valet av färg görs av användaren.

Uppgift nr 14

Skapa ett program som låter användaren ställa in dimensionerna för PaintBox1-komponenten (i pixlar).

Se till att sidstorleken inte kan vara text, inte kan vara ett negativt tal och inte överstiga den mindre formulärstorleken.

Dela PaintBox1-komponenten i 2 lika stora delar, inuti en del rita en romb, och inuti den andra delen rita valfri triangel. Färgen på figuren väljs av användaren i ColorBox.

Du kan till exempel ändra färgen på formuläret enligt följande:

form1.Color:= ColorBox1.Colors;

Uppgift nr 15

Skapa en applikation som låter dig:

a) ställ in dimensionerna för bildkomponenten horisontellt och vertikalt så att de är samma och lika med det nummer som användaren angett från tangentbordet;

(förutsatt att sidstorleken inte kan vara text, inte kan vara ett negativt tal och inte kan överstiga den mindre formstorleken)

b) dela bildkomponenten i fyra lika stora rutor med två blå linjer;

c) inuti varje resulterande fyrkant, rita en cirkel inskriven i den (låt användaren välja färgen på cirklarna genom färgvalsdialogrutan).

Uppgift nr 16

Skapa ett program som låter användaren ställa in dimensionerna för PaintBox1-komponenten (i pixlar).

Se till att sidstorleken inte kan vara text, inte kan vara ett negativt tal och inte överstiga den mindre formulärstorleken.

Dela PaintBox1-komponenten med 9 lika delar och fyll i varje resulterande schackbräderektangel. Fyllningsfärgen väljs av användaren i ColorBox.

Du kan till exempel ändra färgen på formuläret enligt följande:

form1.Color:= ColorBox1.Colors;

Uppgift nr 17

Placera två bildkomponenter och fyra knappar på formuläret: Linjefärg, Fyllningsfärg, Ok och Avsluta; och komponenten Redigera.

När du klickar på OK-knappen ritas en fyrkant med sidan X i Bild1, och en rätvinklig triangel med lika ben, som var och en har längden X, ritas i Bild2.

Triangelns vertex sammanfaller med ursprunget till Image2. En av hörnen på kvadraten sammanfaller med ursprunget till Bild1.

OK-knappen blir endast tillgänglig när du har valt en linjefärg och en fyllningsfärg för att rita formen.

X – väljer slumpmässigt med slumpmässig funktion och värdet på X ska visas i komponenten Redigera.

Uppgift nr 18

Skapa ett program som låter användaren ställa in dimensionerna för PaintBox1-komponenten (i pixlar).

Dela PaintBox1-komponenten i 4 lika delar; inuti den användarvalda delen ska en fylld cirkel byggas, vars storlek bestäms av användaren. Användaren väljer fyllningsfärg i ColorBox.

Du kan till exempel ändra färgen på formuläret enligt följande:

form1.Color:= ColorBox1.Colors;


"Visa grafisk information i Delphi" Ämnesöversikt: 1.C S pppp ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå mm ahhh tskst iiiiii iiiiii i iv in D D D D eeee llll pppp hhhh iiii O O tttt ooo bbbb rrrrr aaaa zhzhzh eee nnnn iiii eee k k k aaaa rrrrr tttt iiii nnnnn ooooo kkkk O O tttt ooooo bbbb a rrr g eeeeeee oooo mmmm eee ttt rrrr iiii hhchh eee ssss kkkk iiii xxxxx ffff iiii yyyy uuuu rrrrr P Pooooo ssss ttt rrrrr ooooo eee nnnn iiii eee yy g g rrrrr aaaa ffff iiii kkkk ooooo vvvv i i i och d d d d a d iiiaaaaaaaaaaaaaaaaaaaaaaaaaaa


1. Metoder för att visa grafisk information. I Delphi finns det flera sätt att visa grafisk information: Utmatning av förberedda bilder (bild, formkomponenter); P Konstruktion av grafer och diagram (diagramkomponent, etc.); F Avbildning programmatiskt(Canvasobjekt).


2.Visa 2.Visa bilder. Visningen av bilder med hjälp av IMAGE-komponenten undersökte vi i LLC DDDD DDDD LLC Yiyy och och och ZZZZ P P P PRRRDDDDDDDDDDDDDDDDD IIII XXXX T T T T T T T T T T T T TOTEMMM .... Här kommer vi att överväga ett exempel på den enklaste animationen som regelbundet ändrar den visade bilden i bildkomponenterna . PPPP eee rrrrr eee yyyytttoeee nnnn aaaaaaaaaaaaaaaaaaaaaaaaaa






3.Display 3.Visning av geometriska former. OCH Från flera Shape-komponenter kan du skapa enkla ritningar. P Genom att programmatiskt ändra positionen (.Left,.Top), storlek (.Width,.Height) och färg (Brush.Color) för Shape-komponenterna i en ritning, kan du implementera element i den enklaste animationen. R R R R aaaa ssssssss mmmm ooooh tttt rrrrr eee tttt yee p p p p rrrrr iii mmmm eee rrrrr....


4.Konstruktion 4.Konstruktion av grafer och diagram. Diagram är utformade för en mer visuell representation av numeriska datamatriser, deras visuella visning och analys. PPPP rrrrr iiii mmmm eee rrrrr.... För att skapa diagram i Delphi finns det flera komponenter, en av dem är diagramkomponenten (sektion TeeChart Std).










Grafer och diagram. Datan som ska visas skickas vanligtvis till diagrammet programmatiskt, till exempel: Series1.Clear; (rensa serie) för i:=1 till N gör Serie1.addxy(i, A[i], clGrön); X-axelvärde Y-axelvärde X-axeletikett Datafärg på PP-diagrammet aaaa sssssssssss mmmm ooooo tttt rrrrr eee tttt yee p p p p prrrr iiii mmmm eee rrrrr p p p poooo ssss ttt oeyy iiiyy rrr aaaa ffff iii kkkk aaaa f f f f uuuu nnnn kkkk tsstst iiiiii y y y y = = = = S S S S iiii nnnn ((((xxxx))))


Nästa: Laboratoriearbete ““““ OOOO tttt ooooo bbbb rrrrr aaaa zhzhzh eee nnnn iiii eee k k k k aaaa rrrrr tttt iiii nnnn ooooo kkkk i i i i åååååååååååååååååååååååååååååååååååååååååååå iiii åååå uuuu rrrrr, och och och xxxx a a a a nnnn iiii mmmm aaaa tsstst iiii yayayaya """"...Uppgift: 1) Utveckla ett program för att utföra enkel animering genom att periodiskt ändra den visade bilden i bildkomponenterna. (Antalet bilder är minst tre, välj bilderna själv).




Nästa: Laboratoriearbete ““““ PPPP oooo ssss tttt rrrrr ooooo eee nnnn iiii eee yy g rrrrr aaaa ffff iiii kkkk ooooo vvvv i i i d d d iiii aaaa yyyy rrrrrrr aaaa yyyy rrrrrrr a. modify the från laboratoriearbete 9 (Visa data i en tabell). Lägg till möjligheten att visa vissa data från en tabell i ett histogram eller ett cirkeldiagram. 2) Konstruera en graf över den givna funktionen.

Bild 2

"Visa grafisk information i Delphi" Ämnesöversikt: Metoder för att visa grafisk information i Delphi. Visa bilder. Visning av geometriska former. Konstruktion av grafer och diagram.

Bild 3

1. Metoder för att visa grafisk information. I Delphi finns det flera sätt att visa grafisk information: Utmatning av förberedda bilder (bild, formkomponenter); Konstruktion av grafer och diagram (diagramkomponent, etc.); Generera bilder programmatiskt (Canvas-objekt).

Bild 4

Visa bilder. Vi diskuterade att visa bilder med hjälp av bildkomponenten i ett av de tidigare ämnena. Här kommer vi att titta på ett exempel på att implementera en enkel animation genom att periodiskt ändra den visade bilden i bildkomponenterna. Gå till exempel.

Bild 5

Visning av geometriska former. Visningen av enkla geometriska former på ett formulär tillhandahålls av Shape-komponenten.

Bild 6

Visning av geometriska former. Grundläggande egenskaper för Shape-komponenten:

Bild 7

Visning av geometriska former. Du kan skapa enkla mönster från flera Shape-komponenter. Genom att programmatiskt ändra positionen (.Left, .Top), storlek (.Width, .Height) och färg (Brush.Color) för Shape-komponenterna i ritningen, kan du implementera element i den enklaste animeringen. Tänk på ett exempel.

Bild 8

Konstruktion av grafer och diagram. Diagram är utformade för en mer visuell representation av numeriska datamatriser, deras visuella visning och analys. Exempel. Det finns flera komponenter för att skapa diagram i Delphi, en av dem är diagramkomponenten (sektion TeeChart Std).

Bild 9

Konstruktion av grafer och diagram. Visa diagramkomponenten efter att ha installerat den på formuläret:

Bild 10

Konstruktion av grafer och diagram. Förutom "Objektinspektören" kan tillgång till egenskaperna för diagramkomponenten erhållas genom att öppna en speciell dialogruta (höger knapp på komponenten \ Redigera diagram...) Lägg till dataserie Ändra diagramtyp

Bild 11

Konstruktion av grafer och diagram. Välja en diagramtyp:

Bild 12

Konstruktion av grafer och diagram. Ställa in egenskaper för koordinataxlar (axel):

Bild 13

Konstruktion av grafer och diagram. Datan som ska visas skickas vanligtvis till diagrammet programmatiskt, till exempel: Series1.Clear; (rensa serie) för i:=1 till N gör Serie1.addxy(i, A[i], '', clGrön); X-axelvärde Y-axelvärde X-axeletikett Färg på data på diagrammet Betrakta ett exempel på att plotta funktionen y = Sin(x)

Bild 14

Nästa: Laborationer nr 13.1. "Visning av bilder och geometriska former, deras animation." Uppgift: 1) Utveckla en applikation för att implementera enkel animering genom att regelbundet ändra den visade bilden i bildkomponenterna. (Antalet bilder är minst tre, välj bilderna själv).

Bild 15

Uppgift: 2) Kom på och rita en bild med hjälp av Shape-komponenter. Genom att programmatiskt ändra position, storlek eller färg på Shape-komponenter i en ritning kan du implementera element av enkel animering.

Bild 16

Nästa: Laboratoriearbete nr 12.2. "Bygga grafer och diagram." Uppgift: Ändra ansökan från laboration nr 9 (Visa data i en tabell). Lägg till möjligheten att visa vissa data från en tabell i ett histogram eller ett cirkeldiagram. 2) Konstruera en graf över den givna funktionen.

Visa alla bilder