Udało mi się zrobić to co chciałem, ale tego jest tyle, że ten post pewnie będzie bardzo długi, ale trudno - jak będziesz chciał się odnieść to to zrobisz, a jeśli nie to i tak wdzięczny jestem za pomoc. Zacznę od tego nieszczęsnego SQLa :)
Otóż próbowałem zrobić funkcję, która by sprawdzała czy wpisane słowo znajduje się w tabeli IrregularVerbsPresentIndicative
, a jeśli tak to wpisuje w Labele konkretne pola. Tabela jest w tej samej bazie co wcześniej żeśmy robili i posiada pola typu basic_form
, io_form
, tu_form
itd. Moja funkcja wygląda tak:
function TMainForm.IsVerbIrregular: Boolean;
begin
Wynik := SQLiteBaza.GetTable(
'SELECT basic_form FROM IrregularVerbsPresentIndicative WHERE basic_form = '
+ QuotedStr(Verb));
if Wynik.Count > 0 then
begin
result := true;
Wynik.Free
end else
begin
result := false;
Wynik.Free;
end;
end;
Potem mam takie coś
lblFirstSingularPresentIndicative.Caption := Wynik.FieldByName['io_form'];
I nie wiem co robię tu źle? Jak mam inaczej odnieść się do tego pola io_form
?
Druga sprawa to te czasowniki zwrotne. Miałem bardzo duży problem z tym dzisiaj, bo długo nie wiedziałem dlaczego funkcja dodaje mi dodatkowe -a do czasowniki. Może trochę wyjaśnię sytuacje. Czasowniki zwrotne w języku włoskim kończą się na -arsi, -ersi, -irsi więc pomyślałem, że zamiast pisać osobną procedurę do ich koniugacji to zrobię procedurę, która sprawdza końcówkę czasownika potem usuwa końcówkę -si i dodaje -e po to żeby później procedury do koniugacji zwykłej mogły go odmienić jak regularny, np:
chiedersi -- procedura -- > chieder --> chieder + e --> chiedere i czasownik chiedere bez problemu odmienia procedura EreConjugation
A tak wygląda procedura:
procedure TMainForm.ReflexiveToRegularVerb;
begin
if (CheckedVerbsFunction(4) = 'arsi')
or (CheckedVerbsFunction(4) = 'ersi')
or (CheckedVerbsFunction(4) = 'irsi') then
begin
Delete(Verb, Length(Verb)-1, 2);
Insert('e', Verb, Length(Verb)+1);
end;
end;
Nie wiem czy to dobre rozwiązanie, ale mnie się podoba, bo nic innego nie mogłem wymyślić, a to wydaje się logiczne i mam nadzieję, że takie jest ;)
Problem jednak pojawiał się, bo dopóki miałem zmienną WordLength
to korzystałem z niej w tej procedurze i nie mogłem zrozumieć dlaczego dodaje mi -a dodatkowe czyli np. miałem chiedera, a działo się tak dlatego ponieważ zmienna WordLength
"pamiętała" długość słowa przed obcięciem go tą procedurą i potem procedury do koniugacji nie umiały tego rozgryźć :P Zastąpiłem wszędzie tę funkcję procedurą Length(Verb)
i działa. Matko nie wiem czy to ma sens co piszę, bo dla mnie w głowie ma, ale ja pisałem ten program więc trochę łatwiej mi się w tym połapać.
Drugi błąd, który nie dawał mi spokoju to taki, że po napisaniu już tej procedury do czasowników zwrotnych wszystko działało, ale pojawił się problem, bo gdy wpisałem jakiś czasownik zwrotny (niech będzie znowu to chiedersi) to program ładnie je odmieniał, ale gdy nie zmieniłem nic w komponencie VerbEdit tylko klikałem drugi raz przycisk OK to wtedy program odmieniał mi ten czasownik jak regularny czyli usuwał po prostu te Labele do zwrotnych. Długo nie wiedziałem czemu, ale później analizował kod na spokojnie i zrozumiałem, że po tym jak używam procedury ReflexiveToRegularVerb
to ta zmienna Verb nie jest już chiedersi tylko chiedere więc nie dziwota, że program za drugim razem działał inaczej.
Naprawiłem to chyba najgłupszym możliwym sposobem (ale działającym), mianowicie stworzyłem drugą zmienną VerbCopy, która przechowuje oryginalną zmienną Verb przed wykonaniem procedury i pod koniec działania procedury MainConjugation
dodałem taką linię Verb := VerbCopy
czyli po prostu przywracam jej oryginalną wartość.
Dzięki bardzo za rady co do backupu :D Muszę zacząć to wykorzystywać