Använda gränssnitt i delphi. Funktioner för att arbeta med gränssnitt i Delphi. Standard gränssnittselement

Artikeln skrevs baserat på resultaten av analyser av program skrivna av unga utvecklare i vår grupp.

Vi ordnar sekvensen av kopplingskomponenter korrekt

Många användare, särskilt de som tidigare arbetat i DOS, har för vana att växla mellan inmatningsfält inte med musen, utan med hjälp av tangentbordet med Tab-tangenten. Dessutom är det mycket snabbare än att välja varje fält med musen. Därför måste ordningen på kopplingskomponenterna ställas in korrekt. Detta gäller både komponenterna inuti alla containerkomponenter (paneler, GroupBoxar och liknande), och själva containerkomponenterna, om det finns flera av dem på formuläret.

Ordningen för att byta komponenter inuti behållaren anges av egenskapen TabOrder. Den första komponenten som blir aktiv är den med TabOrder lika med 0, den andra med 1, etc., tills alla komponenter är uppräknade. Dessutom har komponenten en TabStop-egenskap, som indikerar om komponenten kommer att få fokus när den växlas med Tab-tangenten. Om du behöver förbjuda byte till någon komponent, ställ in dess TabStop = false. I det här fallet kan du bara byta till den här komponenten med hjälp av musen.

Det finns fall då användare som är vana vid att byta med en viss nyckel i ett program, av vana, fortsätter att använda den i andra. Detta händer ofta med 1C-användare, där Enter-tangenten kan användas för att navigera genom inmatningsfält. Jo, vi kommer att ge dem en sådan möjlighet i våra program om de ber om det. Ställ in formulärets KeyPreview-egenskap till true och skriv en OnKeyPress-händelsehanterare:

Procedur TForm1.FormKeyPress(Avsändare: TObject; var Key: Char);
Börja
om ord(nyckel)=vk_Return då
Form1.SelectNext(PriemForm.ActiveControl, true, true);
slutet;

Denna hanterare ger navigering genom formulärelement när Enter-tangenten trycks ned. Det bör noteras att den här metoden inte fungerar med knappar, eftersom... att trycka på Enter på en knapp gör att den klickas, medan ett tryck på Tab ger ingångsfokus till nästa komponent i växlingssekvensen.

Standardknappar

Alla samma användare vänjer sig snabbt vid det faktum att du i applikationsdialogrutor som regel kan bekräfta ditt val med Enter-tangenten och avbryta med Esc-tangenten. Låt oss inte göra dem besvikna i våra program, särskilt eftersom det är väldigt enkelt att göra. För en knapp som svarar på Enter, ställ in egenskapen Default till true. För knappen som svarar på Esc, ställ in egenskapen Avbryt till true. Det är allt.

Ja eller nej

Allt dialogrutor, som begär användaråtgärder, måste ha minst två knappar: bekräftelse av åtgärden och avslag på åtgärden (Ja/Nej, Spara/Avbryt, etc.). Åtgärden kan avbrytas genom att stänga fönstret med knappen [X] i fönstrets titel. Det är oacceptabelt om det bara finns en knapp för att bekräfta åtgärden, och för att vägra det är tänkt att stänga fönstret med [X]-knappen i titeln, eller så finns det ingen möjlighet till vägran alls. Detta förvirrar användaren och väcker en logisk fråga: hur vägrar man?

Glöm inte heller vad som sades ovan i avsnittet "Standardknappar".

Alla dialogrutor bör öppnas i mitten av skärmen

Centrerade, inte där de skapades i designläge. För det första är det mer visuellt, och för det andra eliminerar det automatiskt problemet med olika skärmupplösningar för olika användare.

Ett undantag görs om dialogrutan inte är modal, och som ett resultat av användarens arbete i detta fönster sker förändringar omedelbart i huvudfönstret (till exempel filtrering av en datamängd, ritning av grafer etc.).

Fönsterstorlekarna bör inte överstiga skärmens storlek

Inte i något fall. Det är en skam när en del av fönstret sträcker sig utanför skärmen. Detta krav beror inte på användarens skärmupplösning, dvs. ursäkter som "Låt dem ställa in en högre upplösning" fungerar inte.

Korrekt storleksändring av fönsterelement

Fönsterelement bör ändra storlek eller flyttas korrekt när fönstret ändras, när fönstret är maximerat och när fönstret återställs efter maximering.

Allt är alltid synligt

Att minska fönsterstorleken bör inte leda till att fönsterelement försvinner och bör helst inte leda till att rullningslister (rullningslister) visas i själva fönstret. Du kan begränsa de minsta fönsterstorlekarna så att alla element är synliga och tillgängliga. Om det inte går att placera komponenter så att alla syns i fönstret kan du använda bokmärken (som PageControl) för att dela in komponenter i grupper. Vi ignorerar inte heller ursäkter om skärmupplösning.

Tips överallt, tips alltid

För knappar, särskilt på verktygsfält (som Toolbar), bör tips anges så att det alltid är tydligt varför den eller den knappen behövs.

Färgspektrum

Du bör inte måla komponenterna på formen i alla regnbågens färger. Detta tröttar ut ögonen och distraherar användarens uppmärksamhet. Det ser inte "coolt ut". Markering används när det är nödvändigt att dra användarens uppmärksamhet på ett specifikt element eller en specifik del av fönstret. Till exempel färgposter som innehåller fel med ljusröd färg eller, omvänt, postposter som framgångsrikt kontrollerades med ljusgrön färg.

Slutsats

Det finns en mycket bra metod som gör att du kan hitta brister i programmet i allmänhet och gränssnittet i synnerhet. Det är enkelt: föreställ dig att du är i användarens plats och försök i en halvtimme att arbeta som han arbetar. Det är ännu bättre om din användare är inom räckhåll (till exempel arbetar i samma organisation). I det här fallet, sitt bredvid honom, eller ännu bättre, istället för honom, och försök att göra hans arbete. Ange data, ändra den, visa rapporter osv. Om du inte vet hur du gör det rätt, fråga din användare. Gör inte bara en eller två operationer av samma typ, som i felsökningsläge, utan 20-30, eller ännu fler olika operationer, i olika ordningsföljder. Glöm att ange något eller ange det felaktigt och se hur programmet reagerar på det. Du kommer snabbt att se svagheterna i ditt program.

Författaren till artikeln automatiserade arbetet i antagningskommittén vid universitetet, och under det första året av att introducera programmet spenderade han 3-4 timmar om dagen i antagningskommittén, registrerade sökande, fyllde i deras personuppgifter och utfärdade dem rapporter om godkända prov. Och för resten arbetstid rättade fel och brister. Tro mig, nästa år kommer det praktiskt taget inga problem kvar. Samma sak hände vid införandet av personalmodulen.

Ha därför användarupplevelsen i åtanke. Gör det enkelt och trevligt för dem att arbeta med dina program.

Ett och det mesta styrkor miljö Delphi programmeringär dess öppna arkitektur, tack vare vilken Delphi tillåter en sorts metaprogrammering, så att du kan "programmera programmeringsmiljön." Detta tillvägagångssätt översätter Delphi till hög kvalitet ny nivå applikationsutvecklingssystem och låter dig bädda in ytterligare verktyg i denna produkt som stöder nästan alla stadier av skapandet applikationssystem. Ett så stort utbud av möjligheter öppnar sig tack vare konceptet med så kallade öppna gränssnitt implementerade i Delphi, som är den sammanbindande länken mellan IDE (Integrated Development Environment) och externa verktyg.

Den här artikeln är tillägnad Delphis öppna gränssnitt och ger en översikt över de funktioner de tillhandahåller. Delphi definierar sex öppna gränssnitt: verktygsgränssnitt, designgränssnitt, expertgränssnitt, filgränssnitt, redigeringsgränssnitt och versionskontrollgränssnitt. Det är osannolikt att vi inom ramen för denna artikel skulle kunna täcka och illustrera i detalj var och en av dem. Delphis källtexter kommer att hjälpa dig att mer grundligt förstå de problem som övervägs; lyckligtvis har utvecklarna försett dem med detaljerade kommentarer. Deklarationer av klasser som representerar offentliga gränssnitt finns i motsvarande moduler i katalogen...\Delphi\Source\ToolsAPI. Designgränssnittet (modulen DsgnIntf.pas) tillhandahåller verktyg för att skapa egenskapsredigerare och komponentredigerare.

Egenskaps- och komponentredigerare är ett ämne som är värt en separat diskussion, så låt oss bara komma ihåg att egenskapsredigeraren kontrollerar objektinspektörens beteende när den försöker ändra värdet på motsvarande egenskap, och komponentredigeraren aktiveras när dubbelklicka vänster musknapp på bilden av komponenten placerad på formuläret. Versionskontrollgränssnitt (VCSIntf.pas-modul) är avsett för att skapa versionskontrollsystem. Sedan version 2.0 stöder Delphi det integrerade versionskontrollsystemet Intersolv PVCS, så i de flesta fall finns det inget behov av att utveckla ditt eget system. Av denna anledning kommer vi också att utelämna hänsyn till versionskontrollgränssnittet. Filgränssnitt (FileIntf.pas-modul) låter dig åsidosätta IDE:s fungerande filsystem, vilket gör det möjligt att välja din egen metod för att lagra filer (till exempel i Memo-fält på databasservern). Redigeringsgränssnitt (modul EditIntf.pas) ger tillgång till källtextbufferten, som låter dig analysera och generera kod, bestämma och ändra markörpositionen i kodredigeringsfönstret och även styra den syntaktiska markeringen av källtexten.

Specialklasser tillhandahåller gränssnitt till komponenter som placerats på formuläret (definierar typen av komponent, hämtar referenser till överordnade och underordnade komponenter, får åtkomst till egenskaper, överför fokus, tar bort, etc.), till själva formuläret och till projektresursfilen. Redigera gränssnitt låter dig också identifiera så kallade modulära notifierare som bestämmer reaktionen på händelser som att ändra källtexten för en modul, ändra ett formulär, byta namn på en komponent, spara, byta namn på eller ta bort en modul, ändra en projektresursfil, etc. Verktygsgränssnitt (ToolIntf-modul. pas) ger utvecklare ett sätt att skaffa allmän information om tillståndet för IDE och att utföra sådana åtgärder som att öppna, spara och stänga projekt och enskilda filer, skapa en modul, få information om det aktuella projektet (antal moduler och formulär, deras namn, etc.), registrering filsystem, organisation av gränssnitt till enskilda moduler m.m. Förutom modulära meddelanden, definierar Tool Interface tilläggsmeddelanden som meddelar om händelser som att öppna/stänga filer och projekt, ladda och spara en skrivbordsprojektfil, lägga till/exkludera projektmoduler, installera/avinstallera paket, kompilera ett projekt och in Till skillnad från modulära meddelanden, tillåter tilläggsaviseringar dig att avbryta körningen av vissa händelser.

Dessutom ger verktygsgränssnittet ett sätt att komma åt huvudmenyn i Delphi IDE, så att du kan bädda in ytterligare objekt i den. Expertgränssnitt (ExtIntf.pas-modul) är grunden för att skapa experter - mjukvarumoduler inbyggda i IDE för att utöka dess funktionalitet. Ett exempel på en expert är Delphi Database Form Wizard, som genererar ett formulär för att visa och ändra innehållet i en databastabell. Efter att ha definierat expertklassen måste vi se till att Delphi "lär sig" om vår expert. För att göra detta måste du registrera den genom att anropa RegisterLibraryExpert-proceduren och skicka den till en instans av expertklassen som en parameter. Som en illustration, låt oss skapa en enkel expert i esStandard-stilen, som, när du väljer motsvarande Delphi-menyalternativ, visar ett meddelande som säger att det körs. Som du kan se från tabellen ovan kräver esStandard-stilen att sex metoder åsidosätts:

För att experten ska kunna ”sättas i verket” måste du välja menyalternativet Komponent/Installera komponent..., välja modulen som innehåller experten (i vårt fall exmpl_01.pas) i dialogrutan Bläddra, klicka på OK och efter kompilering av dclusr30.dpk-paketet I Delphis huvudmeny, i hjälpsektionen, bör objektet Simple Expert 1 visas, när det är valt, visas informationsmeddelandet "Standard Expert started!". Varför Delphi placerar expertmenyalternativet i hjälpsektionen förblir ett mysterium. Om du inte gillar det faktum att menyalternativet visas varhelst Delphi vill, och inte där du vill, är följande alternativ möjligt: ​​skapa en expert på tilläggsstilen, vilket eliminerar det automatiska skapandet av menyalternativet, och lägg till menyalternativet "manuellt" med hjälp av verktygsgränssnittet. Detta gör att du kan ställa in platsen för det nya objektet i huvudmenyn på ett godtyckligt sätt.

