Projektuojant formos į Delfi, dažnai naudinga rašyti kodą, kad jūsų programa (formos ir visi objektai) atrodytų iš esmės vienodi, nepaisant to, kokia ekrano skiriamoji geba.
Pirmas dalykas, kurį norite atsiminti ankstyvame formos kūrimo etape, yra tai, ar leisite formai padidinti mastelį, ar ne. Neatlyginimo pranašumas yra tas, kad vykdymo metu niekas nesikeičia. Neatlyginimo trūkumas yra tas vykdymo metu niekas nesikeičia (jūsų forma gali būti per maža arba per didelė, kad galėtumėte skaityti kai kuriose sistemose, jei ji nėra mastelio).
Jei nesiruošiate išmatuoti formos, nustatykite Mastelis į melagingą. Priešingu atveju nustatykite nuosavybę į True. Taip pat, nustatykite „AutoSroll“ netiesa: priešingai, tai reikštų formos rėmelio dydžio nekeitimą vykdant, o tai neatrodo gerai, kai formos turinys daryti pakeisti dydį.
Svarbios pastabos
Nustatykite formos šriftą į keičiamą „TrueType“ šriftą, pavyzdžiui, „Arial“. Tik „Arial“ suteiks jums šriftą norimo aukščio taške. Jei programoje naudojamas šriftas nėra įdiegtą tiksliniame kompiuteryje, tada „Windows“ pasirinks naudoti alternatyvų šriftą toje pačioje šriftų šeimoje vietoj to.
Nustatykite formą Padėtis nuosavybė kažkam, išskyrus sukurtas, kuri palieka formą ten, kur ją palikote projektavimo metu. Paprastai tai nutinka 1280x1024 ekrano kairėje pusėje ir visiškai neveikia 640x480 ekrano.
Negalima sutraukti formos valdiklių - palikite mažiausiai 4 pikselius tarp valdiklių, kad vieno taško pakeitimas kraštų vietose (dėl mastelio keitimo) nebūtų rodomas kaip sutampantys valdikliai.
Vienos eilutės etiketėms, kurios yra kairėn arba gerai suderinta, nustatyta Automatinis dydis į tiesą. Priešingu atveju, nustatykite Automatinis dydis į melagingą.
Įsitikinkite, kad etiketės komponente yra pakankamai tuščios vietos, kad būtų galima pakeisti šrifto plotį - tuščia vieta, kuri sudaro 25% dabartinio ilgio stygos ekrano ilgis yra šiek tiek per didelis, bet saugus. Jei ketinate versti programą į kitas kalbas, styginių etiketėms reikės bent 30% išplėtimo vietos. Jei Automatinis dydis yra klaidinga, įsitikinkite, kad tinkamai nustatėte etiketės plotį. Jei Automatinis dydis yra tiesa, įsitikinkite, kad yra pakankamai vietos etiketės plėtrai.
Kelių eilučių, žodžių apklijuotų etikečių, apačioje palikite bent vieną tuščios vietos eilutę. Tai jums reikės norint sugauti perteklių, kai tekstas įvyniojamas kitaip, kai šrifto plotis keičiasi keičiant mastelį. Nemanykite, kad dėl to, kad naudojate didelius šriftus, nereikia leisti teksto perpildymo - kažkieno dideli šriftai gali būti didesni nei jūsų!
Atsargiai atidarykite projektą IDE skirtingomis rezoliucijomis. Forma „PixelsPerInch“ nuosavybė bus modifikuota, kai tik atidaroma forma, ir, jei įrašysite projektą, ji bus išsaugota DFM. Geriausia išbandyti programą paleidžiant ją atskirai ir redaguoti formą tik viena skiriamąja geba. Redagavimas esant skirtingai raiškai ir šrifto dydžiui sukelia komponentų dreifo ir dydžio problemas. Įsitikinkite, kad nustatėte savo „PixelsPerInch“ visoms jūsų formoms iki 120. Numatytasis reikšmė yra 96, o tai sukelia mastelio keitimo problemas mažesne skiriamąja geba.
Kalbant apie komponentų dreifą, nekeiskite formos mastelio kelis kartus, projektavimo metu ar runtime. Kiekvienas perskaičiavimas įveda apvalinimo klaidas, kurios kaupiasi labai greitai, nes koordinatės yra griežtai neatsiejamos. Kai trupmeniniai kiekiai yra suskaidomi nuo valdymo elementų ištakų ir dydžių kiekvieną kartą iš eilės keičiant skalę, valdikliai pasirodys šliaužiantys į šiaurės vakarus ir taps mažesni. Jei norite leisti savo vartotojams pakeisti skalę bet kokį skaičių kartų, prieš kiekvieną mastelį pradėkite naujai įkelta / sukurta forma, kad mastelio paklaidos nesikauptų.
Apskritai nereikia formuluoti bet kurios konkrečios skiriamosios gebos, tačiau labai svarbu peržiūrėti jas išvaizda 640x480 formate su dideliais ir mažais šriftais ir aukšta skiriamąja geba su mažais ir dideliais šriftais, prieš išleidžiant jūsų programa. Tai turėtų būti jūsų įprasto sistemos suderinamumo tikrinimo sąrašo dalis.
Atkreipkite dėmesį į visus komponentus, kurie iš esmės yra vienos linijos TMemos—dalykai, kaip „TDBLookupCombo“. „Windows“ kelių eilučių redagavimo valdiklis visada rodo tik ištisas teksto eilutes - jei valdiklis yra per trumpas jo šriftui, a TMemo visai nieko nerodys (a TEdit parodys nukirptą tekstą). Tokiems komponentams geriau padaryti keletą taškų per didelius, nei būti per mažus ir nerodyti jokio teksto.
Atminkite, kad visas mastelio keitimas yra proporcingas šrifto aukščio skirtumui tarp vykdymo laiko ir projektavimo laiko, ne pikselių skiriamoji geba arba ekrano dydis. Taip pat atsiminkite, kad keičiant formą padidės jūsų valdymo elementų kilmė - jūs negalite labai padidinti komponentų, jei taip pat perkelsite juos šiek tiek.
Inkarai, suderinimas ir apribojimai: Trečiosios šalies VCL
Kai žinote, kokius dalykus reikia atsiminti, kai keičiate „Delphi“ formas skirtingomis ekrano rezoliucijomis, esate tam pasiruošę kodavimas.
Kai dirbate su „Delphi“ 4 ar naujesne versija, yra sukurtos kelios ypatybės, padedančios mums išlaikyti formos valdiklių išvaizdą ir išdėstymą.
Naudokite Lygiuoti valdiklį suderinti su formos ar skydelio viršuje, apačioje, kairėje arba dešinėje, ir palikti jį ten, net jei pasikeis formos, skydelio ar komponento, kuriame yra valdiklis, dydis. Kai tėvo dydis yra keičiamas, išlygintas valdiklis taip pat keičiasi taip, kad jis ir toliau tęsiasi viršutinis, apatinis, kairysis arba dešinysis tėvo kraštas.
Naudokite Suvaržymai nurodyti mažiausią ir didžiausią valdiklio plotį ir aukštį. Kai apribojimuose yra didžiausia ar mažiausia reikšmė, valdiklio dydis negali būti pakeistas, kad būtų pažeisti šie apribojimai.
Naudokite Inkarai užtikrinti, kad valdiklis išlaikytų savo dabartinę padėtį, palyginti su jo tėvo briaunomis, net jei tėvo dydis yra padidintas. Kai jo tėvo dydis yra keičiamas, valdiklis išlaiko savo padėtį kraštų atžvilgiu, prie kurių jis tvirtinamas. Jei valdiklis yra pritvirtintas prie priešingų pradinių briaunų, valdiklis ištempiamas, kai jo pagrindinio elemento dydis yra padidinamas.
procedūra „ScaleForm“
(F: TForm; Ekrano plotis, Ekrano aukštis: „LongInt“);
prasideda
F.Skaldas: = Tiesa;
F.AutoScroll: = klaidingas;
F.Position: = „poScreenCenter“;
F.Font. Vardas: = 'Arial';
if (Ekranas. Plotis <> Ekrano plotis) tada pradėkite
F.Aukštis: =
„LongInt“ (F.Height) * „LongInt“ (ekranas. Aukštis)
div Ekrano aukštis;
F. Plotis: =
„LongInt“ (F. plotis) * „LongInt“ (ekranas. Plotis)
div Ekrano plotis;
F.ScaleBy (ekranas. Plotis, ekrano plotis);
galas;
galas;