Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];

Вниз

TextWidth удаляет DC канвы.   Найти похожие ветки 

 
homm ©   (2006-02-27 11:21) [0]


procedure TFlatTabControl.DoPaint (Sender: PControl; DC:HDC);
{*********}
   Bitmap := NewBitmap(Width, Self.MarginTop + Self.MarginBottom);
   with Bitmap.Canvas^ do begin
       Font.FontName := "Verdana";
       FillRect(Bitmap.BoundsRect);
       TR := MakeRect(0, 0, TextWidth(Children[2].RE_URL), 20); // <-- Удаляется DC
       DrawText(Children[2].RE_URL, TR, DT_CENTER or DT_VCENTER or DT_SINGLELINE);
   end;
   Bitmap.Draw(DC, 0, Height - Bitmap.Height);
   Bitmap.Free;
{*********}

Не выводится все, что ниже TextWidth(Children[2].RE_URL).
Меняем TextWidth на константу, текст выводится.

Проблема в следующей функции: KOL.PAS:

function TCanvas.TextExtent(const Text: string): TSize;
{*********}
 If Not fIsPaintDC then ClearHandle := True; //************ // Added By Gerasimov // <-- Проблемная строка.
{*********}
 if ClearHandle then
   SetHandle( 0 );
{*********}
end;


Не понял, зачем удалять DC, если она не оконная? Какой в этом смысл?

//If Not fIsPaintDC then ClearHandle := True; //************ // Added By Gerasimov // Deleted by homm


 
Vladimir Kladov   (2006-02-28 21:27) [1]

изменить не долго. Тестировать кто будет? Досконально, мемпруфом, тесты гонять, сотни тестов, разных. Ась?

Я в своих прогах делаю так: создаю битмап, когда надо померить текст, присваиваю ему фонт, и меряю. И неважно, для какой канвы. На контролах та же штука получается. По крайней мере, не зависит от версии KOL. Ну если удастся проблему решить, и без перерасхода GDI-ресурсов, да я же только за.


 
homm ©   (2006-03-04 15:41) [2]


> [1] Vladimir Kladov   (28.02.06 21:27)
Это все понятно. я вроде сначало попросил ответить на вопрос:

> Не понял, зачем удалять DC, если она не оконная? Какой в
> этом смысл?

а Вы сразу так кидаететсь.

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

ЗЗЫ Слишком много надежд у вес на этот мемпрооф. OMXO диспетчер задач коректее ресурсы считает, хотя конечно в 9х альтернатив нет.


 
Vladimir Kladov   (2006-03-04 16:43) [3]

3 года назад по этому поводу была война. Я ее выиграл - и Солнышко светит (анекдот такой). Опять начинаете. А я говорю: исправить эту строчку - последствия могут быть плачевные. Особенно под win9x.

Мемпруф показывает не просто количество хэндлов, а их типы. Тем и полезнее.


 
SPeller ©   (2006-03-09 09:25) [4]

А я делаю так:

type
TCCanvas = object(TCanvas)
end;
PCCanvas = ^TCCanvas;

в коде:

PCCanvas(MyCanvasVar).fIsPaintDC := True;

и всё :) и волки сыты, и овцы целы :)



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.051 c
15-1165325019
Pazitron_Brain
2006-12-05 16:23
2006.12.24
Матрица I


2-1165566635
Roman_ln
2006-12-08 11:30
2006.12.24
Help!!! listBox найти max кол. повторяющихся элементов


2-1165493327
SMAC
2006-12-07 15:08
2006.12.24
Прозрачность (2)


15-1165225520
Piter
2006-12-04 12:45
2006.12.24
А сколько стоит бензин в США?


15-1165139896
ml
2006-12-03 12:58
2006.12.24
"TUnRar без Dll" - моя первая статья





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский