AZЪ Опубликовано 15 февраля, 2010 Поделиться Опубликовано 15 февраля, 2010 Umnik, что-то я тут подумал, а тебе точно нужно именно, то что ты спросил , а не вот это? memo1.SetSelTextBuf(PChar('<b>'+memo1.SelText+'</b>')); Т.е. получится как на форме ответа на форуме Выделил текст и по нажатию на кнопку заключил его между символами кода. Соответственно развивая код, ты можешь для разных кнопок сделать следующее: 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Umnik Опубликовано 16 февраля, 2010 Поделиться Опубликовано 16 февраля, 2010 (изменено) AZЪ, о, отлично. Сегодня гляну на работе. 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 позиций назад Но есть function GetCursor: TCursor; virtual; Может возможно его заюзать, чтобы не делать возврат курсора? Пока так: procedure TMainWindow.BoldClick(Sender: TObject); begin TextFild.SelText := '<b></b>'; TextFild.SelStart := TextFild.CaretPos.x-4; end; Быдлокод во все поля В принципе, можно процедуру отдельную сделать для тегов, а то сейчас на каждый спид баттон отдельная процедура %) Изменено 16 февраля, 2010 пользователем Umnik Ссылка на комментарий Поделиться на другие сайты Поделиться
AZЪ Опубликовано 16 февраля, 2010 Поделиться Опубликовано 16 февраля, 2010 Отдельная процедура все равно будет в том или ином виде, т.к. отработка нажатия кнопки никуда не денется. Можешь написать функцию и вызывать её при нажатии любой кнопки. В эту функцию будешь передавать 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; Ссылка на комментарий Поделиться на другие сайты Поделиться
Umnik Опубликовано 16 февраля, 2010 Поделиться Опубликовано 16 февраля, 2010 Я сделал так: код: 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. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти