font gui w windows

font gui w windows
BO
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:93
0

Jak wyciągnąć aktualną nazwę podstawowego fonta gui w windows, czyli tego z okien dialogowych, oznaczanego symbolicznie 'MS shell Dlg'?

1.LOGFONT z GetObject nie działa - podaje nadal face name = 'MS shell Dlg'.
2. OUTLINETextMetrics - to samo...

  1. SystemParametersInfo - chyba też nie ma tam tego:
    https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfoa

  2. GetSystemMetrics... też nie ma.
    https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getsystemmetrics

Kiedyś to znalazłem, ale zapomniałem jaka to funkcja była.

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:minuta
0

Aktualną (Vista+) nazwą podstawowego fonta GUI jest Segoe UI o rozmiarze 9.
Nie trzeba go wyciągać, tak jest i już.

06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
1

GetStockObject + DEFAULT_GUI_FONT

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:minuta
3

Ja może zacytuję oficjalną dokumentację:

a.png

Źródło:

https://docs.microsoft.com/en-us/windows/win32/uxguide/vis-fonts

Polecam poczytanie całych działów "Design basics" i "Guidelines", a wiele się wyjaśni.
Jest też tam link do PDF-a.

  • a.png (19 KB) - ściągnięć: 18
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Poznań
  • Postów:8759
2

@Azarien: twoja odpowiedź jest całkowicie merytorycznie poprawna, ale nie jestem pewien, czy OP o to pytał. Moim zdaniem chodziło o coś innego - sytuację, w której uzytkownik zmieni sobie domyślny font systemowy na jakikolwiek inny - wtedy porada z Tahoma albo Segue nie będzie adekwatna.


edytowany 1x, ostatnio: cerrato
Azarien
Microsoft zaleca stosować się do tabelki. Jak chcemy MS Shell Dlg to piszemy "MS Shell Dlg". Nie trzeba tego pobierać.
cerrato
I jeśli ktoś sobie zmieni systemowe czcionki to ten Shell dialog zwróci to, co aktualnie jest ustawione w systemie? W sensie, że jeśli sobie ustawie np. czcionkę Arial narrow jako font do wyświetlania interface to czy właśnie taką zostanie zwrócona?
Azarien
Windows już od dawna z poziomu GUI nie pozwala na zmianę czcionek systemowych. A jeśli ktoś coś wyhaczy to… nie wiem. Jego problem.
BO
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:93
0

Wiem jaki font jest używany: Segoe UI, co jest bardzo podobne do Tahoma (w XP chyba to było).

Chodzi o to że nie wiemy co w przyszłości wymyślą, np. 5 lat może to być inna czcionka.

Jest mi to potrzebne, bo chcę zmieniać rozmiar tej czcionki;
np. na dużych monitorach te literki są za małe dla słabiej widzących, zwykle dla starszych ludzi.

A gdy próbuję powiększać wprost ten: 'MS shell Dlg', czyli DEFAULT_GUI_FONT, wtedy jakoś źle to działa, niestety.

Np. gdy chcę go powiększyć z 8p na 9, wtedy nic się nie zmienia - zostaje 8.
A dla 10p powiększa poprawnie, ale to może być za duże.
Podobnie z 11 - robi się z tego 10...

Jakoś kulawo to działa: jakby tylko parzyste akceptuje.

MarekR22
Czy na Windows nie ma jednostek logicznych/naturalnych, by bezboleśnie obsługiwać monitory or rożnym rozmiarze i gęstości pikseli? Dłubanie w tym celu przy rozmiarze fonta, nie wygląda na prawidłowe podejście.
BO
Niekiedy trzeba zmienić czcionkę, np. pogrubić, powiększyć nagłówek, itp.
Stefan_3N
  • Rejestracja:około 6 lat
  • Ostatnio:9 dni
  • Postów:145
1

Pobierz z jakiejś kontrolki statycznej font za pomocą WM_GETFONT.
Dostaniesz uchwyt HFONT.
Dalej GetObject() z tym uchwytem. Dostaniesz wypełnioną strukturę LOGFONT.
W tej strukturze chyba będziesz miał to, czego szukasz.
Możesz zmodyfikować pole lfHeight i wywołać CreateFontIndirect na tej strukturze. Dostaniesz nowy font (np. ze zmieniona wielkością).
Zauważ, że lfHeight może być dodanie i ujemne.


edytowany 1x, ostatnio: Stefan_3N
BO
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:93
0

Tak nie działa, otrzymasz tam font z nazwą: 'MS shell Dlg'.

przykład:

font = Parent->HandleMessage(WM_GETFONT);

SelectObject(dc, font);
LOGFONT lf;

GetObject(lf);

lf.lfHeight = -MulDiv(9, GetDeviceCaps(dc, LOGPIXELSY), 72);

i tu są bzdury w tej strukturce lf, znacz 'MS shell Dlg', a nie faktyczna nazwa.

edytowany 1x, ostatnio: bonifacy
Stefan_3N
  • Rejestracja:około 6 lat
  • Ostatnio:9 dni
  • Postów:145
1

Aż z ciekawości sprawdziłem to.
I jest jak na zrzucie.

Tylko, że:

  1. Po co to wybierasz w kontekście? (po co SelectObject?). To nie ma nic wspólnego z kontekstem urządzenia. Masz pobrać GetObject() dla hFont.
    https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-getobject
    Może próbujesz GetCurrentObject() dla kontekstu?
  2. Najpierw sprawdź, czy kontrolka coś zwróciła. Użyj jakiejś kontrolki, która używa krojów sama z siebie (listView albo TreeView, mi zadziałało na ListView32).
    screenshot-20200629035758.png

edytowany 1x, ostatnio: Stefan_3N
BO
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:93
0

Może to zależy od wersji Windowsa... mi na win7 inaczej to działa.

Generalnie GetObject zwraca LOGFONT z informacją, która była użyta do tworzenia fonta, a nie do tego który został utworzony finalnie.

Np. możesz zrobić tak:

lf.lfFaceName = ""; // brak nazwy !
lf.lfHeight = -6;
lf.quality = ,,,
itd.
...

no i CreateFont coś tam z tego i tak utworzy - nazwa będzie ustalona.

Stefan_3N
  • Rejestracja:około 6 lat
  • Ostatnio:9 dni
  • Postów:145
1

Ten mój zrzut z ekranu jest z Win7.
Pokaż cały kod, którym próbujesz to zrobić, bo czuję, że po prostu robisz to źle.
Poza tym, jak wiesz jak to działa, to czemu pytasz?


cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Poznań
  • Postów:8759
0

Albo niech @Stefan_3N gdzieś wrzuci i udostępni link do swojego EXE. Wtedy będzie pewność, że mamy takie same warunki do prowadzenia eksperymentu, a ewentualne różnice zależą od wersji systemu a nie od inaczej napisanego kodu.


edytowany 1x, ostatnio: cerrato
BO
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:93
0
Kopiuj
  TEXTMETRIC tm;
   LOGFONT lf;

   TClientDC dc(HWindow);
   if( !rFont ) // rFont = new TFont((HFONT)Parent->HandleMessage(WM_GETFONT));
    {
      TFont *f = new TFont((HFONT)Parent->HandleMessage(WM_GETFONT)); // font z dialogu, czyli 'MS Shell Dlg'

//      dc.SelectObject(*f);
      f->GetObject(lf);
      delete f;

      lf.lfHeight = -MulDiv(9, GetDeviceCaps(dc, LOGPIXELSY), 72); // powiększam sobie z 8 na 9, lub 10...

      lf.lfWidth = 0; // szer. standardowa 

      strcpy(lf.lfFaceName, "Segoe UI"); // albo 'Tahoma' -> z tym jest ok, tyle że nie znamy poprawnej nazwy!

      rFont = new TFont(&lf);
    }

   dc.SelectObject(*rFont); // to jest konieczne do uzyskania textMetrics
   dc.GetTextMetrics( tm );

//   OUTLINETEXTMETRIC *po = (OUTLINETEXTMETRIC*)Buf;
//   dc.GetOutlineTextMetrics(1000, *po); tu są nadal bzdury...

   if( !BoldFont ) // wersja pogrubiona
    {
      rFont->GetObject(lf);

//    
      lf.lfWeight = FW_SEMIBOLD; // = 600; bold=700
      lf.lfWidth = 0; // szerokość domyśla 
   
  //    strcpy(lf.lfFaceName, "Tahoma"); z tym będzie ok.

      BoldFont = new TFont(&lf); // tworzy font, ale to jest do dupy...
    }
Stefan_3N
  • Rejestracja:około 6 lat
  • Ostatnio:9 dni
  • Postów:145
1

Powinieneś odczytać font z kontrolki, a nie z dialogu.
Wykonaj ten kod (on jest w WINAPI, ale jak wkleisz wprost gdzieś w Twój program, to też powinien się wykonać. hInstance, to globalna HINSTANCE)

Kopiuj
HWND test=CreateWindow("SysTreeView32","",WS_POPUP, 0, 0, 800, 600, NULL, NULL, hInstance, NULL); //tworzysz kontrolkę tylko po to, żeby z niej odczytać krój
HFONT hFont=(HFONT)SendMessage(test, WM_GETFONT, 0, 0);
if(hFont){
	LOGFONT lf;
	GetObject(hFont, sizeof(lf), &lf);
	MessageBox(NULL, lf.lfFaceName, "", MB_OK);
}
DestroyWindow(test);

