Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> межБуквенный интервал, GDI+ текст 
:(
    Опции темы
sindi8
Дата 23.6.2005, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



smile
Уже 4 часа бьюсь - ищу сабж. Может кто нибудь уже копал в ту же сторону?
PM MAIL   Вверх
AntonSaburov
Дата 23.6.2005, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 1
Всего: 118



Может попробовать поискать решение в CreateFont и пробелы понаставить.
PM MAIL WWW ICQ   Вверх
sindi8
Дата 23.6.2005, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



Дело в том, что нужно не увеличивать интервал, а уменьшать.
Добавлено @ 17:57
Есть один метод в MFC ExtTextOut. Вроде бы там что-то похожее. Но проблема в следующем - я подключил библиотеку, определил метод как внешний, выполнил его со своими параметрами, но ничего не получил... Знаю что что-то либо не так делаю, либо не доделываю smile
PM MAIL   Вверх
AntonSaburov
Дата 23.6.2005, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 1
Всего: 118



Может тогда еще проще пойти - бить строки на символы и лепить их поближе друг к другу ?
PM MAIL WWW ICQ   Вверх
nikf
Дата 23.6.2005, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 6.6.2005
Где: город-герой Жирно вск

Репутация: нет
Всего: 1



Код

grf.MeasureString("99999",this.Font);
разве перестало работать? или я опять чето не понял?
PM MAIL   Вверх
sindi8
Дата 24.6.2005, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата
разве перестало работать

А по конкретней? Где здесь изменение межсимвольного расстояния?
Выводить посимвольно не катит - производительность не устраивает.
Народ, помогите, очень надо!

Это сообщение отредактировал(а) sindi8 - 24.6.2005, 09:35
PM MAIL   Вверх
mr.DUDA
Дата 24.6.2005, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Не знаю, может это совсем никак не похоже на требуемый результат, но может чем-то поможет. Попробуй выставить ScaleTransform у Graphics перед выводом текста - тогда весь текст (вместе с межсимвольным интервалом) "сожмётся". Можно подобрать такой масштаб по X и Y в сочетании с размером шрифта, что будет достигнут результат, более-менее...

З.Ы. хотя, конечно, это "не то". Но лучшее, что у меня получилось с использованием Win32 - это вот что:
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Runtime.InteropServices;
using System.IO;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct RECT
        {
            public int left;
            public int top;
            public int right;
            public int bottom;
            public RECT(int left, int top, int right, int bottom)
            {
                this.left = left;
                this.top = top;
                this.right = right;
                this.bottom = bottom;
            }
        }

        [DllImport("gdi32.dll", CharSet = CharSet.Ansi)]
        public unsafe static extern IntPtr ExtTextOut(IntPtr hdc, int X, int Y, ushort fuOptions, RECT* rect, byte* str, ushort cbcnt, int *lpdx);


        private unsafe void panel1_Paint(object sender, PaintEventArgs e)
        {
            checked
            {
                IntPtr hdc = e.Graphics.GetHdc();
                string str = "12345";
                MemoryStream stream = new MemoryStream(str.Length);
                StreamWriter writer = new StreamWriter(stream, Encoding.ASCII);
                writer.Write(str); writer.Flush();
                byte[] barr = new byte[stream.Length];
                stream.Seek(0, SeekOrigin.Begin);
                stream.Read(barr, 0, (int)stream.Length);

                RECT* rect = stackalloc RECT[1];
                byte* buff = stackalloc byte[barr.Length];
                for (int i = 0; i < barr.Length; i++)
                    buff[i] = barr[i];
                int* dx = stackalloc int[str.Length];
                for (int j = 0; j < barr.Length; j++)
                    dx[j] = 10;

                rect[0] = new RECT(0, 0, 100, 100);
                ExtTextOut(hdc, 0, 0, 0, rect, buff, (ushort)str.Length, dx);
            }
        }
    }
}


Выглядит не очень, и нужно в опциях проекта выставлять "Allow unsafe code", зато рисует растянутую строку.

З.Ы. пример написан на .NET 2.0, так что слово "partial" в объявлении класса надо выкинуть, но главное - это код по отрисовке панели и объявление структуры и внешней ф-ции.


--------------------
user posted image
PM MAIL WWW   Вверх
sindi8
Дата 27.6.2005, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



Большое спасибо.
На счет ScaleTransform знаю. Не совсем конечно то, но было принято решение использовать именно ее за неимением времени. А вдальнейшем все-таки работать с графикой на C++.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.