Форум: "Основная";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];
ВнизЧе за фигня-я-я-я ??? Найти похожие ветки
← →
Kinder (2002-10-18 22:49) [0]Доброе утро, день, ночь, уважаемые мастера!
Прошу Вас не оставить без внимания мой вопрос:
Создал ДЛЛ в которую передаю канвас, рисую на нем все ОК.
Но как только пытаюсь поменять шрифт или любое свойство у Canvas.Font Выдает ошибку Ацес Волатион!
Как быть?
← →
Rouse_ (2002-10-18 22:53) [1]Хех, покажи как сделал, код примема и передачи
Желаю успехов
← →
Kinder (2002-10-18 22:59) [2]**********ФУНКЦИЯ В ДЛЛ
function PluginExec(canvas:TCanvas):Boolean;
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.Brush.Style:=bsClear;
Canvas.Font.Size:=16;
Canvas.Font.Style:=[fsBold, fsItalic];
Canvas.Font.Color:=clRed;
Canvas.TextOut(150,150,"Октябрь");
PluginExec:=True;
end;
**********ВЫЗЫВАЮ ИЗ ПРОГРАММЫ
PluginExec(Image1.Canvas);
← →
Rouse_ (2002-10-18 23:13) [3]Вызов
procedure TForm1.Button1Click(Sender: TObject);
var b:TBitmap;
begin
b:= TBitmap.Create;
b.Assign(Image1.Picture.Bitmap);
PluginExec(B.canvas);
Image1.Picture.Assign(b);
end;
В библиотеке
function PluginExec(canvas:TCanvas):Boolean; stdcall;
Сильно не тестил но вроде работает
Желаю успехов
← →
Kinder (2002-10-18 23:30) [4]--->Rouse
Все равно когда использую шрифт не хоца, а когда просто
рисую Ок!
← →
Rouse_ (2002-10-18 23:42) [5]Попробуй передавать не канвас а битмап, а попозже посмотрю как правильнее и вызов cделай ( var Bitmap: TBitmap)
Желаю успехов
← →
k (2002-10-18 23:44) [6]проверь, правильно ли ты задал размеры канваса. на всякий случай.
← →
Kinder (2002-10-18 23:49) [7]
-->k
Размеры тут ни при чем так как если я не изменяю
стиль или размер шрифта все нормально, TextOut выводит надпись
без замечания, но мне нужно менять шрифт
-->Rouse_
Спасибо, попробую...
← →
Юрий Зотов (2002-10-18 23:52) [8]Думаю, дело тут может быть глубже.
Попробуйте откомпилировать и EXE, и DLL с run-time пакетами. Если проблема исчезнет, то я, к сожалению, прав. Результат сообщите, от него будем думать дальше.
← →
Kinder (2002-10-18 23:56) [9]-->Юрий Зотов
Как раз, что и компилируется усе с run-time пакетами...
← →
Rouse_ (2002-10-18 23:58) [10]
> Юрий Зотов © (18.10.02 23:52)
А нельзя ли пояснить? Что-то я не могу понять о чем вы. Если о ShareMem то вполне возможно, но я насколько знаю она используется для правильного распределения памяти (кажется так), а если нет то просто если столкнусь с такой проблемой чтобы знать все подводные камни
← →
reonid (2002-10-18 23:59) [11]Насколько я помню, работа со шрифтами в Дельфях идёт через глобальный объект FontManager - а в ЕХЕ и в ДЛЛ будут две различные его версии. В этом, вероятно, и есть проблема.
← →
Kinder (2002-10-19 00:05) [12]
-->reonid
Не подскажите как ее решить или обойти, т.к. шрифты использовать необходимо!
← →
Rouse_ (2002-10-19 00:12) [13]Вот все работает но без рантайм
пакетов
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,"
← →
reonid (2002-10-19 00:14) [14]>Не подскажите как ее решить или обойти, т.к. шрифты >использовать необходимо!
Так сразу не скажу.
Ты сначала проверь, так ли это.
Если ты используешь рантайм пакеты, то может, и не так.
Но что, например, можно сделать:
в ДЛЛ динамически создать канвас и присвоить ему контекст переданного. Идея не слишком изящная, но должно сработать.
← →
Rouse_ (2002-10-19 00:15) [15]b.free; Забыл ;))
← →
Rouse_ (2002-10-19 00:18) [16]Только что проверил, и с рантайм пакетами тоже работает
Желаю успехов
← →
Kinder (2002-10-19 00:21) [17]Спасибо, всем ответившим!
Особенно Rouse_ , ПОПРОБУЮ ЕЩЕ РАЗ ПЕРЕЛОПАТИТЬ КОД!
больше сидеть не могууу...
dissssssconnnnect.........
← →
Rouse_ (2002-10-19 00:26) [18]Вопрос к Юрию Зотову Rouse_ © (18.10.02 23:58) остается в силе
Заранее спасибо
← →
Юрий Зотов (2002-10-19 00:47) [19]> Rouse
Это было как раз предположение о несовместимости и Font Manager, и вообще объектов. Но только предположение, поэтому и попросил проверить с общими пакетами.
Вообще-то странно. Неработавший и работающий варианты отличаются только директивой stdcall (если я ничего не прозевал, конечно). Но только в этом причина быть явно не может. В чем же разница? Непонятно.
← →
Rouse_ (2002-10-19 00:51) [20]Да, только stdcall и немного вызов процедуры подменил.
Спасибо за ответ
← →
Юрий Зотов (2002-10-19 01:03) [21]Похоже, разница в разных Canvas"ах. См. реализацию CreateHandle в TBitmapCanvas и TControlCanvas.
← →
Kinder (2002-10-20 01:51) [22]Проверил без run-time пакетов рабоет, но почему?
и stdcall тут не причем - это верно.
← →
Rouse_ (2002-10-20 02:09) [23]В смысле? А что не должно работать? Я правда без stdcall не проверял
Анекдот знаешь?
Подходит сын к отцу - программисту который уже вторую неделю сидит в глубокой отладке и никак выбраться из нее не может и спрашивает
Пап, а почему солнце утром восходит на Восходе а садится вечером на западе?
Тот ему - "Проверял?"
- Да
- И все работает?
- Да
- Все точно проверил?
- Да
- Сынок, только ничего не трогай!!!
Так вот, работает и фиг с ним, только ничего не трогай ;))
Желаю успехов
← →
Kinder (2002-10-20 02:15) [24]
-->Rouse
Да дело в том, что сними, ни х..на не хотит работать
Что делать ума не приложу...
← →
Rouse_ (2002-10-20 02:28) [25]Как? Я же все проверил, и с ними и без них, я же написал вчера
Rouse_ © (19.10.02 00:18), у меня все работало, и никаких глюков. Попробуй библиотеку оставить без рантайм (всеравно маленькая будет) а прогу с рантайм, я вчера тестил во всех четырех вариантах (прога, библиотека, каждая с рантайм и без рантайм)
Желаю успехов
← →
PVOzerski (2002-10-20 03:07) [26]Народ, а у меня еще догадка есть...
>Canvas.Font.Name:="Tahoma";
Это, между прочим, ansistring, возможно, попавший в DLL из Exe. Если объект tFont не порождается каждый раз заново при обращении к свойству font канвы, а имя хранится в строке, а не порождается каждый раз заново при обращении к свойству Name (а так ли это - надо рыть исходники), то, возможно, надо добавлять Борландовский менеджер памяти в виде dll. Но это лишь предположение...
← →
Rouse_ (2002-10-20 03:52) [27]Ууух вы бы знали как я не люблю ShareMem ув. PVOzerski © , серьезно. Ведь действительно у меня тот код который я привел работает изюмительно во всех его реинкарнациях. Почему так не происходит у Kinder, я пока не знаю, возможно он как-то модифицировал код, тогда хотелось бы взглянуть на исходники. Компилил я его тоже под Delphi6 и ХР.
Странно :$
← →
Kinder (2002-10-21 22:30) [28]--> Rouse_
Вот и я этот прикол понять не могу...
Тестил по всякому работает только без ран-тайм пакетов
(длл и ехе), а с пакетами ацес валатион!!!!!!!!!!!!!!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.014 c