Poprawne zastosowanie funkcji FindComponent

0

Witam,

chciałbym wczytać plik obrazka do jednego z obiektów Image (jest ich kilkadziesiąt) używając funkcji FindComponent.

Czy możecie sprawdzić czy jest to dobrze napisane? Po kompilacji błędy nie występują jednak program nie działa tak jak bym tego chciał (plik się nie wczytuje i to nie jest wina funkcji wczytującej, a raczej niewłaściwego znalezienia/adresowania obiektu). Właścicielem wszystkich obiektów jest SUDOkumacz.

void znajdzNumerPola (AnsiString numerPola_str)
{
    // numerPola_str jest zmienna, ktora mowi, jaki jest Name obiektu
    TComponent *component=SUDOkumacz->FindComponent(numerPola_str);
    if(component)
    {
        TImage *image = dynamic_cast<TImage *>(component);
        if(image)
        {
            image->Picture->LoadFromFile("img\\"+szukana_str+".jpg");
        }
    }
}
1

Jeśli wyskakują błędy, to jaka jest ich treść? Używałeś debuggera i wiesz w której linijce owy błąd się pojawia?

Poza tym czym jest SUDOkumacz? Formularz czy komponent? Znowu trzeba prosić o konkrety.

0

Nie. Kompiluje się bez zastrzeżeń, a podczas debuggowania wartości numerPola_str i szukana_str są odpowiednie (sprawdziłem poprzez if'a: (tego if'a wstawiłęm zamiast funkcji z FindComponent)

if (numerPola_str=="P21")
{
    SUDOkumacz->P21->Picture->LoadFromFile("img\\"+szukana_str+".jpg");
}

Plik przy if'ie wczytuje się w odpowiednim komponencie.
Edyta dodaje, że SUDOkumacz jest Formularzem.

0

Sprawdź czy możesz odczytać nazwę komponentu z referencji ze zmiennej component, a jeśli tak, to czy zgadza się z oczekiwaną. Jeśli wszystko gra to problem jest dalej, czyli podczas rzutowania lub błąd wywołuje LoadFromFile.

0

SUDOkumacz to Forma na która wstawiłem 81 obiektów Image.

1

Najlepiej by było gdybyś postawił break point na pierwszej instrukcji, czyli na tej:

TComponent *component=SUDOkumacz->FindComponent(numerPola_str);

i linijka po linijce sprawdzał która dokładnie wywołuje błąd. Następnie treść tego błędu wrzuć do posta (w odpowiednie znaczniki) lub zrób zrzut ekranu, jeśli nie będziesz w stanie skopiować treści błędu jako tekstu.

0

wrzucam screena z wartością component (jaki powinien być tutaj znacznik?):
screenshot-20181217012845.png

0

Adres referencji wygląda dobrze – jaka jest więc treść błędu?

0

W zasadzie program dojeżdża do końca... i nie ładuje pliku. Czy debuggując powinienem na zmiennej component odczytać taka samą wartość jak na zmiennej numerPola_str? (bo powinny się one pokrywać). Jeśli tak, to u mnie jest inaczej (widać wartość component na screenie - a powinna, w tym akurat przypadku dla potrzeb sprawdzenia kodu, wynosić 'P21'). Co jeszcze mógłbym sprawdzić?

1
k1313 napisał(a):

Czy debuggując powinienem na zmiennej component odczytać taka samą wartość jak na zmiennej numerPola_str?

Nie, component przechowuje adres obiektu (komponentu), a numerPola_str ciąg znaków. Wartość P21 powinna być zwracana poprzez właściwość component->name, jeśli FindComponent faktycznie pobrał referencję tej kontrolki.

Co jeszcze mógłbym sprawdzić?

Czy plik pod zadaną ścieżką faktycznie istnieje.

Poza tym najpierw napisałeś że błąd istnieje i wyskakuje podczas działania programu, a teraz piszesz, że w zasadzie nie ma błędu, ale obrazek nie jest ładowany. No to jak jest w końcu?

0

A ja się zastanawiam, czemu szukana_str nie jest w żaden sposób powiązana z numerPola_str.
Może szukana_str ma cały czas tą samą wartość, więc nic się nie zmienia.

0

nie, nie jest powiązana. Sprawdzałem - zmienia wartość. Ogólnie mam tablicę 3D, gdzie trzecim wymiarem są wszystkie możliwe cyfry dla pozycji [i][j] . Jeśli osiem z nich jest równe zero, to szukana'/'szukana_str' jest tą "ostateczną" cyfrą, którą należy umieścić w komórce 'tablicy[i][j][szukana]'. 'numerPola_str' jest stringiem mówiącym, o który obiekt chodzi, np. 'P1' to pozycja [0][0], 'P21' pozycja [2][2] itd..
.. już poszło trochę do przodu, walczę teraz z debuggowaniem....idzie jak po grudzie, ale do przodu:)

0

Zadziałało!! Wielkie dzięki za "naprowadzanie" i pomoc!

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