Clipboard bitmapowy systemu

Clipboard bitmapowy systemu
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

ja pobrac Clipboard bitmapowy z ekarnu systemu do talbicy w c++ znając szerokość i wysokość ekranu ? z Clipboard'em tekstowym sobie poradziłem a teraz potrzebuje print screen'a ....
tutaj coś jest https://www.experts-exchange.com/questions/24769725/Saving-a-clipboard-print-screen-image-to-disk-in-a-jpg-or-bmp-file-format.html
tutaj tez https://learn.microsoft.com/pl-pl/windows/win32/dataxchg/using-the-clipboard?redirectedfrom=MSDN wie ktoś jak kto uprościć ?
tam są przykłady na GDI a ja chce na API

edytowany 7x, ostatnio: wilkwielki
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

ja bym chciał tak pobranie bitmapy a z obiektu pochodnego z struktury szerokość ii wysokośc i tyle mi starczy .... bitmapa=xmax * ymax * 3 , 3 kolory red green blue
potrzebuje to do zrobienia czcionki bitmapowej na podstawie kodów ASCII z konsoli od -128 do 128
jesli jest mozliwosc dostepu do buffora konsoli to nie trzeba było by kombinować z Clipboard 'em

edytowany 4x, ostatnio: wilkwielki
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

HDC hdc;
COLORREF color;
color = GetPixel( hdc, x, y );
znalazłem sprawdze czy działa

wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

działa pobiera kolor pixela o podanych wartosciach X,Y
mam
RGBTRIPLE rgb;
rgb.rgbtRed = GetRValue(color);
rgb.rgbtGreen = GetGValue(color);
rgb.rgbtBlue = GetBValue(color);

edytowany 1x, ostatnio: wilkwielki
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
1

dobra ja przepraszam zacząłem wątek a sam skończyłem , temat zamknięty 😀

tBane
Tester Beta
  • Rejestracja:ponad rok
  • Ostatnio:21 minut
  • Lokalizacja:Poznań
  • Postów:289
0

@wilkwielki: to jakie jest rozwiązanie, bo sam jestem ciekawy


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.X.
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:2 minuty
  • Postów:2076
1

@wilkwielki: masz zakaz używania chatGpt ?
Proszę o to kod:
Zwróć uwagę że podając kompletne rozwiązanie łatwiej złapać kontekst

Kopiuj
#include <windows.h>
#include <iostream>
#include <fstream>

void SaveBitmapToFile(HBITMAP hBitmap, const char* filename) {
    BITMAP bmp;
    GetObject(hBitmap, sizeof(BITMAP), &bmp);

    BITMAPFILEHEADER bmfHeader;
    BITMAPINFOHEADER bi;

    bi.biSize = sizeof(BITMAPINFOHEADER);
    bi.biWidth = bmp.bmWidth;
    bi.biHeight = bmp.bmHeight;
    bi.biPlanes = 1;
    bi.biBitCount = 32;  // Assuming 32-bit BMP
    bi.biCompression = BI_RGB;
    bi.biSizeImage = 0;
    bi.biXPelsPerMeter = 0;
    bi.biYPelsPerMeter = 0;
    bi.biClrUsed = 0;
    bi.biClrImportant = 0;

    DWORD dwBmpSize = ((bmp.bmWidth * bi.biBitCount + 31) / 32) * 4 * bmp.bmHeight;

    HANDLE hDIB = GlobalAlloc(GHND, dwBmpSize);
    char* lpbitmap = (char*)GlobalLock(hDIB);

    HDC hDC = GetDC(NULL);
    GetDIBits(hDC, hBitmap, 0, (UINT)bmp.bmHeight, lpbitmap, (BITMAPINFO*)&bi, DIB_RGB_COLORS);
    ReleaseDC(NULL, hDC);

    std::ofstream file(filename, std::ios::out | std::ios::binary);

    bmfHeader.bfType = 0x4D42; // BM
    bmfHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwBmpSize;
    bmfHeader.bfReserved1 = 0;
    bmfHeader.bfReserved2 = 0;
    bmfHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

    file.write((char*)&bmfHeader, sizeof(BITMAPFILEHEADER));
    file.write((char*)&bi, sizeof(BITMAPINFOHEADER));
    file.write(lpbitmap, dwBmpSize);

    GlobalUnlock(hDIB);
    GlobalFree(hDIB);
    file.close();
}

