Einzelnen Beitrag anzeigen

Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Zahlen überprüfen --> keine darf doppelt

  Alt 29. Jun 2007, 17:49
Mal mein Ansatz als Code:

Delphi-Quellcode:
function CheckDuplicates(ParentControl: TWinControl; var WrongEdit: TEdit): Boolean;
var
  i,n: Integer;
  ba: array of Boolean;
begin
  Result := False;
  n := 0;

  // Edits zaehlen
  for i := 0 to Pred(ParentControl.ControlCount) do
    if ParentControl.Controls[i].InheritsFrom(TEdit) then
      Inc(n);
  // Keine Edits? Dann Ende.
  if n = 0 then exit;
  // ByteArray setzen
  SetLength(ba, n);
  // Edits checken
  for i := 0 to Pred(ParentControl.ControlCount) do
    if ParentControl.Controls[i].InheritsFrom(TEdit) then
    begin
      // Zahl auslesen, wenn keine Zahl dann 0, wenn 0 dann ignorieren
      n := StrToIntDef((ParentControl.Controls[i] as TEdit).Text, 0) - 1;
      if n >= 0 then
      begin
        // Mit Array vergleichen
        If ba[n] then
        begin
          WrongEdit := (ParentControl.Controls[i] as TEdit);
          Result := True;
          Exit;
        end else
          ba[n] := true;
      end;
    end;
end;
Es geht die Edits unter einem Control durch, zählt TEdit-Ableger, und prüft gegen ein dynamisches Bool-Array.

Trifft es auf ein Edit mit einer Zahl, die schon existiert, bricht es ab und notiert dieses Edit in WrongEdit. So kann man dieses selektieren, markieren, etc.

Aufgerufen wereden könnt es etwa so:
Delphi-Quellcode:
var
  we: Tedit;
begin
  if CheckDuplicates(Panel1, we) then
  begin
    // mach etwas mit we
  end;
end;
Ein netter Nebeneffekt ist, dass es Zahlen, die grösser als die Anzahl der Edits sind ebenfalls als Doppelte angezeigt werden...

[edit] noch ein bissel Entbugged [/edit]
  Mit Zitat antworten Zitat