Eğer çalışma zamanında değişken genişlikte bir alan istiyorsanız bu, tüm özellikleri ile kullanmanız gereken bir özelliktir. Bu, kullanıcının, asıl alan boyundan daha büyük değerler girmesini ve alanın büyümesini sağlar. Alan, yerleştirilme konumuna göre yeni girilen veriler ile bütünleşik olabilmek için yatay veya dikey kaydırılabilir olacaktır.
Bir alanın dinamik olarak büyümesini sağlamak için O_STATIC seçeneği etkisiz olmalıdır. Bu da,
field_opts_off(field_pointer, O_STATIC);
ile yapılabilir. Fakat bir alanın sonsuz boyda uzamasına izin vermek pek de tavsiye edilmez. Alanın genişleyebileceği en fazla büyüklüğü tanımlayabilirsiniz.
int set_max_field |
(FIELD *alan, |
/* değiştirilecek alan */ |
char azm_buy); |
/* alan için olası azami büyüme miktarı */ |
|
işlev
Dinamik olarak büyüyebilen bir alandan bilgiler şu şekilde alınabilir:
int dynamic_field_info |
(FIELD *alan, |
/* değiştirilecek alan */ |
int *sat_say, |
/* sığdırılacak satır sayısı */ |
int *sut_say, |
/* sığdırılacak sütun sayısı */ |
int *azm_buy); |
/* sığdırılacak azami büyüme miktarı */ |
|
işlev
field_inf bildik şekilde çalışmasına rağmen, çalışma zamanında genişleyen alanların özellikleri ile ilgili bilgileri bu işlevi kullanarak almanız tavsiye edilir.
new_field kütüphane yordamını hatırlayın; bir birim yüksekliğinde ve tek satırlık bir alan oluşturuluyordu. Bir birimden fazla yüksekliğe sahip alanlar çok satırlı alanlar olarak tanımlanacaklardır.
O_STATIC özelliği etkisizleştirilmiş tek satırlık bir alan tek bir sabit satır içerecektir, fakat sütun sayısı kullanıcının ilk alanın taşıyabileceğinden fazlasını girmesi durumunda artabilir. Görüntülenen alan sayısı sabit kalacak ve ilave veriler kaydırılabilir olacaktır.
Çok satırlı ve O_STATIC özelliği etksizleştrilmiş bir alan ise (çalışma zamanında genişleyebilen) sabit sayıda sütun içerecek, fakat satır sayısı alanın ilk tutabileceği değerden daha fazlası girilmesi durumunda artacaktır. Görüntülenen satır sayısı sabit olacak ve ilave veriler kaydırılabilir olacaktır.
Yukarıdaki iki paragraf çalışma zamanında genişleyen alanların davranış özellikleriyle ilgili oldukça açıklayıcıdır. Diğer form alanlarının davranış özellikleri aşağıda açıklanmıştır:
O_AUTOSKIP seçeneği eğer O_STATIC etkisiz ve alan için tanımlanmış azami büyüyebilme miktarı tanımlı değilse gözardı edilecektir. Şu anda, kullanıcı alanın en sonuna gelip bir karakter yazdığında O_AUTOSKIP otomatik şekilde REQ_NEXT_FIELD form sürücüsü isteğini üretmektedir. En fazla büyüyebilme miktarı tanımlanmamış genişleyebilir bir alanda son karakter için bir konum yoktur. Eğer en fazla genişleme oranı tanımlanmışsa, O_AUTOSKIP seçeneği eğer alan en büyük değerine kadar genişlediyse normal çekilde çalışacaktır.
O_STATIC özelliği eğer etkisizse alan içerisinde hizalama gözardı edilecektir. Şu anda, set_field_just tek satıra JUSTIFY_LEFT, JUSTIFY_RIGHT, JUSTIFY_CENTER özellikleri kazandırmak için kullanılabilir. Genişleyebilir tek satırlık alan yatay olarak genişleyip kaydırılabilir ve hizalanabilen çok daha fazla veri içerebilir. field_just'ten geri dönen değer değişmemiş olacaktır.
Aşırı yüklenmiş form sürücü isteği REQ_NEW_LINE, O_NL_OVERLOAD form seçeneğinde O_STATIC değerinin etkisiz olmasına ve alan için en fazla genişleme miktarı tanımlanmamasına bakmaksızın aynı şekilde çalışır. Şu anda eğer O_NL_OVERLOAD etkinse, REQ_NEW_LINE eğer alanın son satırında çağrılırsa gizli olarak REQ_NEXT_FIELD üretir. Eğer bir alan sınırlara bağlı kalmadan genişleyebiliyorsa, son bir satır yoktur, REQ_NEW_LINE hiç bir zaman gizli olarak REQ_NEXT_FIELD üretmez. Eğer en fazla büyüme miktarı belirtilmişse ve O_NL_OVERLOAD form özelliği etkinse, eğer alan büyüyebileceği en büyük büyüklüğe gelmiş ve son satırda ise REQ_NEW_LINE sadece gizli olarak REQ_NEXT_FIELD üretecektir.
dup_field çağrısı bilindiği gibi çalışır; alanı o anki önbellek boyunu ve alanın içeriği ile ikileştirecektir. Belirtilmiş en fazla büyüme miktarı da ikileştirilecektir.
link_field bilindiği gibi çalışacaktır; O an bağlanan alan ile birlikte tüm alan özelliklerini ve paylaşılan önbelleği ikileştirecektir. Eğer O_STATIC alan seçeneği alanı paylaşımlı önbellek tarafından ardışıl olarak değiştirilirse, önbelleğin sahip olduğu veri miktarından fazlasının alana girilmesi durumunda nasıl davranış göstereceği o anki alanın özellik ayarına bağlıdır.
field_info bilindiği gibi çalışacaktır; sat_say değişkeni new_field'a yapılan asıl çağrının değerini tutacaktır. Kullanıcı o anki önbellek boyutunu sorgulamak için dynamic_field_info'yu kullanmalıdır.
Yukarıdakilerin bazıları sadece form sürücüsünden sonra açıklanınca anlam kazanmaktadır. Sonraki bir kaç kısımda buna bakıyor olacağız.