Edit Box oluşturma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
tur42han
Üye
Mesajlar: 6
Kayıt: 17 Şub 2004 02:25
Konum: Konya

Edit Box oluşturma

Mesaj gönderen tur42han »

Ben editbox'ları program kodu yazarak oluşturmak istiyorum. Yapmak istediğim şu:
Button1'e bastığımda, herhangi bir editbox'ın (örn editbox1) içine yazdığım sayı kadar editbox oluşturulacak. Ayrıca oluşturulacak editbox'lara düzenli bir caption verilecek. Örn 1. oluşturulan editbox'a X1,
ikinciye Y1 , üçüncüye X2, Dördüncüye Y2 , beşinciye X3 ........
Bu veya buna benzer şekilde bir kod bilen varsa yardımcı olursa sevinirim.
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

Forma bir adet ComboBox ve bir button ekle
ComboBox in items Property sine 0 dan 10 kadar satır basına sayı ekle

ve
Buttonun click olayına yaz.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
x:array[0..10] of TEdit;
i:integer;
begin
 For i:=0 to ComboBox1.ItemIndex do //secili adet kadar
  begin
   x[i]:=TEdit.Create(Form1);
   x[i].Parent:=Form1;
   x[i].Left:=20;
   x[i].Top:=(i)*30;
   x[i].Width:=100;
   x[i].Height:=30;
   X[i].text:='Yeni Edit '+inttostr(i); //eklenen yazi (Yeni Edit1)
   X[i].Name:='Edit'+inttostr(i); //bilişene verilen ad (Edit1)
 end;
end;
basarılar
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam...

Sorunuzdaki gibi X1-Y1, X2-Y2, X3-Y3 şeklinde bir isimlendirme yapacaksanız ve de kullanıcının bunu program içerisinden her her an değişiklik yapmasına olanak sağlıyorsan, bu işlemleri programcı olarak senin kontrolünde olmasını sağlamalısın...

- Bunun için @abdulkadir'in kodunu (kendisinin de müsaadesiyle) şu şekilde güncellemelisin...

Kod: Tümünü seç

var
  x     : array[0..10] of TEdit;
  i     : Integer;
  sayac : Integer;
begin
  // İlk olarak mevcut -sonradan oluşturulmuş Tag'ı 99 kodlular- editleri bulup free edelim...
  i := 0;
  Repeat
    If Components[i] is TEdit
    then If TEdit(Components[i]).Tag = 99 then
         begin
           Components[i].Free;
           Dec(i); // Bileşen sayısı eksildi ya, bir geri adım...
         end;
    Inc(i);
  Until i > ComponentCount-1;

  Sayac := 1;
  For i:=0 to ComboBox1.ItemIndex do //secili adet kadar
  begin
    x[i]:=TEdit.Create(Form1);
    x[i].Parent:= Form1;
    x[i].Left  := 20;
    x[i].Top   := (i)*30;
    x[i].Width := 100;
    x[i].Height:= 30;
    x[i].Tag   := 99; // Kullanıcı oluşturmuştur işartetimiz !!!
    Case (i mod 2) of // tek mi çift mi sorusu
    0:begin
        X[i].text:='X'+inttostr(Sayac); //eklenen yazi (X1)
        X[i].Name:='X'+inttostr(Sayac); //bilişene verilen ad (X1)
      end;
    1:begin
        X[i].text:='Y'+inttostr(Sayac); //eklenen yazi (Y1)
        X[i].Name:='Y'+inttostr(Sayac); //bilişene verilen ad (Y1)
        Inc(Sayac);
      end;
    end; // Case
  end;
end;
Resim
Resim ....Resim
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

- Bunun için @abdulkadir'in kodunu (kendisinin de müsaadesiyle) şu şekilde güncellemelisin...
Hocam sayenizde ögreniyoruz
- Bunun için @abdulkadir'in kodunu (kendisi de ögrenmiş olur) şu şekilde güncellemelisin...
Hocam iyi calısmalar..
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@abdülkadir

- Hocam estağfirullah... O ne söz... Sizin kodda hata yok ki. :oops:

- Sadece @tur42han arkadaşımızın sorusundan, bu seçimi kullanıcıya yaptırma isteği gibi bişey sezinledim. Ayrıca her edit için ikili grup isteği de gözüme çarptı. Ayrıca kullanıcının yapacağı her seçimde programın TEdit'lerin çakışması ihtimalini ortadan kaldırmak için yeniden düzenleyen bir kod ekledim o kadar... :idea:

- Size de çalışmalarınızda başarılar... :)
Resim
Resim ....Resim
tur42han
Üye
Mesajlar: 6
Kayıt: 17 Şub 2004 02:25
Konum: Konya

Editbox'ları belli bir döngüye sokabilirmiyiz?

Mesaj gönderen tur42han »

Benim yaptığım programda amaç 4000 tane editbox'tan alınan textleri belirli bir düzende başka bir editbox'a yazdırmak (örneğin 4000 editbox içindeki textleri aralarına virgül koyarak başka bir edit box'a yazdırmak). bunun için mesela editbox(i).text gibi veya buna benzer bir döngü yapılabilir mi?
tur42han
Üye
Mesajlar: 6
Kayıt: 17 Şub 2004 02:25
Konum: Konya

DBEdit

Mesaj gönderen tur42han »

Data Controls içindeki DBEdit kullanımı nasıldır? Yani normal editbox'tan farkları ve üstünlükleri nelerdir? teşekkürler.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba tur42han,

4000 tane Edit muazzam bir rakam. Bu hiçte sağlıklı bir yöntem değil. Ne yapmak istediğini sözel olarak ifade edersen, daha uygun bir çözüm bulunabilir kanaatindeyim.

Kolay gelsin.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Re: Editbox'ları belli bir döngüye sokabilirmiyiz?

Mesaj gönderen mege »

bende 4000 tane editbox kullanımının mantıksız olacağı görüşündeyim...
tur42han yazdı: bunun için mesela editbox(i).text gibi veya buna benzer bir döngü yapılabilir mi?
bu olay visual basicde vardı (zamanında bende çok kullanmıştım :))
yüksek müsadesiyle mrmcop abimizin kodundan bir alıntı:

Kod: Tümünü seç

x[i].Tag   := 99; // Kullanıcı oluşturmuştur 
//burda 99 yerine 100+i gibi bir döngüsel değerle editboxlarını oluştur..

Kod: Tümünü seç

  
// EditBoxDuzenle(EditNo,EditString)
// buna benzer bi kodla fonksiyon oluştur.
//EditNo'i istediğin editboxun tag numarasıyla gönder ve o editboxun textini veya istediğin özelliğini değiştir.
  i := 0; 
  Repeat 
    If Components[i] is TEdit 
    then If TEdit(Components[i]).Tag = 100+([b]EditNo[/b]) then 
         begin 
           Components[i].text:=[b]EditString[/b]; 
         end; 
    Inc(i); 
  Until i > ComponentCount-1; 
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Sayin tur42han,
Admin'in dedigi gibi bu iste temel bir yontem hatası var kanaatindeyim. Mevcut teknolojik altyapı ile 4000 adet component kullanmaya ihtiyac olmamalı bence. Yani Delphi'yi geliştirenler boyle bir ise teorik olarak musade etseler de pratik olarak bunun kullanılacagını sanırım hic dusunmemişlerdir. Belki form açılamayabilir bile...

Eger yapmak istediginizi sozlu olarak ifade ederseniz farkli bir yontem onerisi gelecektir sanıyorum.

Nitekim bahsettiginiz DBEdit veritabanında kayıtlı bir alanı gostermeye yarar ve belki de sizin verileri 10 alanı olan bir tablo olarak modelleyip 400 kayıt olusturup 10 alan oldugu icin de 10 dbedit ile veya 10 sutunlu bir grid ile gostermek isi cozecektir.

Kolay gelsin...
tur42han
Üye
Mesajlar: 6
Kayıt: 17 Şub 2004 02:25
Konum: Konya

Editbox - Autocad

Mesaj gönderen tur42han »

Yapacağım proje autocad'e bir arazinin profilini çizdirmek. Arazi uzunluğu 50 km veya daha uzun olabilir. arazi üzerinde yapılan ölçümlerde arazinin uzunluğuna göre 2000'e kadar koordinat alınabilir. koordinatlar iki boyutlu yani x ve y olarak alınacaktır. bu yüzden 4000 tane nokta ediyor (2000 tane x ; 2000 tane y). autocad'e gönderme işi ise bir tane editbox ve bir button ile yapılmaktadır. yani benim, bu editbox'ın içine 4000 tane noktayı yazmam gerekiyor. bu editbox içine yazılan ifade olduğu gibi autocad'in komut satırına yazılıyor. yani yazacağım komut aynen şu şekilde olacak :
(line x1,y1 x2,y2 x3,y3 x4,y4 x5,y5 ...) Burada x1,y1, 1.noktanın koordinatları; x2,y2, 2.noktanın ... koordinatlarıdır.Bu şekilde 2000 tane nokta vardır. Editbox'a bu şekilde yerleştirildikten sonra Button'a basılınca çizim autocad'e yaptırılmaktadır.

Aslında beni Autocad'e gönderme programı sınırlıyor. Bir tane editbox olduğundan bütün koordinatları bu editbox'a girmeye çalışıyorum. Autocad'e gönderme yapan program şu şekilde :

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComObj;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
Function SendCommand(Cmd: String) : Boolean;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

Function GetAcadWindow: HWnd;
var
Acad : OleVariant;
Caption : String;
begin
Acad := GetActiveOleObject('AutoCAD.Application');
Try
Caption := Acad.Caption;
except
on EOleSysError do
begin
Result := 0;
Exit;
end;
end;
Result := FindWindow(Nil, PChar(Caption));
end;

function TForm1.SendCommand(Cmd: String) : boolean;
var
cds: TCopyDataStruct;
wnd, sender : HWND;
s : integer;
pData : array [0..255] of char;
begin;
result := False;
wnd := GetAcadWindow;
sender := Application.Handle;
if wnd <> 0 then
begin
StrPCopy(pData, Cmd + #13);
pData[Length(Cmd)+1] := #0;
cds.dwData := 1;
cds.cbData := SizeOf(pData);
cds.lpData := @pData;
Result := SendMessage(wnd, WM_COPYDATA, Sender, LParam(@cds)) <> 0;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
If Edit1.Text <> '' then
SendCommand(Edit1.Text);
end;

end.


Programda bir tane editbox bir tane de button var. Ya bu programı bir şekilde geliştirmeliyiz ya da bütün koordinatları editbox'a yazdırmalıyız.
Yardımlarınız için teşekkürler.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

kodu detaylı incelemedim ama Edit'e yazdırmak zorunda olsan bile şöyle birşey yapabilirsin. Bu 2000 koordinatı bir yere kaydedersin : en kolayı text dosya. Daha sonra text dosyadan okuyup, Edit'e alır ordan da AutoCad'e gönderirsin. Ekranda sadece 1 tane TEdit yeter o zaman.

Kolay gelsin.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Admin'in soylediklerine aynen katılıyorum. Olaya bakış açınızı bu şekle donusturmenizde fayda var.. Bir text dosyada koordinatlar tutulur ve oradan okuyup gonderme işini yapabilirsiniz... Hatta sizin kodda zaten Autocad'a gonderme isini yapan SendCommand isimli bir fonksiyon. Yani sizin editbox'lara da ihtiyaciniz yok eger koordinatlar text dosyada var ise oradan okuyup SendCommand komutunu cagirmaniz yeterli. Eger koordinatları el ile girecekseniz de o zaman edit koyarsınız....

Kolay gelsin...
tur42han
Üye
Mesajlar: 6
Kayıt: 17 Şub 2004 02:25
Konum: Konya

Array-Editbox

Mesaj gönderen tur42han »

Yapacağım programda koordinatların dışarıdan kullanıcı tarafından girilmesi gerekiyor. bunun için text dosyası görsel olarak pek güzel olmaz sanırım. Şöyle birşey yapılabilir mi: ben editbox'ları döngüye sokmak için her editbox'ı diziye çevirsem (yani (x[1]:=editbox1.text;) şeklinde tanımlasam) daha sonra x şeklinde kullansam nasıl olur? Ayrıca her editbox'ı da diziye atmak bayağı zor olacak. Ne önerirsiniz? Teşekkürler.
Sedat Atif
Üye
Mesajlar: 80
Kayıt: 18 Şub 2004 08:12
Konum: Fâni bir yerden
İletişim:

Mesaj gönderen Sedat Atif »

Yapacağım programda koordinatların dışarıdan kullanıcı tarafından girilmesi gerekiyor. bunun için text dosyası görsel olarak pek güzel olmaz sanırım.
Bunun için 4000 TEdit de pek güzel olmaz gibi geliyor bana.
Cevapla