Wykrywanie ciągu znaków w edit

0

Potrzebuję w clicku edita wprowadzać tekst gromadzony w zmiennej, jednak tekst ten to ciąg znaków w stylu Cu1, Kb20, Id75, itp. na swoje potrzeby nastukałem taką prostotę:

var
  zXD : String = 'none';
begin
  if (Pos(zXD, edt1.Text) = 0) and (zXD <> 'none') then
  begin
    if edt1.Text <> '' then
      edt1.Text := edt1.Text + ', ' + zXD
    else
      edt1.Text := zXD;
  end;

Problem pojawia się w momencie gdy najpierw zmienna zXD przechowuje wartość Cb15, a póżniej Cb1, ponieważ odczytuje Cb1 jako coś co już istnieje w edt1.Text, jako że wszystkie gromadzone pozycje odgradzam przecinkiem myślałem, że lekka zmiana powyższego kodu rozwiąże mój problem:

var
  zXD : String = 'none';
begin
  if (Pos(zXD, edt1.Text + ',') = 0) and (zXD <> 'none') then
  begin
    if edt1.Text <> '' then
      edt1.Text := edt1.Text + ', ' + zXD
    else
      edt1.Text := zXD;
  end;

Niestety nie przynosi to żadnych rezultatów ;/
Ma ktoś może jakiś pomysł jak to ugryźć?

EDIT: Przychodzi mi do głowy jeszcze rozwiązanie by do zmiennej już trafiały dane z ',' i wtedy usunąć go z tego kodu, jednakże może jest jakieś rozwiązanie w tym miejscu?

0

W delphi grzebałem dawno temu, ale może coś takiego Ci się przyda:

program ideone;
{$mode objfpc}

function Concat(LeftHandSide, RightHandSide, Separator: String): String;
begin
  if LeftHandSide = '' then
    Result := RightHandSide
  else 
    Result := LeftHandSide + Separator + RightHandSide;
end;

type TData = String;
type TStorage = String;
type TSeparator = String;

type TStorageBuilder = object
  private
    FAccumulatedValue: TStorage;
    FSeparator: TSeparator;
    
  public
    procedure SetSeparator(NewSeparator: TSeparator);
    procedure Add(Data: TData);
    function Build: TStorage;
end;

procedure TStorageBuilder.SetSeparator(NewSeparator: TSeparator);
begin
  FSeparator := NewSeparator;
end;

procedure TStorageBuilder.Add(Data: TData);
begin
  FAccumulatedValue := Concat(FAccumulatedValue, Data, FSeparator);
end;

function TStorageBuilder.Build: TStorage;
begin
  Result := FAccumulatedValue;
  FAccumulatedValue := '';
end;

var Storage: TStorageBuilder;
begin
  with Storage do SetSeparator(', ');

  with Storage do
  begin
    Add('Cb15');
    Add('Kb20');
    Add('Id75');
    
    WriteLn(Build());
  end;
  
  with Storage do
  begin
    Add('Cb1');
    Add('Kb20');
    Add('Id75');
    
    WriteLn(Build());
  end;
  
end.

http://ideone.com/ATwAhw

W twoim wypadku wystarczy zastąpić w Add literały twoimi zmiennymi.
np.

with Storage do
begin
  SetSeparator(', ');
  Add(zXD);
  Add(iNNaDziwnaNazwa);
  edt1 := Build();
end;
0
procedure TForm1.podstaw(s: string);
const
  separator = ',';
begin
  if pos(separator + s + separator, separator + trim(self.Edit1.text) + separator) = 0 then
    if trim(self.Edit1.text) = '' then
      self.Edit1.text := s
    else
      self.Edit1.text := self.Edit1.text + separator + s;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1