För att lägga till ett menyobjekt, använd klassen TIToolServices - grunden för verktygsgränssnittet - och klasserna TIMainMenuIntf, TIMenuItemIntf, som implementerar gränssnitt till IDE-huvudmenyn och dess objekt. En instans av ToolServices-klassen TIToolServices skapas av IDE själv när den initieras. Observera att ansvaret för att släppa gränssnitt till Delphis huvudmeny och dess objekt vilar helt på utvecklaren. Längs vägen, låt oss komplicera expertens funktionella belastning lite: när du aktiverar dess menyalternativ kommer den att utfärda ett certifikat om namnet på projektet som öppnas i det här ögonblicket i miljön: I det här exemplet är den centrala platsen upptagen av funktionen AddIDEMenuItem, som lägger till ett menyalternativ till huvudmenyn i Delphi IDE. Som parametrar tar den emot texten för det nya menyalternativet, dess identifierare, identifieraren för objektet innan det nya objektet infogas, den symboliska representationen av nyckeln, som tillsammans med Ctrl-tangenten kan användas för att snabb åtkomst till ett nytt objekt och en händelsehanterare som motsvarar valet av ett nytt objekt. Vi har lagt till ett nytt menyalternativ i avsnittet Visa före alternativet Klockor.

Låt oss nu bekanta oss med anmälare. Låt oss definiera en tilläggsnotifierare som spårar stängning/öppning av projekt och justerar fältet som lagrar namnet på det aktiva projektet i enlighet därmed (vi kommer att utelämna implementeringen av metoder som inte har genomgått förändringar jämfört med föregående exempel för korthetens skull): implementera anmälaren har vi definierat klassen TAddInNotifier, som är en avkomling av TIAddInNotifier, och åsidosatt metoden FileNotification. IDE kommer att anropa denna metod varje gång en händelse inträffar som tilläggsmeddelaren kan svara på (varje sådan händelse indikeras av en motsvarande konstant av typen TFileNotification). Expertfältet i klassen TAddInNotifier används för att respons med en expert (TAddInNotifier.FileNotification-metoden). I expertens destruktor är anmälaren oregistrerad och anmälaren förstörs. Låt oss nu illustrera användningen av modulära meddelanden. Låt oss skapa en tilläggsexpert som skickar meddelanden om varje handling för att spara en projektfil (för korthetens skull presenterar vi inte implementeringen av metoder som redan är bekanta för oss): I det här exemplet övervakar tilläggsexperten händelser motsvarande öppning/stängning av projekt.

Varje gång ett projekt öppnas registreras en modulär anmälare som motsvarar projektfilen. När det gäller implementering liknar modulära notifiers som tilläggsnotifiers: vi definierar klassen TModuleNotifier, som är en ättling till TIModuleNotifier, och åsidosätter dess Notify- och ComponentRenamed-metoder. IDE anropar Notify-metoden när vissa händelser relaterade till denna modul inträffar; Inom denna metod bestäms reaktionen på en viss händelse. Metoden ComponentRenamed anropas när namnet på en komponent i modulformuläret ändras. Observera att vi inte använder denna metod, men vi måste åsidosätta den, annars kommer en abstrakt metod av basklassen att anropas när komponentnamnet ändras, vilket leder till oförutsägbara konsekvenser.

Att registrera en modulär anmälare är en något mer komplicerad process jämfört med att registrera en tilläggsmeddelande: först skaffar vi modulgränssnittet (TIModuleInterface), och registrerar sedan anmälaren med modulgränssnittet. När projektet stängs avregistreras den modulära anmälaren (igen med TIModuleInterface) och anmälaren förstörs. Avslutningsvis kommer vi att visa hur du kan bestämma markörens position i kodredigeringsfönstret. Låt oss skapa en expert som, när du väljer lämplig menypost, skulle visa ett meddelande som innehåller namnet på den aktiva filen och markörpositionen i den (implementering av endast de metoder som är väsentliga för detta exempel visas): För att bestämma markörens position, vi måste erhålla följande sekvens av gränssnitt: modulärt gränssnitt (TIModuleInterface); kodredigeringsgränssnitt (TIEditorInterface); modulpresentationsgränssnitt i redigeringsfönstret (TIEditView).

Om källtextfilen (*.pas) är aktiv när du väljer ett expertmenyalternativ, visas ett meddelande som innehåller namnet på den aktiva filen och den aktuella markörpositionen i den. Om den aktiva filen inte är en pas-fil, skickas inte meddelandet. För att få namnet på den aktiva filen, använd metoden GetCurrentFile i klassen TIToolServices. Detta avslutar vår övervägande av sätt att använda öppna gränssnitt. CD-ROM-skivan innehåller källkoden för alla de givna exemplen. CD-ROM-skivan innehåller också ett mer komplext och detaljerat exempel, som innehåller en tilläggsexpert som låter användaren bokmärka källtexten för Delphi-moduler. En kort guide för att installera och använda Bookmarks Expert finns i filen bkmrks97.htm. Så den här artikeln ger en allmän översikt över öppna gränssnitt och ger exempel på hur de används. Låt oss upprepa en gång till: tack vare tillgången på källkoder för öppna gränssnitt kan du enkelt förstå detaljerna som intresserar dig. Vi hoppas att de olika möjligheter som öppna gränssnitt erbjuder kommer att ge dig mer än en djärv och användbar idé.

bara för resultatet

strikt efterlevnad av deadlines

Genomskinlighet

projektgenomförande

teknisk support som gåva

Programmering, ändringar, samråd om 1C

Hur vi arbetar

1. Vi diskuterar problemet över telefon. I närvaro av Fjärranslutning- Visa på din datorskärm.

2. Vi uppskattar arbetet i rubel om projektet är stort, om inte, det ungefärliga antalet timmar.

3. Vi får jobbet gjort.

4. Du accepterar arbetet i ditt program, om det finns några brister rättar vi till dem.

5. Vi utfärdar en faktura, du betalar.

Kostnad för arbete

1. Allt arbete är uppdelat i 3 kategorier: konsultation, uppdatering av en standardkonfiguration, utveckling eller programmering av en ny rapport, bearbetning, knapp osv.

3. Arbete över 10 timmar måste förberedas i förväg. teknisk uppgift med beskrivning och kostnad för arbetet. Arbetet påbörjas efter att de tekniska specifikationerna har överenskommits med dig.

Teknisk support

1. Om du hittar några fel i tidigare accepterat arbete inom 3 månader korrigerar vi dem kostnadsfritt.

2. För stamkunder rättar vi kostnadsfritt till eventuella brister i vårt arbete inom ett år.

Programvara för att hantera ditt företag.

Köp 1C:Enterprise

Vi är officiell återförsäljare 1C företag, kan du köpa från oss olika mjukvaruprodukter och licenser. Förutom att köpa "lådan" hjälper vi dig att installera programmet, ge råd och göra grundläggande inställningar.

  • Bokföring
  • Butiksautomation
  • Grossist
  • Installationshjälp och första installationen ingår i paketet!
  • Finjustera konfigurationer efter kundens behov, utveckla nya moduler i avsaknad av nödvändiga funktioner i standardkonfigurationen.
1c redovisning 1C: Handelshantering 1C: Detaljhandel 1C: Löne- och personalhantering
Från 3300 rub. Från 6700 rubel. Från 3300 rub. Från 7400 rub.

Serverförsörjning.

Omedelbar installation av server + 1C.

Ingen server? Inga problem, vi väljer och konfigurerar snabbt en server i molnet. För en liten avgift får du en mycket pålitlig lösning.

  • Tillgänglighet 24/7
  • Du behöver inte behålla din egen systemadministratör(besparingarna kommer att täcka dina serverkostnader).
  • Snabb installation och installation av 1C på servern, om 3 dagar har du redan ett fullt fungerande system.
  • Du kan flytta till lokal server, om lösningen inte är tillfredsställande.

SMS från din 1C

Vill du att dina kunder ska ta reda på om kampanjer och rabatter? Återkommer inte kunderna? Ställ in att skicka SMS direkt från 1C!

Vårt företag kommer snabbt att kunna ställa in att skicka SMS till dina kunder direkt från 1C. Exempel på händelser som kan automatiseras:

  • Tack för köpet och bonusar delas ut direkt efter nästa köp.
  • Intjäning av bonusar till kortet som en present till en födelsedag\annan betydelsefull eller semester.
  • Meddelande om varuankomst till lagret.
  • Gåvobonusar går ut.
  • Meddelande om mottagande av förskottsbetalning och reservation av varor.
  • Adress med vägbeskrivning till butik/kontor, telefonnummer.
  • Och så vidare.

Installation i 1C kan göras av våra specialister eller dina anställda. Du kan se taxorna på sidan för SMS-taxor.

  • Garanterad SMS-leverans, pengar debiteras endast för levererade SMS.
  • Separat pris för varje SMS.
  • Fyll på ditt saldo på olika sätt.
  • Se historiken för alla skickade SMS när som helst.
  • Avsändarens namn istället för det digitala numret i meddelandemottagarens telefon.

Objektorienterad programmering (OOP) tillhandahåller, förutom konceptet med en klass, också det grundläggande konceptet för ett gränssnitt.

Vad är ett gränssnitt och vilka funktioner har det att arbeta med det i programmeringsspråket Delphi?

Interface är en semantisk och syntaktisk konstruktion i programkod som används för att specificera de tjänster som tillhandahålls av en klass eller komponent (Wikipedia).

I huvudsak definierar ett gränssnitt en lista över egenskaper och metoder som måste användas när man arbetar med klassen som detta gränssnitt implementerar, såväl som deras signatur (namn, datatyp, accepterade parametrar (för procedurer och funktioner), etc.). En klass som implementerar ett visst gränssnitt måste alltså implementera alla dess komponenter. Dessutom i strikt överensstämmelse med hur de beskrivs i den.

Gränssnitt jämförs ofta med abstrakta klasser, men trots alla likheter är denna jämförelse inte helt korrekt. Som ett minimum låter abstrakta klasser dig kontrollera medlemmarnas synlighet. Samtidigt är scopes inte definierade för gränssnitt.

Gränssnitt låter dig göra arkitekturen mer flexibel, eftersom de förenar åtkomst till den eller den funktionaliteten, och låter dig också undvika ett antal problem som är associerade med klassarv (gränssnitt kan också ärvas från varandra).

För att deklarera ett gränssnitt i Delphi, använd nyckelordet gränssnitt. Detta är samma nyckelord som definierar den del av modulen som kan nås utifrån (mellan gränssnittet och implementeringsnyckelorden). Men när du deklarerar ett gränssnitt används en annan syntax, som liknar att deklarera klasser.

Delphi/Pascal

IMyNewInterface = gränssnittsprocedur InterfaceProc; slutet;

IMyNewInterface =gränssnitt

procedur InterfaceProc ;

slutet ;

Således är syntaxen för gränssnittsdeklarationen i sig inte fundamentalt skild från andra programmeringsspråk (funktionerna i syntaxen baserad på Pascal räknas inte). Samtidigt har implementeringen av gränssnitt ett antal karakteristiska egenskaper.

Faktum är att Delphi-gränssnitt ursprungligen introducerades för att stödja COM-teknik. Därför innehåller IInterface-gränssnittet, som i Delphi är förfader för alla andra gränssnitt (en sorts analog till TObject), redan tre grundläggande metoder för att arbeta med denna teknik: QueryInterface, _AddRef, _Release. Som ett resultat, om en klass implementerar något gränssnitt, måste den också implementera dessa metoder. Även om denna klass inte är avsedd för COM-arbete.

På grund av den här funktionen hos IInterface-gränssnittet leder användningen av gränssnitt i Delphi i de flesta fall till tillägg av uppenbart oanvända funktioner till klassen.

Det finns en biblioteksklass TInterfaceObject som redan innehåller implementeringen av dessa metoder och, när man ärver från den, finns det inget behov av att implementera dem själv. Men eftersom Delphi inte har stöd för arv av flera klasser, orsakar användningen ofta bara ytterligare svårigheter vid design och implementering av redan nödvändig funktionalitet.

Allt detta ledde till att, trots alla möjligheter som gränssnitt ger, de praktisk användning I Delphi har nästan ingenting gått utöver att arbeta med COM.

Att vara optimerad för att arbeta huvudsakligen med denna teknik, gränssnitten, eller snarare de funktionalitet och arkitektoniska begränsningar som de nödvändigtvis lägger till, motiverar inte sig själva när de löser andra problem.

Därför är många Delphi-programmerare fortfarande i själva verket berövade ett kraftfullt och flexibelt verktyg för att utveckla applikationsarkitektur.

Skapande gränssnitt användaren reduceras till att välja från en palett av komponenter som är nödvändiga för driften av programmet Delphi komponenter, anställda gränssnitt ledning, liksom gränssnitt visa information och överföra den till formuläret med efterföljande layout.

Användargränssnittet du skapar bör använda standardelement som användarna känner till och ge maximal bekvämlighet. Allt detta bestäms i slutändan av ett sådant kriterium som gränssnittets effektivitet - maximala resultat med minimal ansträngning.
Principerna för att skapa ett användarvänligt gränssnitt är kända. Som de mest allmänna principerna när du skapar användargränssnitt Tre huvudpunkter kan övervägas:

  1. Programmet ska hjälpa till att slutföra en uppgift, och inte bli den uppgiften.
  2. När man arbetar med programmet ska användaren inte känna sig som en dåre.
  3. Programmet ska fungera på ett sådant sätt att användaren inte betraktar datorn som en idiot.
Första principen- detta är den så kallade "transparensen" för gränssnittet. Användargränssnittet ska vara intuitivt, lätt att lära sig och inte skapa problem för användaren som han kommer att behöva övervinna under arbetsprocessen. Använd standardkomponenter utan onödig utsmyckning, använd välbekanta kontrolltekniker som används av liknande program och du kommer att uppnå prestandakriterierna första principen.

Andra principenär att försumma användarnas intellektuella förmågor. Av min egen erfarenhet vet jag att ofta användare inte bara inte vet hur man arbetar på en dator, utan är helt enkelt rädda för att göra något på egen hand. Därför bör användargränssnittet vara så användarvänligt som möjligt.
Dessutom är användarnas farhågor ofta berättigade, eftersom kostnaden för programmet, och till och med själva datorn, inte kan jämföras med kostnaden för till exempel en databas som skapats under många års ansträngning. Det är därför, när en programmerare skapar ett användargränssnitt, måste alltid bygga in "idiotsäkert skydd" i programmet - mot felaktiga åtgärder och användarinmatning av felaktig data. Men vissa programmerare rycker för mycket med sådant skydd, gör det för påträngande, och som ett resultat liknar programmets funktion det berömda "ett steg till vänster, ett steg till höger anses vara en flykt"! Och det som programmeraren skapar som en lösning på ett problem börjar skapa problem själv.
Att följa andra principen det finns inget behov av att låta programmet "korrigera" användarens handlingar och indikera exakt hur han ska agera, vilket tvingar honom in i en smal ram. Du bör inte heller låta dig ryckas för mycket med att visa informationsmeddelanden, särskilt dialogruta, eftersom detta distraherar användaren från arbetet. Det skulle vara bättre att ge möjligheten att inaktivera tips helt och hållet.

Tredje principenär att skapa ett program med högsta möjliga "mentala" förmågor. Trots den snabba utvecklingen datorutrustning, även mycket använda program kan endast mycket villkorligt kallas att ha artificiell intelligens. De stör användarens arbete genom att visa dialogrutor med dumma frågor som skapar förvirring även i de enklaste situationerna. Som ett resultat utbrister användarna i sina hjärtan: "Vilken dum maskin!"
Jag är personligen irriterad över de ständiga frågorna från nästan alla textredigerare om huruvida den ändrade texten ska sparas, även om den ursprungliga och nuvarande texten inte skiljer sig åt i någon symbol. Ja, jag skrev något, men sedan lämnade jag tillbaka allt, är det verkligen omöjligt att lista ut det! Jag måste kolla om jag inte har förstört något trots allt.

Försök att följa följande regler:

Standard gränssnittselement
Använd komponenter som är standard för detta gränssnittselement. Efter att ha stött på ditt program kommer användaren inte att slösa tid på att lära känna varandra, utan kommer omedelbart att börja arbeta - detta är ett av tecknen på ett professionellt gjort program.
Liten palett av verktyg
Försök att inte använda för många olika komponenter. Och naturligtvis, efter att ha använt en standardkomponent någonstans på ett ställe, i ett liknande fall också använda den.
Lika avstånd mellan kontrollerna
Placera gränssnittselement på samma avstånd från varandra. Komponenter som är utspridda på måfå skapar känslan av en oprofessionellt tillverkad produkt. Och vice versa, noggrant verifierad placering av knappar, omkopplare, kryssrutor och andra komponenter som utgör gränssnittet på formuläret är ett tecken på högkvalitativt arbete.
TabOrder. "Korrekt ordning
TabOrderär den ordning i vilken skärmmarkören rör sig över kontrollerna när en tangent trycks ned Flik. I ett korrekt skrivet program rör sig markören enligt logiken i användarens arbete med programmet. När man skapar ett program byter programmeraren ofta komponenter, tar bort några och lägger till andra efter behov. Som ett resultat, i det färdiga programmet hoppar markören kaotiskt runt formuläret. Efter att ha slutfört programmet, glöm inte att konfigurera TabOrder.
Val av teckensnitt
Lämna bara typsnitten ifred. Delphis standardteckensnitt är lämpliga för alla system som ditt program kan köras på. Använd fetstil bara för att markera viktiga element. Ansökan kursiv och speciellt understrykning, som användaren kan missta för en hyperlänk är dålig form.
Val av färger
När det gäller färgerna på gränssnittselement, precis som i fallet med typsnitt, är det bättre att lämna dem som standard som standard. Delphi använder Windows systempaletten, och användaren kan enkelt anpassa färgerna genom att ändra den.
Alternativ förvaltning
Ett professionellt gjort program ska kunna styras inte bara med musen, utan även med tangentbordet. Det ska inte finnas några funktioner som bara kan utföras med musen (rita med grafiska redaktörer räknas inte!). För de mest använda funktionerna bör du tillhandahålla "snabbtangenter" för snabb åtkomst.
Gränssnittstenar
När det gäller specifika delar av användargränssnittet beror kvaliteten på användarinteraktionen med programmet på:
  • kontrollelementets överensstämmelse med den uppgift det utför;
  • regler enligt vilka kontrollelementet verkar.
    Den här sidan diskuterar reglerna för att skapa vissa gränssnittselement.
Och nu vill jag visa vilka verktyg Delphi erbjuder för att hantera komponenter på formuläret, deras relativa position och markörbeteende när en tangent trycks ned Flik.

För att arrangera komponenterna relativt varandra i rätt ordning, först det är nödvändigt att markera dem. Du kan helt enkelt ringa in området på formuläret som innehåller de valda komponenterna. Eller genom att hålla " Flytta", använd samma mus för att ange varje komponent som ska väljas. Klicka med musen igen på den valda komponenten (medan du trycker på " Flytta") avmarkerar det.

De valda komponenterna kan hanteras som en helhet - flyttas runt i formuläret, tilldelas värden till samma egenskaper, kopieras (för installation, till exempel på ett annat formulär), till och med raderas.

Högerklicka nu på en av komponenterna och välj från popup-menyn Position -> Justera... En dialogruta visas där du kan justera den horisontella och vertikala positionen för komponenterna i gruppen. Till exempel måste vi rikta in våra fyra knappar till vänster och se till att de har samma vertikala avstånd mellan dem. För att göra detta, välj alternativknapparna Horisontell: Vänster sidor Och Vertikal: Utrymme lika.

Genom att välja objektet Centrum, kommer vi att ordna komponenterna så att deras mittpunkter kommer att placeras på samma linje horisontellt eller vertikalt, och objektet Centrera i fönstret flyttar komponenter till mitten av fönstret, även horisontellt eller vertikalt.

På samma menyrad Flik O rder... gör att en dialogruta visas som styr hur markören rör sig genom gränssnittselement när en tangent trycks ned Flik. När formuläret visas på skärmen kommer markören naturligtvis att vara på den komponent som finns på den första raden i dialogrutan. Och sedan flyttas den ner på listan. I dialogrutan styr två blå upp- och nedpilar positionen för den valda komponenten. Välj önskad komponent, använd pilarna för att flytta den till önskad rad i listan och så vidare.

När du väljer ett menyalternativ Kontroll -> En undermeny visas som består av två poster:

  • Ta fram
  • Skicka tillbaka
Dessa är komponentmetoder som också är tillgängliga programmatiskt. Button1.SendToBack flyttar knappen till "bakgrunden" och Button1.BringToFront- ta fram". Det vill säga, om en komponent är placerad ovanför en annan byter dessa metoder sina positioner. De fall då detta kan gälla är ganska uppenbara.


Topp