Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-101076
BorisUK
2002-10-14 08:27
2002.10.31
Сортировка кешированного набора данных


7-101530
nv-vetal
2002-08-24 12:23
2002.10.31
Как пересчитать все папки (файлы) в определенной папке?


3-101148
Explorer
2002-10-10 15:10
2002.10.31
Базу на Access перетянуть на MSSQL


1-101226
stany
2002-10-18 23:11
2002.10.31
Нужен компонент типа StringGrid выводить заголовки полей...


6-101419
Enton
2002-08-31 23:07
2002.10.31
Как проверить существование файла в интернет





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский