Cannot assign TFont to a TFont

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Cannot assign TFont to a TFont

Mesaj gönderen ikra »

selamu aleykum.

arkadaslar hepinize kolay gelsin.
bi konuda rahatsiz etmek istiyorum.

bir MDI proje gelistirmeye calisiyorum.
MDI cocuklar bir dll de bariniyor ve yine DLL üzerinde olusturuluyor.
Dll'de olusturulan form'a VCL bilesen attigimda, Cannot assign TFont to a TFont seklinde hata mesaji aliyorum.
Bir kac gün google'in kapasitesini zorladim. karsilastigim sonuc su.

1) BPL dosyalarini paylasmam gerekiyormus. (bundan kacinmaya calisiyorum, neden derseniz, tamamen duygusal)
2) DLL ve Application olusturulurken her biri farkli ControlAtom kullandiklari icin, her iki dosya bellekte farkli bir adreste bariniyorlarmis. bu nedenle iki farkli applikasyon olarak görülüyor ve birinci applikasyondan ikinci applikasyona assign olayini kullanamiyormus.
ikinci secenege alternatif olarak bir care sunmuslar. Controls.pas dosyasinin icinde oynama yapip, applikasyon icin olusturulan atom'un pointer bilgisini alip, dll dosyasinin atomunu applikasyondan gelen atom ile degistiriyorum.
internette verilen bilgiye göre calismasi gerekiyor, fakat kodlari tamamen kopyalamis olmama ragmen bu hatayi almaya devam ediyorum.

aranizda, dll den MDIChild olusturup, icerisinde örnegin cxGrid veya benzeri VCL nesnesi kullanipta bu hatasi almamis arkadaslar var mi?
fikir önerebilirler mi?

simdi den tesekkür ederim.
selam ve dua ile...
kıdemsiz üye
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Cannot assign TFont to a TFont

Mesaj gönderen SimaWB »

DLL'den MDI child form oluştururken, DLL'de form create etmeden önce uygulamanızın ve ana formun (MDI form) handle bilgilerini DLL'e parametre olarak göndermelisiniz. DLL içinde; form create'te parametre olarak gelen Application.Handle'ı ve MDI Child formun ParentWindow'unu belirtmek için de parametre olarak gelen ana formun handle'ını kullanmalısınız.
Bu şekilde yaptığınızda sorunsuz çalışması lazım.
There's no place like 127.0.0.1
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Cannot assign TFont to a TFont

Mesaj gönderen ikra »

abicim cevabin icin tesekkür ederim.
ben formu bahsettigin sekilde olusturuyorum. form olusturmakta sorun yok.
hersey cok güzel calisiyor.
ta ki, üzerinde bir grid atincaya kadar.

sorunum formu olusturmakta degil, olusturdugum formun icinde vcl bilesenlerini kullanmakta.
kıdemsiz üye
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Cannot assign TFont to a TFont

Mesaj gönderen sabanakman »

Kodlar arası versiyon uyuşmazlığı olabilir. Sizin veya .dll içerisindeki VCL içerisinden yapılan en küçük bir değişiklik sorun çıkaracaktır. Hatta farklı delphi versiyonlarında derleme oluyorsa zaten hiç o şekilde kullanmaya niyetlenmeyin bile :) .
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Cannot assign TFont to a TFont

Mesaj gönderen ikra »

abicim cevabin icin tesekkür ederim.

dll'yi de, applikasyonuda ayni programda, ayni bilgisayarda, ayni bilesenler ile compile ediyorum.
yani versiyonlar veyahut programlar arasinda hic bir fark yok.

yukarida bahsettigim gibi, dll ve applikasyonun iki farkli bellek adresinde tutulmasindan dolayi, programlar arasi assign gecisi yapilamiyormus.
aslinda font'tan kaynaklanan bir durum degil bu, cünkü font ile hic bir islem yapmiyorum. kodlar bos. yalnizca bos bir formun üzerine grid atiyorum, hata vermeye basliyor.

google'da baktim bir cok kisinin basina gelmis bu olay.
fakat malesef her hangi bir cözüm bulunamamis.

microsoft bir cok formu dll lerde tutuyor ve gerektiginde dll den yükleyerek formu kullaniyor.
bu formlarin üzerlerinde yine vcl bilesenleri mevcut.
yani bu isin olmamasi icin hic bir neden yok.
kıdemsiz üye
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: Cannot assign TFont to a TFont

Mesaj gönderen aLonE CoDeR »

Sadece cxGrid atınca mı oluyor? Basit bir Label ya da Edit attığında da oluyor mu aynı şey? Kesin emin olmamakla birlikte bu bir Parent sorunu olmalı şeklinde değerlendiriyorum.
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Cannot assign TFont to a TFont

Mesaj gönderen ikra »

abi edit ve label bilesenleri attigimda sorun yok.
cxgrid attigimda eger ki, kolonun genisligi kolon basligindan dar ise, yani kolon basliginin yarisi görülüyor ise bu hatayi veriyor.
kolonlari genis tuttugumda hata yok.
birde bu hatayi ancak kolonun üzerine fare ile gelirsem veriyor.
fare ile kolona gelmezsen hic hata yok.

cikamadim isin icinden.
formda cxgrid kullanmak zorundayim.
kıdemsiz üye
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Cannot assign TFont to a TFont

Mesaj gönderen orhancc »

Delphi kaynak kodunu bu şekilde değiştirip yeniden derle sorunun düzelmesi gerekiyor.
In this you have to edit graphics.pas found in \source\vcl.

First find the code below

procedure TCanvas.SetFont(Value: TFont);
begin
FFont.Assign(Value);
end;

and add a try..except statement like so

procedure TCanvas.SetFont(Value: TFont);
begin
try
FFont.Assign(Value);
except
on Exception do;
end;
end;

then recompile.

Remember to backup the original graphics.pas
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Cannot assign TFont to a TFont

Mesaj gönderen ikra »

malesef abicim.
bahsettigin kod'u internetten bulmustum.
denedim ama sonuc alamadim.
kıdemsiz üye
Cevapla