Оператор запятой оценивает каждый из своих операндов (слева направо) и возвращает значение последнего операнда.
blockquote>console.log((1, 2)); // Returns 2 in console console.log((a = b = 3, c = 4)); // Returns 4 in console
Итак, посмотрим пример:
var a = { foo: function() { console.log(this === window); } }; a.foo(); // Returns 'false' in console (0, a.foo)(); // Returns 'true' in console
Теперь в
foo
методthis
равенa
(потому чтоfoo
присоединен кa
). Поэтому, если вы вызываетеa.foo(
), он будет записыватьfalse
в консоли.Но если вы звонили
(0, a.foo)()
. Выражение(0, a.foo)
будет оценивать каждый из его операндов (слева направо) и возвращает значение последнего операнда. Другими словами,(0, a.foo)
эквивалентенfunction() { console.log(this === window); }
. Поскольку эта функция больше не привязана ни к чему, ее
this
является глобальным объектомwindow
. Вот почему он записываетtrue
в консоли при вызове(0, a.foo)()
.
Самый простой способ - изменить код RTF, чтобы вставить картинку самостоятельно.
В формате RTF изображение определяется следующим образом:
'{' \ pict (brdr? & Amp; shading? & Amp; picttype & amp; pictsize & amp; metafileinfo?) Data '}' A знак вопроса указывает, что контрольное слово является необязательным. «данные» - это просто содержимое файла в шестнадцатеричном формате. Если вы хотите использовать двоичный файл, используйте управляющее слово \ bin.
Например:
{\pict\pngblip\picw10449\pich3280\picwgoal5924\pichgoal1860 hex data}
{\pict\pngblip\picw10449\pich3280\picwgoal5924\pichgoal1860\bin binary data}
\ pict = запускает группу изображений, \ pngblip = png picture \ picwX = ширина изображения (X - значение пикселя) \ pichX = высота картинка \ picwgoalX = желаемая ширина картинки в твипах
Итак, чтобы вставить картинку, вам просто нужно открыть свою картинку, преобразовать данные в шестнадцатеричный формат, загрузить эти данные в строку и добавить коды RTF вокруг него, чтобы определить картину RTF. Теперь у вас есть отдельная строка с данными изображения, которую вы можете вставить в код RTF документа. Не забывайте закрывать "}"
Далее вы получаете код RTF из вашего RichTextBox (rtbBox.Rtf), вставляете картинку в нужное место и устанавливаете код rtbBox.Rtf
Одна из проблем, с которой вы можете столкнуться, заключается в том, что .NET RTB не очень хорошо поддерживает стандарт RTF.
Я только что сделал небольшое приложение *, которое позволяет вам быстро протестировать некоторый код RTF внутри RTB и посмотреть, как он его обрабатывает. Вы можете скачать его здесь: RTB-тестер ( http://your-translations.com/toys ).
Вы можете вставить некоторое содержимое RTF (например, из Word) в левое поле RTF и нажать «Показать коды RTF», чтобы отобразить коды RTF в правом окне RTF, или вставить код RTF. в правом RTB и нажмите «Применить коды RTF», чтобы увидеть результаты с левой стороны.
Конечно, вы можете редактировать коды по своему усмотрению, что делает его очень удобным для проверки того, поддерживает ли RichTextBox нужные вам команды или узнать, как использовать контрольные слова RTF.
Вы можете скачать полную спецификацию для RTF онлайн.
NB Это всего лишь небольшая вещь, которую я собрал за 5 минут, поэтому я не реализовал открытие или сохранение файлов, перетаскивание и другие цивилизованные вещи.
private void toolStripButton1_Click(object sender, EventArgs e)
{
FileDialog fDialog = new OpenFileDialog();
fDialog.CheckFileExists = true;
fDialog.CheckPathExists = true;
fDialog.RestoreDirectory = true;
fDialog.Title = "Choose file to import";
if (fDialog.ShowDialog() == DialogResult.OK)
{
string lstrFile = fDialog.FileName;
Bitmap myBitmap = new Bitmap(lstrFile);
// Copy the bitmap to the clipboard.
Clipboard.SetDataObject(myBitmap);
DataFormats.Format format = DataFormats.GetFormat(DataFormats.Bitmap);
// After verifying that the data can be pasted, paste
if(top==true && this.rtTop.CanPaste(format))
{
rtTop.Paste(format);
}
if (btmLeft == true && this.rtBottomLeft.CanPaste(format))
{
rtBottomLeft.Paste(format);
}
if (btmCenter == true && this.rtBottomCenter.CanPaste(format))
{
rtBottomCenter.Paste(format);
}
if (btmRight == true && this.rtBottomRight.CanPaste(format))
{
rtBottomRight.Paste(format);
}
}
}
Вот то, что я делаю для взламывания управления обогащенным текстом:
Вставляют необходимое изображение в wordpad или MSWORD. Сохраните файл как 'rtf'. Откройте rtf файл в блокноте для наблюдения сырых данных rtf код. Скопируйте необходимые теги & наполните к 'rtf' свойству Вашего Форматируемого поля (добавьте к существующему тексту).
существует некоторый включенный метод проб и ошибок, но работы.
С C#, я использую заполнителя объекты StringBuilder с необходимым кодом rtf. Затем я просто добавляю канал передачи изображения.
Это - обходное решение для того, чтобы не иметь необходимость изучить синтаксис RTF.
Если Вы были в C++, способ сделать это через OLE. Строго говоря, при поиске Google ImageDataObject, он покажет код C++, как вставить HBITMAP в Управление RTF. Одна ссылка здесь .
Теперь, как это переводит в код .NET, я не знаю. У меня в настоящее время нет времени для работы через детали.
Я использую следующий код, чтобы сначала получить данные из буфера обмена, сохранить их в памяти, установить изображение в буфер обмена, вставить его в поле форматированного текста и, наконец, восстановить данные в буфере обмена.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
OpenFileDialog1.Filter = "All files |*.*"
OpenFileDialog1.Multiselect = True
Dim orgdata = Clipboard.GetDataObject
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
For Each fname As String In OpenFileDialog1.FileNames
Dim img As Image = Image.FromFile(fname)
Clipboard.SetImage(img)
RichTextBox1.Paste()
Next
End If
Clipboard.SetDataObject(orgdata)
End Sub
OpenFileDailog1, RichTextBox1 и Button1 - это диалоговое окно открытия файла, поле с форматированным текстом и кнопки соответственно.