edytowany 1x, ostatnio: Stefan_3N
BO
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:93
0

Tak też nie działa.

font = HandleMessage(WM_GETFONT); // z samej kontrolki w dialogu

i tu mam: font = 0, czyli nie ma go wcale!

Stefan_3N
To musi być kontrolka, która używa kroju, np. ListView (tam krój jest wykorzystywany do wypisywania nagłówków lub podpisów pod ikonami).
Stefan_3N
Jeśli nie masz takiej kontrolki w dialogu, to ją utwórz "w locie" i potem usuń. Sprawdzałem na ListView i TreeView, obie zwracają co trzeba.
BO
całe okienko/dialog jest tworzony za pomocą CreateDialog; na podstawie wzorca z resurców: .rc, ja tu nic nie tworzę w kodzie - to się samo robi, znaczy system tworzy te kontrolki!
Stefan_3N
:-) No fajnie. System tworzy, a Ty nie możesz? Dwa rozwiązania. Dodaj do zasobów taką kontrolkę, odczytaj krój i potem ją ukryj. Ale to bez sensu. Wykonaj po prostu ten kod, który Ci podałem gdzieś przy starcie programu (w jakimś SetupWindow, czy co tam masz w tej bibliotece). Wykonaj ten kod, zapamiętaj krój globalnie i zamknij ten temat :-). Po co masz to robić w każdym dialogu?
Stefan_3N
Przypatrz się dobrze tej bibliotece, w której to piszesz. Z pewnością masz tam do kontrolek kilka konstruktorów. Masz konstruktory do tworzenia z zasobów i masz do tworzenia bez zasobów, więc jak chcesz, to możesz ten mój kod przerobić na taki "biblioteczny". Będzie to coś takiego TListView* test=new TListView(PARENT, ID, X, Y, W, H), albo coś podobnego. I do tak utworzonej kontrolki wyślij komunikat WM_GETFONT, a potem odczytaj tę strukturę.
BO
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:93
0

Być może ta metoda działa w oknie, do którego jawnie tworzono font + SetFont,
co znaczy że gdzieś w kodzie było użyte jawnie: fontName = Segoe UI i + CreateFont.

Zatem w dialogach to raczej nie zadziała.

Stefan_3N
Uff. Ale jesteś uparty :-). Odpowiedz mi tylko - czy wkleiłeś dokładnie ten mój kod w swój kod (np. po twoim wierszu LOGFONT lf, a przed TClientDC? Wkleiłeś i spróbowałeś to skompilować? Jakieś błędy kompilacji? Jakie?
BO
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:93
1

chyba znalazłem poprawne rozwiązanie - bez zbędnych akrobacji.
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-getstockobject

"It is not recommended that you employ this method to obtain the current font used by dialogs and windows. Instead, use the SystemParametersInfo function with the SPI_GETNONCLIENTMETRICS parameter to retrieve the current font. SystemParametersInfo will take into account the current theme and provides font information for captions, menus, and message dialogs."

BO
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:93
0

To jednak jest bzdura z tym Segoe.

Czcionka w dialogach - etykiety, napisy na przyciskach, itp.,
to nie jest wcale Segoe, ani Tahoma...

nie wiem co to jest - jest trochę inna... chyba Microsoft Sans Serif.

Stefan_3N
Czy chcesz to nadal zrobić? czy tylko dzielisz się wrażeniami?
BO
Co tu jest robienia? Nie można wyciągnąć tego fonta, więc pozostaje to zakodować na beton: Sans Serif tyle.
Stefan_3N
Oczywiście, że można, bo robię to na co dzień. Twój problem, że nie słuchasz.
BO
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:93
0

A jednak: tam jest faktycznie "Microsoft Sans Serif", a nie żadne Segoe!

przykład:

Kopiuj

     lf.lfHeight = MulDiv(-9, GetDeviceCaps(dc, LOGPIXELSY), 72);
     strcpy(lf.lfFaceName, "MS Shell Dlg"); // domyślny font dla dialogów!

     lf.lfOutPrecision = OUT_TT_ONLY_PRECIS;
     lf.lfQuality = PROOF_QUALITY;
//     lf.lfPitchAndFamily = FF_SWISS;
    }

   helvFont = CreateFontIndirect(&lf);

// pobieramy parametry tej czcionki
   dc.SelectObject(helvFont);
   TEXTMETRIC tm;
   dc.GetTextMetrics(tm);

// a teraz wyciskamy z tego faktyczną nazwę czcionki:
   OUTLINETEXTMETRIC *po = (OUTLINETEXTMETRIC*)buf;
   dc.GetOutlineTextMetrics(1024, *po); 

i tam to widać...

Stefan_3N
Napiszę po raz ostatni - zrób to nie dla dialogu, ale dla ListView. Jeśli nie potrafisz stworzyć takiej kontrolki (bo przecież jak napisałeś kontrolki tworzy system), to najpierw dowiedz się jak "ręcznie" stworzyć kontrolkę, potem ją stwórz i odczytaj jaki ma font. To tyle w tym temacie.
BO
Zależy w czym to utworzysz: jeśli w dialogu, wtedy będzie tam Microsoft Sans Serif, nie Segoe - sam sprawdź to sobie. Segoe wygląda inaczej - znacznie gorzej, zwłaszcza dla większych rozmiarów: 10, 12...
Stefan_3N
Sprawdziłem :-). Powiększyłem na pół ekranu i porównałem z wikpedią. Kontrolki nie musisz tworzyć w dialogu. Utwórz ją przy starcie programu (kontrolka nie musi mieć stylu WS_CHILD, możesz dać WS_POPUP), odczytaj krój, zapamiętaj, usuń tę kontrolkę, a potem wykorzystaj zapamiętaną nazwę. To na razie.
BO
Bzdury opowiadasz. Kontrolka przejmuje font z okna, w którym go tworzysz...
BO
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:93
1

drobna uwaga: font 'Microsoft Sans Serif' jest zrypany.

https://ibb.co/GT77jRr

litera ł ma błędną szerokość dla rozmiaru: 13 i 19 (pikseli), co tam zaznaczyłem.

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:minuta
2

Nie wiem coś się czepił tego Sans Serif. To jest stary font. Microsoft od dawna zaleca Segoe UI (a wcześniej zalecał Tahomę).
Jeśli gdzieś widzisz Sans Serif to albo

  • źle widzisz
  • patrzysz na stary program
  • patrzysz na program nie stosujący się do zaleceń

W kodzie napisałeś:

strcpy(lf.lfFaceName, "MS Shell Dlg"); // domyślny font dla dialogów!

i się dziwisz że dostałeś Sans Serif. Tylko że jako nazwę fonta trzeba podać Segoe UI, a nie MS Shell Dlg. Widnieje to jak wół na obrazku który wkleiłem powyżej, a który w okrojonej formie przytoczę jeszcze raz:

a.png

Ponadto, Microsoft Sans Serif i MS Sans Serif to nie to samo.

  • a.png (18 KB) - ściągnięć: 20
edytowany 5x, ostatnio: Azarien
BO
Ale nie masz Segoe w dialogach, lecz Microsoft Sans Serif, który jest popsuty w wersji polskiej, bo ma zrypany kerning - patrz obrazek.
Azarien
Microsoft ci pisze żeby używać Segoe UI. Z uporem godnym lepszej sprawy upierasz się przy starych fontach :)
BO
Ile razy mam powtarzać? Segoe nie jest używany do kontrolek w dialogach! Sprawdź sobie np. jaki font używa MessageBox. Segoe jest używany do elementów non-client, czyli title w oknach, chyba jeszcze w menu i kilku innych... np. w tooltips chyba. No i narysuj sobie okno na tym Segoe a wtedy od razu zobaczysz, że to inaczej wygląda - od tych standardowych.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:minuta
0
Kopiuj
#include <Windows.h>

int main()
{
    MessageBox(nullptr, L"Ciekawe co to za font.", L"Test", MB_OK);
}
Kopiuj
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
	<asmv3:application>
		<asmv3:windowsSettings>
			<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
			<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
		</asmv3:windowsSettings>
	</asmv3:application>
	<dependency>
		<dependentAssembly>
			<assemblyIdentity
				type="win32"
				name="Microsoft.Windows.Common-Controls"
				version="6.0.0.0"
				processorArchitecture="*"
				publicKeyToken="6595b64144ccf1df"
				language="*"
			/>
		</dependentAssembly>
	</dependency>
</assembly>

mb.png

  • mb.png (2 KB) - ściągnięć: 16
BO
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:93
0

screenshot-20200728165132.png

Tu masz porównanie: u góry jest Segoe, a na dole domyślny font dialogowy.

Widzisz różnicę?

Azarien
ale co chcesz udowodnić - jeżeli aplikacja jawnie nie prosi o "Segoe UI" to go nie dostaje. Podałem linki do dokumentacji mówiącej wyraźnie, że obecnie zalecane jest używanie Segoe UI, a nie "MS Shell Dlg" czy czegoś tam jeszcze. Dyskusję uważam za prowadzącą donikąd.
BO
Niby racja, tylko że wtedy masz full swobodę, czyli tworzysz w zasadzie niestandardowe okna... chodziło o taki motyw: hf = GetStockObject(DEFAULT_GUI_FONT); i jaki wtedy uzyskasz 'fizyczny' font? u mnie (win7) nie jest to Segoe, ani Tahoma, lecz Microsoft sans... niestety.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)