void GetClipboardBMP() {
    if (!OpenClipboard(NULL)) {
        std::cerr << "Failed to open clipboard!" << std::endl;
        return;
    }

    if (!IsClipboardFormatAvailable(CF_BITMAP)) {
        std::cerr << "Clipboard does not contain a bitmap!" << std::endl;
        CloseClipboard();
        return;
    }

    HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
    if (!hBitmap) {
        std::cerr << "Failed to get clipboard bitmap!" << std::endl;
        CloseClipboard();
        return;
    }

    SaveBitmapToFile(hBitmap, "clipboard_image.bmp");

    CloseClipboard();
    std::cout << "Saved clipboard image as clipboard_image.bmp" << std::endl;
}

int main() {
    GetClipboardBMP();
    return 0;
}


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

plik bmp to ja potrafie zapisać , bardziej mnie interesuje to HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
jaka jest struktura HBITMAP bo jest obiekt hBitmap i jak pobrać po kropce np hBitmap.DATA_IMAGE albo hBitmap.resolutionX i hBitmap.resolution.Y tylko te trzy prametry więcej mnie juz nie interesuje tyle będzie mi dalej starczylo ale dzięki za pomoc

edytowany 1x, ostatnio: wilkwielki
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:2 minuty
  • Postów:2076
0

@wilkwielki: Dyskutuj z chatGpt !


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

jaki jest adres chatGpt i jak tam się zalogować , czy to jest za darmo? sorry ale ja jestem ciemny kiedys na goolgle tam trafiłem ale nie wiedziałem jak sie zalogowac

edytowany 1x, ostatnio: wilkwielki
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

ja bym chciał zapodaną tylko tablice z danymi bitmapy i szerokość z wysokością ... to wszystko

tBane
Tester Beta
  • Rejestracja:ponad rok
  • Ostatnio:21 minut
  • Lokalizacja:Poznań
  • Postów:289
0

https://chatgpt.com/

Ogólnie jest za darmo, ale płatna wersja jest o wiele lepsza. Sam korzystam z płatnej - 100 zł/mc. Wystarczy konto Google z tego co kojarzę, by się zarejestrować


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.X.
edytowany 1x, ostatnio: tBane
obscurity
niepotrzebnie płacisz, na https://copilot.microsoft.com/ masz model warty $200/mc za free (wystarczy zaznaczyć opcję "think deeper" i odpala się ten sam model o1 z którego korzysta chatgpt pro)
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

ładnie tylko uchwyt HBITMAP is a typedef for a handle, not a struct.

wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
BITMAP bmp;
GetObject(hBitmap, sizeof(BITMAP), &bmp);
bmp.bmBits <<< czy to jest tablica z danymi
bmp.bmBitsPixel <<< czy to tez czasami nie to
juz mam bmBits: A pointer to the bitmap's pixel data.

edytowany 1x, ostatnio: wilkwielki
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

dziękuje za pomoc mysle ze temat zamkniety

edytowany 1x, ostatnio: wilkwielki
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

powtórka , .. mam tak , uprościłem to wszystko na początek aby sprawdzić i jest błąd
OpenClipboard(NULL);
IsClipboardFormatAvailable(CF_BITMAP);
HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
BITMAP bmp;
GetObject(hBitmap, sizeof(BITMAP), &bmp);

WriteBitmapFile("test.bmp",bmp.bmWidth,bmp.bmHeight,bmp.bmBits); // nazwa , szerokosc , wysokosc, i tablica z obrazem 

i jest taki błąd

error C2664: 'WriteBitmapFile' : cannot convert parameter 4 from 'unsigned short' to 'unsigned char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

    jak to poprawić takie pytanie ? bo skład funkcji jest taki

    WriteBitmapFile(char *filename, int width, int height, unsigned char *imageData)

plik powstaje i jest pusty

edytowany 1x, ostatnio: wilkwielki
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

co tutaj za cuda się dzieją:

DWORD dwBmpSize = ((bmp.bmWidth * bi.biBitCount + 31) / 32) * 4 * bmp.bmHeight;

HANDLE hDIB = GlobalAlloc(GHND, dwBmpSize);
char* lpbitmap = (char*)GlobalLock(hDIB);

HDC hDC = GetDC(NULL);
GetDIBits(hDC, hBitmap, 0, (UINT)bmp.bmHeight, lpbitmap, (BITMAPINFO*)&bi, DIB_RGB_COLORS);
ReleaseDC(NULL, hDC);

tutaj jest jakas konwersja zamiast czystej tablicy typu unsigned char gdzie nawet tutaj nie ma wzmianki o bmp."dane"
a jeszcze jedno w tym przykładzie pixel jest 32 bitowo opiasany to głupota robi się 24 po 8 na kolor czyli bajt
32 bitowke to sie opisuje w inicjacji opengl na kanał alfa do alfa blendingu
edytowany 4x, ostatnio: wilkwielki
several
naucz się proszę formatować kod we wpisach bo w takiej formie ciężko się to czyta
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

ma ktoś wiedzę na ten temat i na ten problem do rozwiązania?
podejrzałem zmienne bmp.bmWidth , bmp.bmHeight cout'em i pokazuje śmieci to nawett nie pobiera szerokosci i wyoskosci pulpitu systemu

edytowany 2x, ostatnio: wilkwielki
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:2 minuty
  • Postów:2076
0
Kopiuj
    if (!OpenClipboard(NULL)) {
        std::cerr << "Failed to open clipboard!" << std::endl;
        return;
    }

    if (!IsClipboardFormatAvailable(CF_BITMAP)) {
        std::cerr << "Clipboard does not contain a bitmap!" << std::endl;
        CloseClipboard();
        return;
    }

    HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
    if (!hBitmap) {
        std::cerr << "Failed to get bitmap from clipboard!" << std::endl;
        CloseClipboard();
        return;
    }

    // Get bitmap info
    BITMAP bmp;
    GetObject(hBitmap, sizeof(BITMAP), &bmp);

    // Prepare a buffer for raw pixel data
    int width = bmp.bmWidth;
    int height = bmp.bmHeight;
    int bytesPerPixel = bmp.bmBitsPixel / 8;

    BITMAPINFO bmi = { 0 };
    bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bmi.bmiHeader.biWidth = width;
    bmi.bmiHeader.biHeight = -height; // Negative to keep image top-down
    bmi.bmiHeader.biPlanes = 1;
    bmi.bmiHeader.biBitCount = bmp.bmBitsPixel;
    bmi.bmiHeader.biCompression = BI_RGB;

    std::vector<unsigned char> pixels(width * height * bytesPerPixel);

    HDC hdc = GetDC(NULL);
    GetDIBits(hdc, hBitmap, 0, height, pixels.data(), &bmi, DIB_RGB_COLORS);
    ReleaseDC(NULL, hdc);

    CloseClipboard();

--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

OpenClipboard(NULL);
IsClipboardFormatAvailable(CF_BITMAP);
HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
BITMAP bmp;
GetObject(hBitmap, sizeof(BITMAP), &bmp);

 int width = bmp.bmWidth;
int height = bmp.bmHeight;
cout << "width: " << width << endl;
cout << "height:" << height << endl;
pisze width:4198920 to głupota
pisze height:4214598
coś za duży ten pulpit systemu

pod "g++ -l gdi32"  width=0 a height ponad miliardy
edytowany 4x, ostatnio: wilkwielki
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:2 minuty
  • Postów:2076
0

Standardowa Odpowiedź Administratora nr 1: „u mnie działa”

Jezeli kod wyglada tak jak wkeiłes to na 99% wina jest w tym ze nie sprawdzasz wyniku funkcji i juz na pierwszych etapach masz problem np. nie masz w schowku BMP

Z durnych danych dostajesz durne odpowiedzi


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

przecież łatwiej się juz nie da, napisałem tą prowizorke tak wstepująco w skrócie aby tylko sprawdzić działanie tego schematu i u mnie nie dizała , jeśli masz pomysł jak to napisać moją metodą na szybko wersje działającą to jak możesz prosze pomóż mi , na razie na tym etapie pobranie tylko tych dwojga wartosci szerokosc i wyskosc a dalej powinno pójsc jak składka, na wstępie są warunki sprawdzające dostępność tego systemu a przeciez na 99% procent powinno obsługiwaćt Clipboard przez system , jądro systemu i przez kompilator dlaczego jestes taki srogi dla mnie ja tylko prosze o pomoc to przepraszam jesli zajmuje Ci czas , o co chodzi Ci z tym schowkiem BMP jak kolejność funkcji jest prawidłowo wywołana

edytowany 1x, ostatnio: wilkwielki
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

chatGPT mówi tak

if (IsClipboardFormatAvailable(CF_BITMAP)) {
HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
BITMAP bmp;
if (GetObject(hBitmap, sizeof(BITMAP), &bmp)) {
// Process the bitmap information (e.g., width, height)
int width = bmp.bmWidth;
int height = bmp.bmHeight;
// Now you can do something with this bitmap, like drawing or saving
} else {
// Handle error: unable to retrieve bitmap info
}
} else {
// Handle error: clipboard does not contain a bitmap
}

ten sam efekt co u mnie i nic

wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
BITMAP bmp;

if (GetObject(hBitmap, sizeof(BITMAP), &bmp)) {
// Successfully retrieved bitmap information
int width = bmp.bmWidth;
int height = bmp.bmHeight;
int colorDepth = bmp.bmBitsPixel;
int rowBytes = bmp.bmWidthBytes;

// You can now work with these properties
printf("Width: %d, Height: %d, Color Depth: %d, Row Bytes: %d\n", width, height, colorDepth, rowBytes);

} else {
// Handle error (failed to retrieve bitmap)
printf("Failed to get bitmap data.\n");
}

odpowiedź taka : printf("Failed to get bitmap data.\n"); czyli po prostu ta wersja w całości z całym projektem jest spalona i nie działa, ja juz koncze ten wątek bo dalej to walka z wiatrkami i starczy

AD
  • Rejestracja:prawie 2 lata
  • Ostatnio:14 dni
  • Postów:29
0

Ten ostatni kod @Marius.Maximus działa idealnie. Zrobiłem printscreen i u mnie width i height pokazuje normalnie (1920 x 1080). Kompilowałem za pomocą C++ Builder 12.

edytowany 1x, ostatnio: adolf
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

ja robie printscreen i pisze "Failed to get bitmap data"

Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:2 minuty
  • Postów:2076
0

@wilkwielki: zainstaluj MSYS2
w tym watku masz zalecane środowisko pracy (wg mojej filozofii)
https://4programmers.net/Forum/C_i_C++/375553-vs_code_problem_z_plikami_naglowkowymi?p=1991570#id1991570


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
AD
  • Rejestracja:prawie 2 lata
  • Ostatnio:14 dni
  • Postów:29
0

To ja nie wiem. Mi ten sam kod działa w aplikacji konsoli, jak i VCL. Tylko w tym ostatnim wyświetlam w ShowMessage. Spróbuj jeszcze inaczej zrobić screena. Przytrzymaj WinKey i naciśnij printscreen.

wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:około 12 godzin
  • Postów:390
0

i nic ten sam błąd Failed to get bitmap data
ja mam MSYS64 na dysku "C"
C:\msys64\mingw64\bin a w tym zawarty g++

edytowany 2x, ostatnio: wilkwielki
AD
Przed uruchomieniem Twojego programu, zobacz jakimś innym programem do przeglądania schowka co tam jest.
Marius.Maximus
Ja niestety nie mam g++ używam clang-a
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)