Kayan menü

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Kayan menü

Mesaj gönderen abdulkadir »

selam arkadaslar

Bir kayan panel yapmaya calısıyorum
biraz yardıma ihtiyacım var

Button1 e tıklayınca panel asagı dogru kayarak acılacak
belirtilen height ölcüsünde duracak

bu işlemi yaptım ama
panel önce bir defa acılıp kapanıyor
2. acılısında duruyor

Acaba neyi yanlıs yapıyorum kodları asagıya yazıyorum
Mümkünse bir bakıverin

Kod: Tümünü seç

  procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.enabled:=false;
end; 

Kod: Tümünü seç

 
procedure TForm1.Timer1Timer(Sender: TObject);
const
sy=5;
var
y,max_h:integer;
begin
Timer1.Interval:=10;
max_h:=400;//panel max boy
y:=Panel2.Height;
if  (max_h<=panel2.ClientRect.Bottom)then
y:= +sy ;
y:=y+sy;
panel2.Height:=y;
if(y=max_h)then
Timer1.Enabled:=False;
end; 

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.enabled:=true;
end; 
Tesekkür ederim.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

cunku:

Kod: Tümünü seç

if  (max_h<=panel2.ClientRect.Bottom)then 
y:= +sy ; 
satiri geregi panel yüksekligi ilk defasinda 5'in katı degilse mesela 41 ise 5'er 5'er artargen 396 dan sonra 401 olacak ve bu satir calisarak panle boyunu bu sefer 5 yapacak. Ondans onra artmaya tekrar devam edecek ve bu sefer %2in katlarinda artacagi icin de ilk turu atarken icine giremedigi if 'e takilacak ve timer duracak.

Kod: Tümünü seç

if(y=max_h)then 
Timer1.Enabled:=False

Kod: Tümünü seç

if  (max_h<=panel2.ClientRect.Bottom)then 
y:= +sy ; 
bu kontrolu tamamen cikartip ikinci kontrolu de

Kod: Tümünü seç

if(y>=max_h)then 
Timer1.Enabled:=False
seklinde donusturursen sorun kalmaz. Ayrica ufak bir tavsiye kod yazarken indentation kullanmanı yani kodları hep aynı hizada degil de bloklari iceri girintili sekilde kullanırsan kodu hem senin hem de bizim okumamız cok daha kolay olur. Senin kodu bu sekle getirirsek :

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
const
  sy=5;
var
  y,max_h:integer;
begin
  Timer1.Interval:=10;
  max_h:=400;//panel max boy
  y:=Panel2.Height;
  y:=y+sy;
  panel2.Height:=y;
  if(y>=max_h)then
    Timer1.Enabled:=False;
end;
Kolay gelsin....
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

Fahrettin abi tesekkür ederim
Mantıklı bir hata!

Formu create ederken

Kod: Tümünü seç

  procedure TForm1.FormCreate(Sender: TObject); 
begin 
   Panel2.Height:=0;
  Timer1.enabled:=false; 
end;  
kontrolde -1 olunca olay düzeldi.

Kod: Tümünü seç

if(y>max_h-1)then
Timer1.Enabled:=False;
Sizin yazdıgınız kod daha kısa ve öz

Ayrıca cok egitici ve öğretici acıklamalarınız var HARİKASINIZ :P
Tavsiyelerinize uymaya gayret edecegim

Yardımınız için tesekkür ederim

sevgiler hayırlı işler

Mutluluk yakanı bırakmasın Emi...... :P
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

estağfirullah....
dua için de sağol. cümlemizin inşallah... :)
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

Selam Arkadaslar

Yukarıda uyguladıgımız panel Gayet güzel calısıyor

Yanlız panellerin sayısı 3 4 diye arttıkca cok fazla
kod yazmak gerekecek

bunun yerine bu işlemi 1 veya 2 procedure ile yapmak istedim
Olacak gibi birsey ama olmadı

Asagıdaki kod da panel durmadan büyüyor
Tim.Free deyince tek hamle yapıp duruyor



Nedir Eksik,Fazla,Yanlıs Olan.

Herkese sevgiler

Kod: Tümünü seç

procedure TForm1.Timer_akl(panelAdi:TPanel;OlayAdi:TNotifyEvent;AMax:integer);
const
     Syi=10;
var
     Y,Max_h:integer;
     Tim:TTimer;
Begin
     Y:=panelAdi.Height;
     Max_h:=AMax;
     Tim:=TTimer.Create(self);
     Tim.Enabled:=TRUE;
     Tim.Interval:=10;
     Tim.OnTimer:=OlayAdi;//paneldeki ok resmin in Click olayı

    Y:=Y+Syi;
    panelAdi.Height:=Y;

if(Y>Max_h)then
    Tim.Enabled:=False;
    //Tim.Free;
end;





procedure TForm1.Image1Click(Sender: TObject);
begin
    Timer_akl(Panel2,Image1Click,400);
end;




procedure TForm1.Image2Click(Sender: TObject);
begin
    Timer_akl(Panel3,Image2Click,600);
end;
Saglıcakla Kalın insaallah............
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

Ya bu siteye baglanınca bile problemler cözülüyor

birkac dakika yazdıgım problemi bu sekilde cözdüm

AMA

acaba dogrusunumu yapıyorum

Kod: Tümünü seç

//procedure TForm1.Timer_akl if satırı

if(Y>=Max_h)then
begin
Tim.Enabled:=False;
Tim.Free;
   end
   else
panelAdi.Height:=Y;
end;
Cevapla