Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
if else çokluğu
#1
Merhaba;


Lisviewde birden fazla ItemClickEx yöntemini kullanarak Lisviewdeki imagelerde değişiklik yapıyorum. if else seçeneği uzayıp gidecek.  


Örnek:
sec image tıklandığında sec imagede 0 nolu image varsa yerine 1 nolu image gelecek

arsiv image tıklandığında arsiv imagede 2 nolu image varsa yerine 3 nolu image gelecek gibi uzayıp gidiyor. Bu işlemin uzamaması için nasıl kısalta bilirim?


function TForm1.ClickRow(ImageName: String; ItemIndex, ImageNo: Integer): Integer;
begin
  if ImageNo = 0 then
  begin
    ImageNo := 1;
  end
  else
  begin
    ImageNo := 0;
  end;

  if ImageNo = 2 then
  begin
    ImageNo := 3;
  end
  else
  begin
    ImageNo := 2;
  end;
  Listt.Items[ItemIndex].Data[ImageName] := ImageNo;
end;


procedure TForm1.ListtItemClickEx(const Sender: TObject; ItemIndex: Integer; const LocalClickPos: TPointF; const ItemObject: TListItemDrawable);
var
  StrName: String;
begin
  if (ItemObject <> Nil) and (ItemIndex > -1) then
  begin
    StrName := ItemObject.Name;
    if StrName = 'Secli' then
    begin
      ClickRow(StrName, ItemIndex, Listt.Items[ItemIndex].Data[StrName].AsInteger);
    end;
   if StrName = 'Arsiv' then
    begin
      ClickRow(StrName, ItemIndex, Listt.Items[ItemIndex].Data[StrName].AsInteger);
    end;
  end;
end;

Cevapla
#2
yazmak istediğinizin kısa hali gibi birşey denedim. umarım işinize yarar

  Var
   i:integer;
  Begin
    for I := 0 to Listt.Items.Count-1 do

    if ImageNo = (i mod 2)=0 then
      imageNo:=i
     Else
      imageNo:=i+1;
    Listt.Items[ItemIndex].Data[ImageName] := ImageNo;
  End;
Cevapla
#3
Yazdığınız koda gore basitçe;

if Imageno=0 then Imageno=1; // 0 (sıfır) ise 1 yap değilse zaten 1 yada farklı bişeydir

if Imageno=2 then Imageno=3; // 2 ise 3 yap değilse ya 3 yada farklı bişidir

if Imageno=4 then Imageno=5; // 4 ise 5 yap değilse ya 5 yada farklı bişidir

şeklinde yazılabilir.
WWW
Cevapla
#4
Merhabalar,

Kaç adet resim olduğunu bilmiyorum.
Belki şöyle bir yol izlenebilir.

var toplam_img_sayisi : integer = 10 ;

function TForm1.ClickRow(ImageName: String; ItemIndex, ImageNo: Integer): Integer;
var
x:integer;
begin
 if ImageNo>toplam_img_sayisi then 
    x:=0          /* sayı maksimum düzeye ulaştığı için geri dönüş yapılıyor. */
 else 
   x:=ImageNo;

 Listt.Items[ItemIndex].Data[ImageName] := x;
end;


procedure TForm1.ListtItemClickEx(const Sender: TObject; ItemIndex: Integer; const LocalClickPos: TPointF; const ItemObject: TListItemDrawable);
var
 StrName: String;
begin
 if (ItemObject <> Nil) and (ItemIndex > -1) then
 begin
   StrName := ItemObject.Name;
   if StrName = 'Secli' then
   begin
     ClickRow(StrName, ItemIndex, Listt.Items[ItemIndex].Data[StrName].AsInteger+1);
   end;
  if StrName = 'Arsiv' then
   begin
     ClickRow(StrName, ItemIndex, Listt.Items[ItemIndex].Data[StrName].AsInteger+1);
   end;
 end;
end;

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#5
Teşekkür ederim cevaplar için.
Cevapla
#6
Koddan anladıgım 
imageno ya göre karar veriliyor 

Alternatif olarak Switch case yapısı da kullanılabilir 
switch(imageno)
{
case 0: 
imageno = 1 ;
break; 


case 2: 
imageno = 3 ;
break; 

default : 
imageno = 2;
}
Items[ItemIndex]->Data[ImageName] = ImageNo;


Cevapla
#7
(16-03-2019, Saat: 07:46)theSinan Adlı Kullanıcıdan Alıntı: Koddan anladıgım 
imageno ya göre karar veriliyor 

Alternatif olarak Switch case yapısı da kullanılabilir 
switch(imageno)
{
case 0: 
imageno = 1 ;
break; 


case 2: 
imageno = 3 ;
break; 

default : 
imageno = 2;
}
Items[ItemIndex]->Data[ImageName] = ImageNo;



Site ağırlıklı Delphi dili ile ilgili paylaşım yapılan bir ortam, soru bir Delphi sorusu; cevabın C/C++ ile ne ilgisi var !
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#8
(16-03-2019, Saat: 21:32)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı:
(16-03-2019, Saat: 07:46)theSinan Adlı Kullanıcıdan Alıntı: Koddan anladıgım 
imageno ya göre karar veriliyor 

Alternatif olarak Switch case yapısı da kullanılabilir 
switch(imageno)
{
case 0: 
imageno = 1 ;
break; 


case 2: 
imageno = 3 ;
break; 

default : 
imageno = 2;
}
Items[ItemIndex]->Data[ImageName] = ImageNo;



Site ağırlıklı Delphi dili ile ilgili paylaşım yapılan bir ortam, soru bir Delphi sorusu; cevabın C/C++ ile ne ilgisi var !

Hocam Ben Pascal bilmiyorum c++ ile çalışıyorum

Mantık aynı sadece syntax farklı belki faydalı olur diye fikrimi yazdım sizce sorun varsa bir daha yazmayayım
Cevapla
#9
@theSinan, iyi niyetli bir şekilde cevap verdiğinize eminim ama bu yaklaşım hatalı olur. Bir başkası da C# ile cevabı verir, diğeri Python'la vs. Bu iş böyle uzar gider. 
@Tuğrul HELVACInın belirttiği gibi; forumun Delphi kısmına yazıldığı ve aksi belirtilmediği için cevap da Delphi ile olmalı.

Yeri gelmişken @Yelize bir not:
Paylaştığınız kodlarda if-else çokluğundan önce mantığında hata var. Lütfen ClickRow'da ImageNo=0 olması durumunda ImageNo'nun son değeri kaç oluyor bir bakar mısınız? ImageNo=0 ise siz 1 olması istiyorsunuz ama fonksiyon öyle yapmıyor  Exclamation  
Ayrıca; ListtItemClickEx içerisinde StrName kontrolü yapmanız da bir işe yaramıyor çünkü siz her halükarda ClickRow'u aynı parametrelerle çalıştırıyorsunuz.
There's no place like 127.0.0.1
WWW
Cevapla
#10
Merhabalar,

Bu şekilde kodladım, herhangi bir sorunla karşılaşmadım.



function TForm1.ClickRow(ImageName: String; ItemIndex, ImageNo: Integer): Integer;
begin
  I := ImageNo;
  Case I of
    0:
      begin
        Listt.Items[ItemIndex].Data[ImageName] := 1;
      end;
    1:
      begin
        Listt.Items[ItemIndex].Data[ImageName] := 0;
      end;
    2:
      begin
        Listt.Items[ItemIndex].Data[ImageName] := 3;
      end;
    3:
      begin
        Listt.Items[ItemIndex].Data[ImageName] := 2;
      end;
    4:
      begin
        Listt.Items[ItemIndex].Data[ImageName] := 5;
      end;
    5:
      begin
        Listt.Items[ItemIndex].Data[ImageName] := 4;
      end;
    6:
      begin
        Listt.Items[ItemIndex].Data[ImageName] := 7;
      end;
    7:
      begin
        Listt.Items[ItemIndex].Data[ImageName] := 6;
      end;
    8:
      begin
        Listt.Items[ItemIndex].Data[ImageName] := 9;
      end;
    9:
      begin
        Listt.Items[ItemIndex].Data[ImageName] := 8;
      end;
  end;
end;
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi