tip tanımlamada kolay bir yöntem var mı?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
cfyasar
Üye
Mesajlar: 169
Kayıt: 31 Oca 2005 05:18
Konum: izmir

tip tanımlamada kolay bir yöntem var mı?

Mesaj gönderen cfyasar »

şöyle bir kod parçasını programımda çokça kullanıyorum.

Kod: Tümünü seç

function TForm1.DataNumLongSAdr(format:word;high:variant;low:variant;EngHigh:variant;englow:Variant;net:byte;adres:word):word;
type
    GUI_dtnumericptr=^GUIdtnumeric;
    GUIdtnumeric= packed record
       dataformat:word;
       datamax:integer;
       datamin:integer;
       gain:integer;
       offset:integer;
       netadr:byte;
       data:word;
    end;
var
    DtNumericptr:GUI_dtnumericptr;
    index:word;
begin
  Getmem(DTNumericptr,Sizeof(GUIdtNumeric));
    DataTable[DTCount]:=DataOffset;
    DTNumericptr^.dataformat:=format;
    DTNumericptr^.datamax:=high;
    DTNumericptr^.datamin:=low;
    DTNumericptr^.gain:=EngHigh;
    DTNumericptr^.offset:=EngLow;
    DTNumericptr^.netadr:=net;
    DTNumericptr^.data:=adres;
    for index:=0 to Sizeof(GUIdtNumeric)-1 do
      Byte(pointer(longword(Dataadr)+DataOffset+Index)^):=Byte(Pointer(Integer(DTNumericptr)+ Index)^);
    DataOffset:=DataOffset+Sizeof(GUIdtNumeric);

   Freemem(DTNumericptr);
   Result:=DataTableCount;
   inc(DataTableCount);
end;
bu fonksiyone göndereceğim değere göre tip tanımındaki dataformat, datamax, datamin.... değerleri interger, word, longword.... olabiliyor. ve ben her göndereceğim farklı tipteki değer için bu fonksiyonu tekrar ekleyip sadece datamax, datamin gibi değişkenlerin tipini word yapıyorum.
göndereceğim değerin tipine göre tip tanımındaki değişken tiplerini değiştirebileek kolay bir yöntem arıyorum.
öğrenmek, zorlukları yenmektir.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Type'da Case kullanarak bunu yapabilirsin. Delphi Help'inden yardım alabilirsin. bkz. "Variant parts in records"

Örnek:

Kod: Tümünü seç

type
  TPerson = record
  FirstName, LastName: string[40];
  BirthDate: TDate;
  case Citizen: Boolean of
    True: (Birthplace: string[40]);
    False: (Country: string[20];
            EntryPort: string[20];
            EntryDate, ExitDate: TDate);
Cevapla