Vielen Dank für die schnelle Antwort,
Diese Funktion überprüft nur die erste Spalte der über den Editor geöffnete Tabelle auf doppelter Eintrag.
Aber die Aufgabe lautet : Ich habe eine neue Formular aufzurufen, drauf sind 15 ComboBoxen. In jeder ComboBox sind 3 gleiche Items/Funktionen drin (MyChekGleich, MyChekInteger, MyChekFloat). (ComboBox1 für Spalte 1.. ComboBox2 für Spalte 2... )
Wenn ich in ComboBox1 z.B 'MyChekGleich' ausgewählt habe dann soll die erste Spalte auf Doppelter Eintrag überprüft werden. Da habe ich Schwierigkeiten..
Dann muss ich meine Funktion in der
Unit unit1 (wo alles implementiert ist) aufrufen Und wenn ich die
XML-Datei geöffnet habe und über Extras die Formular aufrufe und in der ComboBox1 'MyChekGleich' auswähle und diese Einstellung speichere, dann soll beim Speichern eine Fehlermeldung ausgegeben (z.B Zeile markieren) werden wenn ein Doppelter Eintrag vorkommt..
1. Zuerst habe ich wie gesagt dem Projekt ein
Unit hinzugefügt, wo ich meine Funktion/Funktionen geschrieben habe.
2. Dann eine
VCL-Formular (die über Extras aufzurufen ist), wo ich 15 ComboBoxen platziert habe, da wird ausgewählt, welche Überprüfung für welche Spalte durchzuführen ist. Einstellungen müssen in einem File gespeichert werden.
3. Ich habe in der
Unit unit1, beim Prozedur SpeichernClick, meine Funktion aufgerufen und meine Abfrage gemacht...Showmessage('Reaktion..')
So siehst das ganze aus :
Code zu 1 :
Delphi-Quellcode:
function TMyChek.MyChekGleich(StringGrid:TggStringGrid):Integer ;
var
a , b ,c : integer;
Inhalt_Check : string;
iDoppeltcounter:integer;
begin
iDoppeltcounter:=0;
Result:=-3;
b:= StringGrid.RowCount; // Anzahl der Zeilen...
for a:=0 to b do begin
Inhalt_Check:=StringGrid.Cells[0,a]; //Zeile Um 1 erhöhen...
for c:=0 to b do begin
if Inhalt_Check=StringGrid.Cells[0,c] then begin
iDoppeltcounter:=iDoppeltcounter+1;
if iDoppeltcounter>1 then begin
Result:=c;
StringGrid.Selection:=...??
exit;
iDoppeltcounter:=0;
end;
end;
end;
end;
end;
Code zu 2 :
Delphi-Quellcode:
...
type
Regel = record
Spalte : Array [1..15] of string ;
Kriterium : string ;
end;
const MaxAnzahlRegeln=9;
const SpaltenAnzahl=15;
var
MyRegeln : Array [1..MaxAnzahlRegeln] of Regel;
...
procedure TFMRegeln.ComboBoxChangeAlg(Sender: TObject);
begin
MyRegeln[STrToInt(ComboBox1.Text)].Spalte[(Sender as TComboBox).Tag]:=(Sender as TComboBox).Text;
end;
////////////////// Wird aufgerufen, wenn SaveBtn gedrückt ist../////////////////
procedure TFMRegeln.SaveBtnClick(Sender: TObject);
var
i:integer;
sAktDir:string;
begin
sAktDir:=GetCurrentDir;
fileData:= TStringList.Create;
fileData.add('Regeln');
fileData.add('Regel :'+ComboBox1.Text);
fileData.add('Kriterium für die Anwendung der Regel:'+Edit1.Text);
for i := 1 to SpaltenAnzahl do
fileData.add('Spalte:'+MyRegeln[StrToInt(ComboBox1.Text)].Spalte[i]);
fileName:= sAktDir +'\Test.txt';
//fileName:= ExtractFilePath(Paramstr(0))+'Test.txt';
if fileName <> '' then begin
fileData.SaveToFile(fileName);
fileData.free;
SaveBtn.Enabled := true;// Savebutton deaktivieren..
close;
end;
Code zum Punkt 3 :
Delphi-Quellcode:
////////////////////////// XML File speichern
procedure TForm1.Speichern1Click(Sender: TObject);
var
MyXML:TBATM4XMLClass;
i,r,S:integer;
MyCheck:TMyChek;
iResult:integer;
//b : Boolean;
begin
MyCheck:=TMyChek.Create;
iResult:=MyCheck.MyChekGleich(MainGrid);
//b:=MyCheck.MyChekFloat('10');
if iResult<>-3
then begin
Showmessage('
Doppelter Eintrag : ' + IntTostr(iResult));
end;
//if b then begin
//Showmessage(' Das ist ein Integer...');
Freeandnil(MyCheck);
if UPPERCASE(copy(Filename,length(Filename)-2,3)) = '
TXT'
then begin
SavetextFile();
.
.
.
Ich find's selbst ein bisschen zu viel..als Frage!
Aber ich brauche Ihre Hilfe und bin sehr dankbar..
-)