Yeni bir başlık gönderCevap gönder 1. sayfa (Toplam 1 sayfa)   [ 9 mesaj ]
Yazar Mesaj
 Mesaj Başlığı: Notification
MesajGönderilme zamanı: 14 Kas 2003 16:29 

Kayıt: 26 Ağu 2003 15:56
Mesajlar: 13
Konum:
Intellicadin view inde zoomun degistigini, yada ekrandaki bir objenin secildigini belirtmek icin gonderilen notification mesajlari nelerdir, bunlardan benim C++ da yazdigim applicationi haberdar edebilirmiyim.


Başa Dön
 Profil  
 
 Mesaj Başlığı:
MesajGönderilme zamanı: 22 Kas 2003 15:53 

Kayıt: 18 Kas 2003 22:53
Mesajlar: 18
Konum: Turkey
merhabalar. İntelliCAD'de exe içindeki olaylardan haberdar olmak CALLBACK olarak tabir ediliyor.

Bununla ilgili bir örnek aşağıda mevcuttur.

<pre id=code><font face=courier size=2 id=code>
//IntelliCAD callback fonksiyonlarına örnek kod.

//Komut tanımları
static struct func_def func_table[] = {

// command:(dynssget)
{"dynssget" , dynssget},
// command:dynssget
{"c:dynssget" , dynssget},
};

sds_name g_ssname; //Seçim seti (Global)


//Mouse' un altında kalan nesneleri highlight yapar.
static int dynssget(struct sds_resbuf *rb)
{
int ret;
struct sds_resbuf resb;
sds_ssfree(g_ssname);//

sds_printf("Mouse'u hareket ettirerek nesneleri seç\n");
ret=sds_ssadd(NULL,g_ssname,NULL);

//Callback'i başlat
//Fonksiyonun bu kısmından itibaren
sds_setcallbackfunc(cbfunc);

char string1[512];


ret=sds_getstring(0,"\nHit [Enter] when done: ",string1);
if(ret==RTNORM){
sds_getvar("CMDNAMES", &resb);
if(strcmp(resb.resval.rstring,"C:DYNSSGET")==0)
{//Şayet komut olarak girilmişse
//(command:move,"selctionset" (dynssget))
resb.restype=SDS_RTPICKS;
sds_name_set(g_ssname, resb.resval.rlname);
sds_putsym ("SELECTION", &resb);
sds_retvoid();
}
else
//Şayet fonksiyon olarak çağrılmışsa (Setq g_ssname (DYNSSGET))
sds_retname(g_ssname, SDS_RTPICKS);

}
else
sds_retnil();//seçim seti yok

//Callback nesnesini boşaltır.
sds_setcallbackfunc(cbfunc2);
return RTNORM;
}

int cbfunc(int flag,void *arg1,void *arg2,void *arg3)
{
sds_point pt;
sds_name ssname,ename;

switch (flag) {
//mouse move' da iken mouse koordinatlarını UCS ye göre verir.
case SDS_CBMOUSEMOVEUCS:
pt[0]=*(double *)arg1;pt[1]=*(double *)arg2;pt[2]=* (double *)arg3;
if(sds_ssget (NULL, pt, NULL, NULL, ssname)==RTNORM){
sds_ssname (ssname, 0, ename);
//seçilen nesneyi seçim setine ekle
sds_ssadd(ename,g_ssname,g_ssname);
//nesneyi kesikli çiz
sds_redraw (ename, 3);
sds_ssfree(ssname);
}
break;
default:
break;
}

return RTNORM;
}

//Boş fonksiyon
int cbfunc2(int flag,void *arg1,void *arg2,void *arg3)
{
return RTNORM;
}

</font id=code></pre id=code>


Başa Dön
 Profil  
 
 Mesaj Başlığı:
MesajGönderilme zamanı: 19 Ara 2003 17:08 

Kayıt: 26 Ağu 2003 15:56
Mesajlar: 13
Konum:
CallBack fonksiyonunun icinde modal dialog box yaratilamamasinin sebebi nedir?


Başa Dön
 Profil  
 
 Mesaj Başlığı:
MesajGönderilme zamanı: 26 Ara 2003 19:34 
Site Admin

Kayıt: 07 Oca 2002 13:14
Mesajlar: 1085
Konum: Turkey
Problemi, tahmin yürütmemize olanak vermeyecek şekilde detaylandırarak açıklar mısınız?


Başa Dön
 Profil  
 
 Mesaj Başlığı:
MesajGönderilme zamanı: 29 Ara 2003 13:44 

Kayıt: 26 Ağu 2003 15:56
Mesajlar: 13
Konum:
Ben size codun ilgili kısmını gonderiyim sanirim aciklayici olur..

