DELPHI Sorular

Başlatan bunalmis, 05 Ağustos 2004, 10:50:29

z

Programın geliştirildiği makinenin ekran çözünürlüğü  1024*768 olsun.
Dolayısı ile formlar da bu boyutta olacaktır.

Bu programın 640*480 makinada çalıştırılması halinde formun ekran dışına
taşmaması için yazılımda ne yapmalıyız?

Bu soruna dikkat etmeden program yazıldığında 640*480 makinada form ekrana sığmıyor ve program kullanılamıyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

aykuto

Benim aklıma gelen ilk çözüm:

Önce formun OnCreate event'inde ekran çözünürlüğünü kontrol edip formun genişlik ve yüksekliğini buna göre ayarlayabilirsiniz. Formdaki AutoScroll özelliği de true seçilirse, formun kenarlarında kaydırma çubukları çıkacaktır. Böylece ekranda görülmeyen kısımlara formu kaydırarak erişmek mümkün olur.

z

Kaydırma çubuklu çözüm hoşuma gitmiyor, programı kullanmak çok zorlaşıyor ve programın (ekran tasarımının) estetiği tamamen kayboluyor.

Eğer tasarım aşamasındaki ekran çözünürlüğü ile programın çalıştığı makinanın çözünürlüğü arasındaki oranı hesaplar, program çalıştırıldığında bütün objeleri bu oranda büyültür/küçültür sem sorun çözülecek, ancak yanlış hatırlamıyorsam bunlara hiç gerek kalmadan propertieslerdeki bir parametreyle bu problem otomatik olarak yok oluyordu.

Sürekli kullanmayınca unutuluyor işe.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ground

Delphi yi tam bilmesemde ekrandaki resimleri küçültmek istiyorsanız resim vektörel olmalı örn: *.emf dosyaları sanırım office clipart resimlerinde olacak

not: bitmap resimler de küçülür yada büyür fakat kalite bozulur..
⌒╮'╭⌒╮⌒╮.
╱◥██◣                  
| 田︱田田|              
╬╬╬╬╬╬╬╬╬

Picproje - Sözde değil özde paylaşım..

z

Hocam problem  diğer visual dillerde de vardır. (Çözümünü bilmediğim için büyük sorun oldu)

Farzet ki makinen 1024*768 çözünürlükte ve programında  formun üzerine butonlar, paneller, vs vs yerleştirdin.

Şimdi bu programı 640*480 de çalıştırmaya kalkınca tasarım aşamasında  640x480  pixel dışında kalan objeler ekranda görülmüyor.

Halbuki çözümü var ve programı çalıştırdığın anda çözünürlükten bağımsız olarak bütün objeler yerli yerine oturuyordu. Nasıl yapılıyor?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ftsahin

Form'un onCreate veya onShow event'ına

form1.width := screen.width;
form1.height := screen.height;
form1.scaleby(screen.width,screen.height);

yazın.Bu kod sanırım işinizi görür.Tabi ekrandaki nesneler çok fazla ve büyük değilse.
Kolay gelsin.

z

Yok hocam bu da çözüm olmadı.  Form üzerindeki nesnelerin bazıları programın calıstıgı ekran cozunurlugune ya hiç görünmüyor yada ekranda işe yaramayan boş alanlar kalıyor.

Bu durumda hesap yapıp ne var ne yok bütün objelerin koordinat ve boyut bilgilerini hesaplatıp form create edilirken form üzerine objeleri programa yerleştirteceğim. Bu durumda bu kısıma bayağı bir kod yazmam gereecek.

Halbuki kolay yolu vardı galiba. Neyse dediğim gibi yapacağım,  eğer başka yol biliyorsanız buraya yazarsanız sevinirim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

DumrulBey

Alıntı yapılan: "bunalmis"...
Halbuki kolay yolu vardı galiba. Neyse dediğim gibi yapacağım,  eğer başka yol biliyorsanız buraya yazarsanız sevinirim.
Hocam, referans olarak çoğumuzun kullandığı 1024x768 çözünürlüğü alırsak program başlangıcında bu çözünürlükte olup olmadığını sorgulatırsın:

- Eğer 800x600 çözünürlük kullanılıyorsa tüm nesnelerin koordinatlarının
1,28'e böleceksin.

- Eğer 640x480 çözünürlük kullanılıyorsa tüm nesnelerin koordinatlarının
1,6'ya böleceksin.

Çözünürlük daha büyükse aynı oranlarda çarparsın. Nesne boyutlarını mümkün olan ortalama bir değerde tutmakta fayda var. Ama yine aynı oranları kullanarak boyutlarda da oynama yapabilirsin.

Başarılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

z

Bir string degisik degerler almakta, ben string iceriginin numerik
olup olmadigini anlamak istiyorum.

Istedigim bilgiyi veren hazirda bir komut varmi?

Ornegin  

S:='12A6'       numerik değil desin
S:='1256903'    numerik desin
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ftsahin

i := strtoint(s); fonksiyonu bu sorunu halledebilir.
i=0 ===> s= nümerik değil
i>0 ===> s= nümerik.

z

i:=strtoint('12EK');

Gibi bir değer hataya neden olacaktır.

Gerçi hata durumunda programın kırılmasını engellerim ama
çok hızlı çalışması gereken bir şey arıyorum. Bu tür kontrollar pogramı çok yavaşlatacak.

Delphide image (pictre box) içindeki resimi sık sık  değiştirmeye kalktığımda ekranda çizgiler oluşmakta. Bunu nasıl engelleriz.

Dos zamanında sadece yatay yada dikey geri dönüşleri bekleyip  ekran Ram'ına erişerek bu tür rahatsız edici durumlardan kurtulurduk.

Bir başka sorum da farklı tipteki değişkenleri biribirine atamak istiyorum.

Örneğin

A:string;
B:char;

A:='X'; // string değişkenin tek karakter almasını garantiliyorum.
B:=A;

Yada

A:Pchar;
B:char;

tanimli olsun,

B:=A;

işlemini nasıl yaparım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

birumher

Alıntı yapılan: "bunalmis"Bir string degisik degerler almakta, ben string iceriginin numerik
olup olmadigini anlamak istiyorum.

Istedigim bilgiyi veren hazirda bir komut varmi?

Ornegin  

S:='12A6'       numerik değil desin
S:='1256903'    numerik desin

Ben hep şöyle yaparım... Oldukça da hızlıdır seni yanıltmasın. Yalnızca virgülleri veya noktaarı kontrol etmiyor onu da ekleyebilirsin istersen.

function IsNumeric(aStr: String): Boolean;
var
 I: Integer;
begin
 Result := True;
 for I := 1 to Length(aStr) do
 begin
   if (Byte(aStr[I]) < 48 ) OR (Byte(aStr[I]) > 57) then
   begin
      Result := False;
      Break;
   end;
 end;
end;
Birkan.Herguner

birumher

Alıntı yapılan: "bunalmis"
A:Pchar;
B:char;

tanimli olsun,

B:=A;

işlemini nasıl yaparım.

B := A^;
demelisin...
Birkan.Herguner

Salih

Değişik bir yöntem. Türkçe karakter destekli.

function isnumeric(s:string):boolean;
var x:byte;
begin
isnumeric:=true;
for x:= 1 to length(s) do
if  ( s
  • in ['A'..'Z','a'..'z','Ç','ç','Ş','ş','Ö',
    'ö','Ğ','ğ','Ü','ü','İ','ı'] )  then
      begin
       isnumeric := false;
       break;
       end;
      end;

birumher

Alıntı yapılan: "salih"Değişik bir yöntem. Türkçe karakter destekli.

function isnumeric(s:string):boolean;
var x:byte;
begin
isnumeric:=true;
for x:= 1 to length(s) do
if  ( s
  • in ['A'..'Z','a'..'z','Ç','ç','Ş','ş','Ö',
    'ö','Ğ','ğ','Ü','ü','İ','ı'] )  then
      begin
       isnumeric := false;
       break;
       end;
      end;
Bu fonction un bir sorunu var harfler dışındaki diğer ASCII kodlarını (/-=? gibi) da numeric olarak algılar kodu şöyle değiştirirsek daha mantıklı olur gibi geliyor...


function isnumeric(s:string):boolean;
var x:byte;
begin
isnumeric:=true;
for x:= 1 to length(s) do
if  not ( s
  • in ['0'..'9'] )  then
      begin
       isnumeric := False;
       break;
      end;
    end;
Birkan.Herguner