Перейти к содержанию

1001 и 1 вопрос по Дельфи


Apollon

Рекомендуемые сообщения

Umnik, что-то я тут подумал, а тебе точно нужно именно, то что ты спросил :huh: , а не вот это?

memo1.SetSelTextBuf(PChar('<b>'+memo1.SelText+'</b>'));

Т.е. получится как на форме ответа на форуме :unsure: Выделил текст и по нажатию на кнопку заключил его между символами кода.

 

Соответственно развивая код, ты можешь для разных кнопок сделать следующее:

procedure TForm2.Btn_B_Click(Sender: TObject);
begin
memo1.SetSelTextBuf(PChar('<b>'+memo1.SelText+'</b>'));
end;
procedure TForm2.Btn_Code_Click(Sender: TObject);
begin
memo1.SetSelTextBuf(PChar('<code>'+memo1.SelText+'</code>'));
end;
procedure TForm2.Btn_Quote_Click(Sender: TObject);
begin
memo1.SetSelTextBuf(PChar('<quote>'+memo1.SelText+'</quote>'));
end;

ну и так далее...

 

Осваиваю Дельфи-подобную IDE. Документации ужасно мало, посему вопросы тут.

Как по клику на спидбаттон:

1). получить позицию курсора

2). вставить слева и справа от него теги (<b></b>, например)

Речь о TMemo

Ссылка на комментарий
Поделиться на другие сайты

AZЪ, о, отлично. :huh: Сегодня гляну на работе.

 

AZЪ, тут нет SetSelTextBuf, только SelText

Соответственно

procedure TMainWindow.BoldClick(Sender: TObject);
begin
 TextFild.SelText := '<b>'+TextFild.SelText+'</b>';
end;

равно

procedure TMainWindow.BoldClick(Sender: TObject);
begin
 TextFild.SelText := '<b></b>';
end;

и ставит курсор после тегов. Но это уже лучше, чем ничего. В конце-концов, я могу вернуть его на x позиций назад :unsure:

 

Но есть function GetCursor: TCursor; virtual;

Может возможно его заюзать, чтобы не делать возврат курсора?

 

Пока так:

procedure TMainWindow.BoldClick(Sender: TObject);
begin
 TextFild.SelText := '<b></b>';
 TextFild.SelStart := TextFild.CaretPos.x-4;
end;

Быдлокод во все поля :) В принципе, можно процедуру отдельную сделать для тегов, а то сейчас на каждый спид баттон отдельная процедура %)

Изменено пользователем Umnik
Ссылка на комментарий
Поделиться на другие сайты

Отдельная процедура все равно будет в том или ином виде, т.к. отработка нажатия кнопки никуда не денется. Можешь написать функцию и вызывать её при нажатии любой кнопки. В эту функцию будешь передавать Caption или Name кнопки например, а в самом коде функции делать подстановку того или иного набора символов в TextFild.SelText := в зависимости от переданных значений.

Например:

function CodeIntoStr (name:string);
var code1: string; Lcode1:integer;
begin
if name='Bold' then code1:='b';
if name='Code' then code1:='code';
// тут много еще всяких кнопок обработать
Lcode1:=length(code1)+3;
TextFild.SelText := '<'+code1+'></'+code1+'>';
TextFild.SelStart := TextFild.CaretPos.x-Lcode1;
end;

procedure TMainWindow.BoldClick(Sender: TObject);
begin
CodeIntoStr(Bold.Caption); 
end;

Ссылка на комментарий
Поделиться на другие сайты

Я сделал так:

код:

 

unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
 Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
 ComCtrls, Menus, StdCtrls, Buttons, ExtCtrls, PairSplitter;

type

 { TMainWindow }

 TMainWindow = class(TForm)
MainWindowMenu: TMainMenu;
CUT: TSpeedButton;
TextField: TMemo;
FileMenu: TMenuItem;
SaveFile: TMenuItem;
SaveAsFile: TMenuItem;
MenuItem12: TMenuItem;
PageSetup: TMenuItem;
PreviewDoc: TMenuItem;
PrintDoc: TMenuItem;
MenuItem16: TMenuItem;
RecentFiles: TMenuItem;
MenuItem18: TMenuItem;
MenuItem19: TMenuItem;
EditMenu: TMenuItem;
ExitProgramm: TMenuItem;
AboutWindow: TMenuItem;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ViewMenu: TMenuItem;
OptionsMenu: TMenuItem;
HelpMenu: TMenuItem;
NewDoc: TMenuItem;
NewWindow: TMenuItem;
OpenFile: TMenuItem;
ReopenFile: TMenuItem;
Bold: TSpeedButton;
Italic: TSpeedButton;
Strike: TSpeedButton;
Underline: TSpeedButton;
StatusBar1: TStatusBar;
ToolBar1: TToolBar;
procedure BoldClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ItalicClick(Sender: TObject);
procedure StrikeClick(Sender: TObject);
procedure UnderlineClick(Sender: TObject);
procedure EditTextBySpeedButton(TagCode: String; PosX: Integer);
 private
{ private declarations }
 public
{ public declarations }
 end; 

var
 MainWindow: TMainWindow;

implementation

{ TMainWindow }

procedure TMainWindow.FormCreate(Sender: TObject);
begin
 Self.TextField.Clear;
end;

procedure TMainWindow.EditTextBySpeedButton(TagCode: String; PosX: Integer);
begin
  TextField.SelText := TagCode;
  TextField.SelStart := TextField.CaretPos.x-PosX;
  TextField.SelLength := 0;
end;

procedure TMainWindow.ItalicClick(Sender: TObject);
begin
  EditTextBySpeedButton('<i></i>', 4);
end;

procedure TMainWindow.StrikeClick(Sender: TObject);
begin
  EditTextBySpeedButton('<s></s>', 4);
end;

procedure TMainWindow.UnderlineClick(Sender: TObject);
begin
  EditTextBySpeedButton('<u></u>', 4);
end;

procedure TMainWindow.BoldClick(Sender: TObject);
begin
 EditTextBySpeedButton('<b></b>', 4);
end;

initialization
 {$I unit1.lrs}

end.

 

Ссылка на комментарий
Поделиться на другие сайты

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Похожий контент

    • Elly
      От Elly
      Вопросы по работе форума следует писать сюда. Вопросы по модерированию, согласно правилам, сюда писать не следует.
      Ответ можно получить только на вопрос, который грамотно сформулирован и не нарушает правил\устава форума.
    • igrok52
      От igrok52
      Подскажите пожалуйста. Антивирусом касперского пользуюсь много лет с 3.0 версии как все работает понимаю на пк. Подскажите пожалуйста кто знает по поводу Антивируса для Android устройств, не разу не ставил и вообще в экосистеме андроида не очень разбираюсь. Купил планшет дочке, загрузчик разблокирован, что там поставили понятия не имею, все работает но боюсь что есть какие то закладки от "китайцев" и пока не проверю не успокоюсь. Поможет антивирус касперского для андроида найти закладки или что то что может быть типа как в телефонах в китайских были закладки от китайцев которые смс отправляли на странные номера (лет 5 назад была эпидемия что и кнопочные и смартфоны дешевые слали смс по ночам в неизвестном направлении, оказалось что прошивка была с вирусами). Или для андроида версия может проверять только apk и не сможет увидеть что в системе есть вредоносы? Если что планшет из нашего ретейла, подумать не мог что у нас в солидных магазинах будут продавать планшеты с китайской прошивкой с разблокированным загрузчиком (Lenovo Xiaoxin Pad Pro 12.7).
    • MiStr
      От MiStr
      Цикл интервью с экспертами "Лаборатории Касперского" сезона 2024 года возобновляется
       
      На прошедшей в стенах "Лаборатории Касперского"  встрече , приуроченной к 18-летию Kaspersky Club, участники клуба пообщались с Еленой Лесных, старшим продуктовым маркетологом в подразделении мобильных продуктов в продуктовом маркетинге B2C. Елена рассказала о том, как была усилена защита от киберугроз и мошенников в последних обновлениях мобильной версии Kaspersky и Kaspersky Who Calls.
       
      Выступление Елены и её коллеги Никиты вызвало большой интерес у участников клуба. Не все присутствующие на встрече смогли задать свои вопросы, не говоря уже про тех, кто не смог посетить офис "Лаборатории Касперского". Именно поэтому мы пригласили Елену ещё раз пообщаться с участниками клуба, на этот раз в формате онлайн
       
      @Lena_Lesnykh готова отвечать на вопросы участников клуба по 18 октября 2024 года включительно. Традиционно интервьюируемой будет выбран лучший вопрос, автор которого получит подарок от клуба. Вопросы можно начинать задавать уже сейчас.
       

       
       
    • pokrac
      От pokrac
      Давал ребенкоу поиграть в компьютер, что то скачивал, по итогу ночью открываю компьютер, а у меня все файлы с префиксом Lock. ничего не открывается, ну и смена обоев, с тг аккаунтом для решения вопроса
    • esc.tech
      От esc.tech
      Здравствуйте, я бы хотел у вас спросить, когда вы добавите в свой антивирус дополнительное сканирование файлов? Так как в последнее время люди уже начинают шифровать вирусы что делает его незамеченным и ваш антивирус не замечает его. 

×
×
  • Создать...