<pre id=code><font face=courier size=2 id=code>
int cbfunc(int flag,void *arg1,void *arg2,void *arg3)
{
int res = RTNORM,j,i;

.....
...
.. //Burada bir takim islemler yapiliyor
.


case SDS_CBLBUTTONDBLCLKUCS:

double *x,*y,*z;
char GrdName[85];

sds_point DblClick,SnapPt;
sds_name nSelectLine;

x=(double*) arg1;
y=(double*) arg2;
z=(double*) arg3;

if(x==NULL || y==NULL || z==NULL) break;

Point(DblClick,*x,*y,*z);
sds_osnap(DblClick,"nea",SnapPt);

........
.......
...... //Burada da bir takim islemler yapiliyor
....
...

if(CheckDlg1)
{
<b>
<font color=red>/*Dikkat edilmesi gereken kısım burasi (alt taraf) ilk if
statement ta dinamik olarak olusturulan dialog objesi ekrana
ShowWindow()komutuyla bastirildiginda bir sorun yaratmiyor



Ancak; if in hemen ardindan gelen else de gene baska bir dialog
objesi yaratildiginda ve de modal dialog box seklinde ekranda
gorunmesi istendiginde (DoModal()komutu kullanilarak) compile ve
build asamalarinda dogal olarak herhangi bir hata verilmemesine
karsin , Acilan Dialog kutusu intellicadin kitlenmesine sebep
oluyor.*/
</font id=red>
</b>

if(GetXData(nEntLine,"XT_AN",tmp)==RTNORM)
{
CXTGridSingleDlg *dlg=new CXTGridSingleDlg;
sds_name_set(nEntLine,dlg->nLine);

dlg->Create(IDD_GRID_SINGLE); //Hersey yolunda
dlg->ShowWindow(SW_SHOW); //bir sorun
//cikmaz

}
else
{
CMainDlg dlgM;
dlgM.DoModal(); //Intellicad bir sure sonra
//kitlenir


}
res=RTERROR;
break;


default:

break;


arg2=0;
arg3=0;
return res;


}

</font id=code></pre id=code>

Muhtemelen acilan modal dialog box'ın callback fonksiyonunu
dlgM.DoModal(); satirinda bekletmek istemesi sorun yaratiyor,lakin callback fonksiyonlarini pek iyi bilmedigim icin sorunun tam olarak neden kaynaklandigini anlayamiyorum..

Beni bu konuda bilgilendirirseniz sevinirim..








efeguney tarafından 30/12/2003 10:32:29 tarihinde değiştirildi


Başa Dön
 Profil  
 
 Mesaj Başlığı:
MesajGönderilme zamanı: 29 Ara 2003 19:03 

Kayıt: 18 Kas 2003 22:53
Mesajlar: 18
Konum: Turkey
Merhabalar,
istemeden de olsa ilgimi çekti sayın efeguney tam olarak ne yapmak istiyorsunuz benim anladğım kadarıyla siz entity properties dialog kutusu gibi mi çalıştırmak isitiyorsunuz.Şayet böyle yapıyorsanız.
Bilindiği gibi mouse doubleclick windows ayrıca inteliicad in nesnelerin özelliklerinin geldiği bir dialog kutusudur.Siz bu dialog kutusundan önce mi sonramı getirmeye çalışmanızda pek önemli değildir. neticede o dialog kutusuna kontrolleriyle ilavelerde bulunmanız gerekir ki bu konuda adeko daki arkadaşlarımıza danışalım.
Şayet bir de siz sds_getmainwnd() yi sizin dialog kutusuna da parent olarak gömmeniz gerekecek bir başka yol olarak SDS_ARXLOAD'ın bulunduğu case durumuna

AfxGetApp()->m_pActiveWnd = CWnd::FromHandle ( sds_getmainhwnd () );
kodunu ilave etmeniz gerekecek.


Sizin windows olaylarının dışında toollbar yada commandı kullanarak
edit dialogunuzu getirmeniz gerekiyor tabiiki bana göre...

hürmetlerrr......
marketçi


Başa Dön
 Profil  
 
 Mesaj Başlığı:
MesajGönderilme zamanı: 30 Ara 2003 12:28 

Kayıt: 26 Ağu 2003 15:56
Mesajlar: 13
Konum:
Yapmaya calistigim sey aynen dediginiz gibi entity dialog boxa benzeyen bir dialog kutusu acmak. Bunu ilk if statementta basariyla gerceklestiriyorum . Callback fonksiyonu doubleclick mesajini aldiginda RTERROR e return ederse Intellicadin default islemleri uygulanmaz diye biliyorum; Ben de bu ozelligi kullanarak kendi applicationimin cizdirdigi bazi özel objeler icin özel dialog boxlar actiriyorum. sonunda da RTERROR e dondugu icin entity dialog box acilmiyor onun yerine sadece benim istedigim dialog kutusu aciliyor.

Dediginiz seyi zaten yapmis durumdayim yoksa acilan dialog boxlar intellicaddan bagimsiz haraket ediyor (main deki case RQXLOAD daki islemden bahsediyorum).

Herhangi bir callback fonksiyonunun icinde dlg.DoModal(); komutuyla dialog kutusu göstermeye calisin ne demek istedigimi anliyacaksinizdir. Fonksiyonun SDS_CBLBUTTONDBLCLKUCS case 'i icin yazilmis olmasi onemli diil benim denedigim diger case ler de de (SDS_CBVIEWCHANGE gibi) Modal Dialog Box intellicadin bozulmasina sebep oluyor.


Başa Dön
 Profil  
 
 Mesaj Başlığı:
MesajGönderilme zamanı: 30 Ara 2003 13:22 
Site Admin

Kayıt: 07 Oca 2002 13:14
Mesajlar: 1085
Konum: Turkey
magnamana, main() içindeki RQXLOAD case'inin hemen başına
<pre id=code><font face=courier size=2 id=code>AfxGetApp()->m_pActiveWnd = CWnd::FromHandle(sds_getmainhwnd());</font id=code></pre id=code>
satırını ekleyin demek istiyor.

Bu işlem, her bir diyalog için aşağıdaki işlemi yapmaktan bizi kurtarır:
<pre id=code><font face=courier size=2 id=code>CDlg dlg(CWnd::FromHandle(sds_getmainhwnd()));</font id=code></pre id=code>

Bu sayede diyaloğun anasının intellicad'in ana penceresi olduğunu söylüyoruz. DLL'in anasının EXE olması pencerelerinin aynı hiyerarşiye sahip olacağı anlamına gelmez.

Yalnız, bu işlemler de callback fonksiyonu içinde bir modal diyalog çağırıldığında IntelliCAD'in garip davranmasını engellemiyor. Bu durumda modeless diyalog yaratmaktan başka bir seçenek görünmüyor.

Farklı bir alternatif daha var: Odaklı (Context) menü.
Bu menü çizimde bir veya daha fazla nesne seçili iken sağ fare tuşu tıklandığında gelen menüdür.

XDatalı nesneleri ayıklamayı fonksiyona girdikten sonraya bırakmayı kabul edersek şayet, yapmak istediğiniz iş için oldukça kullanışlıdır.

Yöntem şu:
<ul>
<li>
Araçlar Menüsü > Özelleştir > Menüler > Menü Yapısı > D&eğiştir > Ekle > Menü Maddesi'ni seçerek Değiştir menüsüne yeni bir madde ekleyin.
</li>
<li>
Yeni eklenmiş maddeyi tıklayın ve <b>Seçenekler...</b> düğmesine tıklayın
</li>
<li>
Hangi nesne(ler) seçili iken bu maddenin gelmesini istiyorsanız <b>Seçili Nesneler</b> çerçevesi içinden seçin. Anlamlıysa <b>Tüm nesneler</b> kutusunu da tıklayabilirsiniz.
</li>
<li>
<b>Sadece Odaklı menüde göster</b> kutusunu işaretleyin
</li>
<li>
Tamam'a basarak önceki sayfaya dönün ve <b>Komut:</b> alanında çağırmak istediğiniz komutu yazın.
</li>
</ul>

Bu işlemlerden sonra, fare sağ tıklandığında -belirtilen nesneler seçiliyse- çıkan menüye istediğimiz komut da eklenmiş olur.


Doğrusunu isterseniz, yapmak istediğiniz işleve biz de kendi uygulamalarımızda ihtiyaç duyuyoruz. Bununla ilgili -söz vermeyelim ama- sanırım 2-3 ay içinde tam olması gerektiği gibi bir çözüm üretebiliriz.




Destek/Support tarafından 30/12/2003 11:44:41 tarihinde değiştirildi


Başa Dön
 Profil  
 
 Mesaj Başlığı:
MesajGönderilme zamanı: 01 Oca 2004 21:37 

Kayıt: 26 Ağu 2003 15:56
Mesajlar: 13
Konum:
<pre id=code><font face=courier size=2 id=code>
CWnd* <b>WndMain</b> = CWnd::FromHandle(sds_getmainhwnd());
</font id=code></pre id=code>

Yukardaki <b>WndMain</b> tam olarak neye karsilik geliyor. Ben bunun intellicadin Main Frame ine pointer oldugunu zannediyordum ancak sanirim oyle degil. Gene yukardaki sds fonsiyonuna benziyen <b>sds_getviewhwnd(); </b> kime return ediyor.

Benim amacim Intellicad Command Bar gibi dockable (alta üste saga sola yerlesebilen) bir window yaratabilmek ve bunun icinde Intellicadin Main Framine ihtiyacim var ; yoksa yok mu?

Bu konularda beni bilgilendirirseniz sevinirim.



efeguney tarafından 01/01/2004 19:38:11 tarihinde değiştirildi


Başa Dön
 Profil  
 
Eskiden itibaren mesajları göster:  Sırala  
Yeni bir başlık gönderCevap gönder 1. sayfa (Toplam 1 sayfa)   [ 9 mesaj ]


Kimler çevrimiçi

Bu forumu gezen kullanıcılar: Hiç bir kayıtlı kullanıcı yok ve 9 misafir


Bu foruma yeni başlıklar gönderemezsiniz
Bu forumdaki başlıklara cevap veremezsiniz
Bu forumdaki mesajlarınızı düzenleyemezsiniz
Bu forumdaki mesajlarınızı silemezsiniz
Bu foruma eklentiler gönderemezsiniz

Aranacak:
Geçiş yap:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
610nm Style by Daniel St. Jules of Gamexe.net


Türkçe çeviri: phpBB Türkiye