Aktywacja TFont w komponenecie

Aktywacja TFont w komponenecie
dasej
  • Rejestracja:prawie 22 lata
  • Ostatnio:2 miesiące
  • Lokalizacja:Słupsk
0

Witam.

Tak dodaje nowy parametr do komponentu.

Kopiuj



  TdCustomGrid = class(TCustomControl)
  private
   ...
        FFixedFont : TFont; // Fonty dla Fixed
    ...
  end;

    property FixedFont: TFont read FFixedFont write SetFixedFont stored IsFixedFontStored;
   .....

    procedure SetFixedFont(const Value: TFont);
    function  IsFixedFontStored: Boolean;
   ......

function TdCustomGrid.IsFixedFontStored: Boolean;
begin
     Result := not ParentFont and not DesktopFont;
end;

procedure TdCustomGrid.SetFixedFont(const Value: TFont);
begin
     FFixedFont.Assign(Value);
     Repaint;
end;

constructor TdCustomGrid.Create(AOwner: TComponent);
begin
    .....
    FFixedFont := TFont.Create;
    .....
end;

Jeżeli w FixedFont zmieniam parametry w Object Inspector to brak reakcji na formatce w trakcie działania programu i poglądu ( edytorze ).
Dopiero jak zmieniam jakiegokolwiek parametr w Font który jest w tym samym komponencie to zmiany
dokonane w FixedFont są widoczne na formatce i w działającym programie.

Co jeszcze muszę dodać by ten problem znikł. XE10

Pozdrawiam
Janusz

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12166
0
Kopiuj
procedure TdCustomGrid.SetFixedFont(const Value: TFont);
begin
  FFixedFont.Assign(Value);
  Repaint;
end;

Ten Repaint nie zostaje wywołany, bo z tego co pamiętam, tak działa VCL (LCL w sumie też).

Jeśli pole FFont ma wywoływać jakąś akcję po zmianie swojej zawartości, to możesz podłączyć własne zdarzenie do FFixedFont.OnChange. To powinno w zupełności wystarczyć.

Możesz też nadpisać metodę FFixedFont.Assign, w której sprawdź czy obiekt z parametru posiada inne dane i jeśli tak, odpal jakąś swoją metodę (albo OnChange). Tutaj pole do popisu jest szersze, bo możesz określić to które pole ma inną wartość.

Czyli potrzebujesz takiego zabiegu:

Kopiuj
type
  TdCustomGrid = class(TCustomControl)
  private
    FFixedFont: TFont;
  private
    procedure FixedFontChange(ASender: TObject);
  {..}
  public
    constructor Create(AOwner: TComponent); override;
  {..}
  end;
  
  
procedure TdCustomGrid.FixedFontChanged(ASender: TObject);
begin
  Invalidate();
end;

constructor TdCustomGrid.Create(AOwner: TComponent);
begin
  FFixedFont := TFont.Create();
  FFixedFont.OnChange := FixedFontChange;
end;

W metodzie FixedFontChange możesz wykonać różne dodatkowe czynności, nie tylko zmusić kontrolkę do przemalowania.

Poza tym, nigdy nie wołaj Repaint bezpośrednio. Używaj Invalidate, które odmaluje komponent tylko wtedy, gdy jest możliwe. Jeśli z jakiegoś powodu komponent nie może być odmalowany to Invalidate to wyłapie, a Repaint rzuci wyjątek. Jeśli chcesz i masz dostęp do źródeł VCL to sprawdź sobie czym się różni ich kod.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 8x, ostatnio: flowCRANE
dasej
  • Rejestracja:prawie 22 lata
  • Ostatnio:2 miesiące
  • Lokalizacja:Słupsk
0

Ciekawe " to Invalidate to wyłapie, a Repaint rzuci wyjątek. ".

Fragment z oryginalnego komponentu.

Kopiuj
procedure TdCustomGrid.SetGradientEndColor(Value: TColor);
begin
  if Value <> FGradientEndColor then
  begin
    FGradientEndColor := Value;
    if HandleAllocated then Repaint;
  end;
end;

procedure TdCustomGrid.SetGradientStartColor(Value: TColor);
begin
  if Value <> FGradientStartColor then
  begin
    FGradientStartColor := Value;
    if HandleAllocated then Repaint;
  end;
end;


Ale nie działa.
Przypominam jak zmienię cokolwiek w Font to zaczyna działać wszystko.

edytowany 1x, ostatnio: dasej
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12166
0

Przeoczyłem dalszą część Twojego pierwszego posta… Zignoruj to co napisałem w poprzednim poście. :/


dasej napisał(a):

Ciekawe " to Invalidate to wyłapie, a Repaint rzuci wyjątek. ".

Jak widać, w tym oryginalnym mutatorze sprawdzany jest HandleAllocated, a Ty go w swoim nie sprawdzasz, więc poleciałby wyjątek przy Repaint.

Przypominam jak zmienię cokolwiek w Font to zaczyna działać wszystko.

W takim razie sprawdź co się wykonuje w Font po jego zmianie – coś musi być inicjowane przy pierwszej modyfikacji. Możesz debugować ten komponent?


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 12x, ostatnio: flowCRANE
Opi
  • Rejestracja:ponad 20 lat
  • Ostatnio:około 4 godziny
  • Postów:1029
0
Kopiuj
private
    procedure CMTextChanged(var Msg: TMessage); message CM_TEXTCHANGED;
    procedure CMFontChanged(var Msg: TMessage); message CM_FONTCHANGED;
	
	
procedure TCMButton.CMFontChanged(var Msg: TMessage);
begin
 Invalidate;
end;

procedure TCMButton.CMTextChanged(var Msg: TMessage);
begin
 Invalidate;
end;
dasej
  • Rejestracja:prawie 22 lata
  • Ostatnio:2 miesiące
  • Lokalizacja:Słupsk
0

Wstawiłem to do class [ TgGrid = class(TdDrawGrid) ] ale nie pomogło.
A w class [ TdCustomGrid = class(TCustomControl) ] już to jest dodane i posiada taki zapis

Kopiuj

procedure TdCustomGrid.CMFontChanged(var Message: TMessage);
begin
  if FInplaceEdit <> nil then FInplaceEdit.Font := Font;
  inherited;
end;



flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12166
0

@dasej: to dotyczy ustawienia fontu w osadzonej kontrolce, jeśli właściwość tej głównej została zmieniona.

Sprawdziłeś co się wykonuje po zmianie właściwości TdCustomGrid.Font? Tam znajdziesz odpowiedź.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
dasej
  • Rejestracja:prawie 22 lata
  • Ostatnio:2 miesiące
  • Lokalizacja:Słupsk
0

W TdCustomGrid = class(TCustomControl) nie ma TdCustomGrid.Font
Jedyna wzmianka o fontach jest w

Kopiuj
  TdDrawGrid = class(TdCustomDrawGrid)
  published
    property Font;

powyżej jest TdCustomDrawGrid = class(TdCustomGrid)

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12166
0

@dasej: TdDrawGrid dziedziczy właściwość Font z klasy bazowej (tu: TdCustomDrawGrid), więc sprawdź co jest wykonywane właśnie w niej. Jeśli TdCustomDrawGrid też ją dziedziczy ze swojej bazowej to idź głębiej, przy okazji sprawdzając, gdzie i w jaki sposób jest ona używana. W ten sposób znajdziesz to czego szukasz.

Spróbuj też ustawić ParentFont na False w konstruktorze TdDrawGrid.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
dasej
  • Rejestracja:prawie 22 lata
  • Ostatnio:2 miesiące
  • Lokalizacja:Słupsk
0

Dzięki za pomoc. Na razie temat mnie przerasta.
Problem załatwiłem trochę po partyzancku.

Kopiuj
constructor TgGrid.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Initialize;

  Font.Color := clBlue; // tuu2
  Font.Color := clBlack;

Teraz komponent reaguje na każdą zmianę kolorów tuż po położeniu na formatce.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12166
0
dasej napisał(a):

Na razie temat mnie przerasta.

Przerasta Cię zmiana wartości właściwości w oknie Inspektora Obiektów?


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
dasej
  • Rejestracja:prawie 22 lata
  • Ostatnio:2 miesiące
  • Lokalizacja:Słupsk
0

Nie.

Rozwiązanie problemu.
Brak mi koncepcji co mam z tym zrobić.
Kładę komponent na formie i do momenty kiedy nie zmienię jakiegoś parametru w Font to
pozostałe nie TFont nie reagują na zmianę.

screenshot-20171224202015.png

FixedFont nie zadziała jak nie dokonam jakiejś zmiany w Font.

Komponent na dzień dzisiejszy wygląda tak.
screenshot-20171224203026.png

Ma wybudowanych kilka stylów koloru. I zaszytą obsługę MySQL oraz import i exsport csv, oraz kilka innych drobiazgów.

edytowany 1x, ostatnio: dasej
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12166
0

@dasej: może inaczej. W jaki sposób komponent wykorzystuje Twoją właściwość FixedFont? Używa jej w OnDrawCell lub czymś podobnym?


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
dasej
  • Rejestracja:prawie 22 lata
  • Ostatnio:2 miesiące
  • Lokalizacja:Słupsk
0
Kopiuj

procedure TdCustomGrid.DrawCellBackground(const ARect: TRect; AColor: TColor;
                                         AState: TGridDrawState; ACol, ARow: Integer);
const States: array[Boolean, Boolean] of Cardinal = ((HIS_NORMAL, HIS_PRESSED), (HIS_HOT, HIS_PRESSED));
var   LRect, ClipRect: TRect;

begin
  LRect := ARect;

// FIX -oSafrad : Title Color
  if (FInternalDrawingStyle = gdsThemed) and (gdFixed in AState) then
//  if (FInternalDrawingStyle = gdsThemed) and (gdFixed in AState) and (AColor = clBtnFace) then
  begin
    ClipRect := LRect; // Theme styl
    if Win32MajorVersion >= 6 then InflateRect(LRect, 1, 1);
    Inc(LRect.Bottom);
    DrawThemeBackground(ThemeServices.Theme[teHeader], Canvas.Handle,
                     HP_HEADERITEM, States[(gdHotTrack in AState), (gdPressed in AState)],
                                                  LRect, {$IFNDEF CLR}@{$ENDIF}ClipRect);
    Canvas.Brush.Style := bsClear;
  end
  else
  begin  //  kolory i rysowanie Fixed
// FIX -oSafrad : Title Color
    if (FInternalDrawingStyle = gdsGradient) and (gdFixed in AState) then
//    if (FInternalDrawingStyle = gdsGradient) and (gdFixed in AState) and (AColor = clBtnFace) then
    begin
      if not (goFixedVertLine in Options) then Inc(LRect.Right);  // linie pionowe i poziome
      if not (goFixedHorzLine in Options) then Inc(LRect.Bottom);


      // rysowanie gradiandu dla Fixed =======================================
      if (gdHotTrack in AState) or (gdPressed in AState) then
      begin
        if (gdPressed in AState) then
           GradientFillCanvas(Canvas, FGradientEndColor, FGradientStartColor, LRect, gdVertical)
        else
           GradientFillCanvas(Canvas, GetHighlightColor(FGradientStartColor),
                      GetHighlightColor(FGradientEndColor), LRect, gdVertical);
      end
      else GradientFillCanvas(Canvas, FGradientStartColor, FGradientEndColor, LRect, gdVertical);
      Canvas.Font := FFixedFont; //// dołożone fixed.font.color
      Canvas.Brush.Style := bsClear;
    end

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12166
0

Dlaczego font ustalasz w zdarzeniu, które służy malowaniu tła?


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
dasej
  • Rejestracja:prawie 22 lata
  • Ostatnio:2 miesiące
  • Lokalizacja:Słupsk
0

Umieściłem to w DrawCells

Kopiuj

  procedure DrawCells(ACol, ARow: Longint; StartX, StartY, StopX, StopY: Integer;
                      AColor: TColor; IncludeDrawState: TGridDrawState);
  var
    CurCol, CurRow: Longint;
    AWhere, Where, TempRect: TRect;
    DrawState: TGridDrawState;
    Focused: Boolean;
  begin
    CurRow := ARow;
    Where.Top := StartY;
    while (Where.Top < StopY) and (CurRow < RowCount) do
    begin
      CurCol := ACol;
      Where.Left := StartX;
      Where.Bottom := Where.Top + RowHeights[CurRow];
      while (Where.Left < StopX) and (CurCol < ColCount) do
      begin
        Where.Right := Where.Left + ColWidths[CurCol];
//        if (Where.Right > Where.Left) and RectVisible(Canvas.Handle, Where) then
        if (Where.Right > Where.Left) then
        begin
          DrawState := IncludeDrawState;
          if (CurCol = FHotTrackCell.Coord.X) and (CurRow = FHotTrackCell.Coord.Y) then
          begin
            if (goFixedHotTrack in Options) then Include(DrawState, gdHotTrack);
            if FHotTrackCell.Pressed then Include(DrawState, gdPressed);
          end;
          Focused := IsActiveControl;
          if Focused and (CurRow = Row) and (CurCol = Col)  then
          begin
            SetCaretPos(Where.Left, Where.Top);
            Include(DrawState, gdFocused);
          end;
          if PointInGridRect(CurCol, CurRow, Sel) then
            Include(DrawState, gdSelected);
// FIX -oSafrad : Editable cell border
//          if not (gdFocused in DrawState) or not (goEditing in Options) or
//            not FEditorMode or (csDesigning in ComponentState) then
          begin
            if DefaultDrawing or (csDesigning in ComponentState) then
            begin
              Canvas.Font := Self.Font;
              if (gdSelected in DrawState) and (not (gdFocused in DrawState) or
                                   ([goDrawFocusSelected, goRowSelect] * Options <> [])) then
                DrawCellHighlight(Where, DrawState, CurCol, CurRow)
              else
                DrawCellBackground(Where, AColor, DrawState, CurCol, CurRow);
            end;
            AWhere := Where;


flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12166
0

@dasej: a w którym miejscu malowany jest tekst w komórce?

To co pokazujesz (w dodatku obcięte…) dotyczy malowania tła, a nie tekstu.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE
dasej
  • Rejestracja:prawie 22 lata
  • Ostatnio:2 miesiące
  • Lokalizacja:Słupsk
0
Kopiuj
  procedure DrawCells(ACol, ARow: Longint; StartX, StartY, StopX, StopY: Integer;
                      AColor: TColor; IncludeDrawState: TGridDrawState);
  var
    CurCol, CurRow: Longint;
    AWhere, Where, TempRect: TRect;
    DrawState: TGridDrawState;
    Focused: Boolean;
  begin
    CurRow := ARow;
    Where.Top := StartY;
    while (Where.Top < StopY) and (CurRow < RowCount) do
    begin
      CurCol := ACol;
      Where.Left := StartX;
      Where.Bottom := Where.Top + RowHeights[CurRow];
      while (Where.Left < StopX) and (CurCol < ColCount) do
      begin
        Where.Right := Where.Left + ColWidths[CurCol];
//        if (Where.Right > Where.Left) and RectVisible(Canvas.Handle, Where) then
        if (Where.Right > Where.Left) then
        begin
          DrawState := IncludeDrawState;
          if (CurCol = FHotTrackCell.Coord.X) and (CurRow = FHotTrackCell.Coord.Y) then
          begin
            if (goFixedHotTrack in Options) then Include(DrawState, gdHotTrack);
            if FHotTrackCell.Pressed then Include(DrawState, gdPressed);
          end;
          Focused := IsActiveControl;
          if Focused and (CurRow = Row) and (CurCol = Col)  then
          begin
            SetCaretPos(Where.Left, Where.Top);
            Include(DrawState, gdFocused);
          end;
          if PointInGridRect(CurCol, CurRow, Sel) then
            Include(DrawState, gdSelected);
// FIX -oSafrad : Editable cell border
//          if not (gdFocused in DrawState) or not (goEditing in Options) or
//            not FEditorMode or (csDesigning in ComponentState) then
          begin
            if DefaultDrawing or (csDesigning in ComponentState) then
            begin
              Canvas.Font := Self.Font;
              if (gdSelected in DrawState) and (not (gdFocused in DrawState) or
                                   ([goDrawFocusSelected, goRowSelect] * Options <> [])) then
                DrawCellHighlight(Where, DrawState, CurCol, CurRow)
              else
                DrawCellBackground(Where, AColor, DrawState, CurCol, CurRow);
            end;
            AWhere := Where;
            if (gdPressed in DrawState) then
            begin
              Inc(AWhere.Top);
              Inc(AWhere.Left);
            end;

            DrawCell(CurCol, CurRow, AWhere, DrawState);
            if (FixedType = grDisabled) then
            if DefaultDrawing and (gdFixed in DrawState) and Ctl3D and
                               ((FrameFlags1 or FrameFlags2) <> 0) and
                            (FInternalDrawingStyle = gdsClassic) and not (gdPressed in DrawState) then
              begin
                  TempRect := Where;
                  if (FrameFlags1 and BF_RIGHT) = 0 then Inc(TempRect.Right, DrawInfo.Horz.EffectiveLineWidth)
                    else
                      if (FrameFlags1 and BF_BOTTOM) = 0 then Inc(TempRect.Bottom, DrawInfo.Vert.EffectiveLineWidth);
                  DrawEdge(Canvas.Handle, TempRect, BDR_RAISEDOUTER, FrameFlags1);
                  DrawEdge(Canvas.Handle, TempRect, BDR_RAISEDOUTER, FrameFlags2);
              end;

            if DefaultDrawing and not (csDesigning in ComponentState) and (gdFocused in DrawState) and
                       ([goEditing, goAlwaysShowEditor] * Options <>  [goEditing, goAlwaysShowEditor])
                                 and not (goRowSelect in Options) then
            begin
              TempRect := Where;
              if (FInternalDrawingStyle = gdsThemed) and (Win32MajorVersion >= 6) then
                                               InflateRect(TempRect, -1, -1);
              Canvas.Brush.Style := bsSolid;
              if not UseRightToLeftAlignment then DrawFocusRect(Canvas.Handle, TempRect)
              else
              begin
                AWhere := TempRect;
                AWhere.Left := TempRect.Right;
                AWhere.Right := TempRect.Left;
                DrawFocusRect(Canvas.Handle, AWhere);
              end;
            end;
          end;
        end;
        Where.Left := Where.Right + DrawInfo.Horz.EffectiveLineWidth;
        Inc(CurCol);
      end;
      Where.Top := Where.Bottom + DrawInfo.Vert.EffectiveLineWidth;
      Inc(CurRow);
    end;
  end;


Poniżej fragment procedure TdCustomGrid.Paint;

Kopiuj
    DrawCells(0, 0, 0, 0, Horz.FixedBoundary, Vert.FixedBoundary, LFixedColor,[gdFixed]);
    DrawCells(LeftCol, 0, Horz.FixedBoundary - FColOffset, 0, Horz.GridBoundary,
                                              Vert.FixedBoundary, LFixedColor, [gdFixed]);
    DrawCells(0, TopRow, 0, Vert.FixedBoundary, Horz.FixedBoundary,
                                                Vert.GridBoundary, LFixedColor, [gdFixed]);
    DrawCells(LeftCol, TopRow, Horz.FixedBoundary - FColOffset,
                        Vert.FixedBoundary, Horz.GridBoundary, Vert.GridBoundary, FInternalColor, []);

Wcześniej jest rysowana sam ( pusta ) siatka. Po przejściu tych czerech linii na ekranie jest już wszystko narysowane i wypełnione.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12166
0

Sporo tego kodu, ale nigdzie nie widzę malowania tekstu – to ci heca. Czyli wychodzi na to, że zajmuje się tym metoda DrawCell, której należy najpierw przygotować font. Skoro tak, to poniższe powinno załatwić sprawę:

Kopiuj
procedure DrawCells(ACol, ARow: Longint; StartX, StartY, StopX, StopY: Integer;
{..}                AColor: TColor; IncludeDrawState: TGridDrawState);
begin
  if not DefaultDrawing {1} then
    Canvas.Font := FFixedFont;
    
  {..}

[1] Tu określ zestaw warunków, po których spełnieniu ma zostać użyty font z pola FFixedFont. Domyślam się, że po ustawieniu DefaultDrawing na False ma być użyty własny font, więc to co wyżej powinno wystarczyć.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
dasej
  • Rejestracja:prawie 22 lata
  • Ostatnio:2 miesiące
  • Lokalizacja:Słupsk
0

Cały kod jest wyciągnięty ze środowiska, a DefaultDrawing działa tak jak widać na foto

screenshot-20171226090108.png

flowCRANE
Ale to źle czy dobrze?
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)