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.
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти