![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Че за фигня-я-я-я ??? [D6, WinXP]
Kinder © (2002-10-18 22:49:00)Доброе утро, день, ночь, уважаемые мастера!
Прошу Вас не оставить без внимания мой вопрос:
Создал ДЛЛ в которую передаю канвас, рисую на нем все ОК.
Но как только пытаюсь поменять шрифт или любое свойство у Canvas.Font Выдает ошибку Ацес Волатион!
Как быть?
Kinder (2002-10-21 22:30:00) [1]--> Rouse_
Вот и я этот прикол понять не могу...
Тестил по всякому работает только без ран-тайм пакетов
(длл и ехе), а с пакетами ацес валатион!!!!!!!!!!!!!!!
Rouse_ (2002-10-20 03:52:00) [2]Ууух вы бы знали как я не люблю ShareMem ув. PVOzerski © , серьезно. Ведь действительно у меня тот код который я привел работает изюмительно во всех его реинкарнациях. Почему так не происходит у Kinder, я пока не знаю, возможно он как-то модифицировал код, тогда хотелось бы взглянуть на исходники. Компилил я его тоже под Delphi6 и ХР.
Странно :$
PVOzerski (2002-10-20 03:07:00) [3]Народ, а у меня еще догадка есть...
>Canvas.Font.Name:="Tahoma";
Это, между прочим, ansistring, возможно, попавший в DLL из Exe. Если объект tFont не порождается каждый раз заново при обращении к свойству font канвы, а имя хранится в строке, а не порождается каждый раз заново при обращении к свойству Name (а так ли это - надо рыть исходники), то, возможно, надо добавлять Борландовский менеджер памяти в виде dll. Но это лишь предположение...
Rouse_ (2002-10-20 02:28:00) [4]Как? Я же все проверил, и с ними и без них, я же написал вчера
Rouse_ © (19.10.02 00:18), у меня все работало, и никаких глюков. Попробуй библиотеку оставить без рантайм (всеравно маленькая будет) а прогу с рантайм, я вчера тестил во всех четырех вариантах (прога, библиотека, каждая с рантайм и без рантайм)
Желаю успехов
Kinder (2002-10-20 02:15:00) [5]
-->Rouse
Да дело в том, что сними, ни х..на не хотит работать
Что делать ума не приложу...
Rouse_ (2002-10-20 02:09:00) [6]В смысле? А что не должно работать? Я правда без stdcall не проверял
Анекдот знаешь?
Подходит сын к отцу - программисту который уже вторую неделю сидит в глубокой отладке и никак выбраться из нее не может и спрашивает
Пап, а почему солнце утром восходит на Восходе а садится вечером на западе?
Тот ему - "Проверял?"
- Да
- И все работает?
- Да
- Все точно проверил?
- Да
- Сынок, только ничего не трогай!!!
Так вот, работает и фиг с ним, только ничего не трогай ;))
Желаю успехов
Kinder (2002-10-20 01:51:00) [7]Проверил без run-time пакетов рабоет, но почему?
и stdcall тут не причем - это верно.
Юрий Зотов (2002-10-19 01:03:00) [8]Похоже, разница в разных Canvas"ах. См. реализацию CreateHandle в TBitmapCanvas и TControlCanvas.
Rouse_ (2002-10-19 00:51:00) [9]Да, только stdcall и немного вызов процедуры подменил.
Спасибо за ответ
Юрий Зотов (2002-10-19 00:47:00) [10]> Rouse
Это было как раз предположение о несовместимости и Font Manager, и вообще объектов. Но только предположение, поэтому и попросил проверить с общими пакетами.
Вообще-то странно. Неработавший и работающий варианты отличаются только директивой stdcall (если я ничего не прозевал, конечно). Но только в этом причина быть явно не может. В чем же разница? Непонятно.
Rouse_ (2002-10-19 00:26:00) [11]Вопрос к Юрию Зотову Rouse_ © (18.10.02 23:58)остается в силе
Заранее спасибо
Kinder (2002-10-19 00:21:00) [12]Спасибо, всем ответившим!
Особенно Rouse_ , ПОПРОБУЮ ЕЩЕ РАЗ ПЕРЕЛОПАТИТЬ КОД!
больше сидеть не могууу...
dissssssconnnnect.........
Rouse_ (2002-10-19 00:18:00) [13]Только что проверил, и с рантайм пакетами тоже работает
Желаю успехов
Rouse_ (2002-10-19 00:15:00) [14]b.free; Забыл ;))
reonid (2002-10-19 00:14:00) [15]>Не подскажите как ее решить или обойти, т.к. шрифты >использовать необходимо!
Так сразу не скажу.
Ты сначала проверь, так ли это.
Если ты используешь рантайм пакеты, то может, и не так.
Но что, например, можно сделать:
в ДЛЛ динамически создать канвас и присвоить ему контекст переданного. Идея не слишком изящная, но должно сработать.
Rouse_ (2002-10-19 00:12:00) [16]Вот все работает но без рантайм
пакетов
library qwe;
uses
SysUtils,
Classes,
Graphics,
Windows;
{$R *.res}
function PluginExec(canvas:TCanvas):Boolean; stdcall;
var R,G,B,X,Y:Integer;
const Ten:Real=0.9;
begin
for X:=10 to 300 do
begin
for Y:=10 to 300 do
begin
R:=Round(GetRValue(Canvas.Pixels[x,y]) * Ten);
G:=Round(GetGValue(Canvas.Pixels[x,y]) * Ten);
B:=Round(GetBValue(Canvas.Pixels[x,y]) * Ten);
Canvas.Pixels[x,y]:=RGB(R,G,B);
end;
end;
Canvas.Font.Name:="Tahoma";
Canvas.Font.Size:=16;
Canvas.Font.Style:=[fsBold, fsItalic];
Canvas.Font.Color:=clRed;
Canvas.TextOut(15,15,"
Kinder (2002-10-19 00:05:00) [17]
-->reonid
Не подскажите как ее решить или обойти, т.к. шрифты использовать необходимо!
reonid (2002-10-18 23:59:00) [18]Насколько я помню, работа со шрифтами в Дельфях идёт через глобальный объект FontManager - а в ЕХЕ и в ДЛЛ будут две различные его версии. В этом, вероятно, и есть проблема.
Rouse_ (2002-10-18 23:58:00) [19]
> Юрий Зотов © (18.10.02 23:52)
А нельзя ли пояснить? Что-то я не могу понять о чем вы. Если о ShareMem то вполне возможно, но я насколько знаю она используется для правильного распределения памяти (кажется так), а если нет то просто если столкнусь с такой проблемой чтобы знать все подводные камни
Kinder (2002-10-18 23:56:00) [20]-->Юрий Зотов
Как раз, что и компилируется усе с run-time пакетами...