Как я могу вставить изображение в RichTextBox?

Оператор запятой оценивает каждый из своих операндов (слева направо) и возвращает значение последнего операнда.

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)().

26
задан Daniel LeCheminant 12 February 2009 в 19:32
поделиться

5 ответов

Самый простой способ - изменить код 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 минут, поэтому я не реализовал открытие или сохранение файлов, перетаскивание и другие цивилизованные вещи.

53
ответ дан Sylverdrag 15 October 2019 в 07:14
поделиться
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);
            }
        }
    }
6
ответ дан Dominic Rodger 15 October 2019 в 07:14
поделиться

Вот то, что я делаю для взламывания управления обогащенным текстом:

Вставляют необходимое изображение в wordpad или MSWORD. Сохраните файл как 'rtf'. Откройте rtf файл в блокноте для наблюдения сырых данных rtf код. Скопируйте необходимые теги & наполните к 'rtf' свойству Вашего Форматируемого поля (добавьте к существующему тексту).

существует некоторый включенный метод проб и ошибок, но работы.

С C#, я использую заполнителя объекты StringBuilder с необходимым кодом rtf. Затем я просто добавляю канал передачи изображения.

Это - обходное решение для того, чтобы не иметь необходимость изучить синтаксис RTF.

4
ответ дан Sesh 15 October 2019 в 07:14
поделиться

Если Вы были в C++, способ сделать это через OLE. Строго говоря, при поиске Google ImageDataObject, он покажет код C++, как вставить HBITMAP в Управление RTF. Одна ссылка здесь .

Теперь, как это переводит в код .NET, я не знаю. У меня в настоящее время нет времени для работы через детали.

0
ответ дан Joel Lucsy 15 October 2019 в 07:14
поделиться

Я использую следующий код, чтобы сначала получить данные из буфера обмена, сохранить их в памяти, установить изображение в буфер обмена, вставить его в поле форматированного текста и, наконец, восстановить данные в буфере обмена.

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 - это диалоговое окно открытия файла, поле с форматированным текстом и кнопки соответственно.

11
ответ дан 28 November 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: