Incompatible Types

0

Mam dość dużą liczbe poleceń, która zmienia kolor podany w zmienej.
Jest to coś takiego:
[code]if (warunek) then Komponent.atrybut.background:=color;

No i mam takich linii ze 30, a musiałbym dołożyć jeszcze z 5 razy tyle, a zmienia mi sie tylko 'atrybut'. Próbowałem wsadzić w atrybut jakiegoś stringa, ale co sie nie dziwie pisze że undeclared identifier.

I jeszcze jedno
W liście rozwijalnej dałem takie itemy jak (crDefault,crCross,crArrow, itd.) W Zdarzeniu OnSelect chcĘ zmienic wartość Cursor:=ComboBox.Text;
Ale pisze że niezgodne są typy, w jaki sposób moge 'zapewnić' kompilatorowi że będzie sie to zgadzać ?

0

Ad1: nie rozumie zapytania..

Ad2: to są niezgodne typy, Delphi bardzo rygorystycznie przestrzega poprawności typów. Nie da się chyba rzutować kursora - jest to typ liczbowy:


<font color="darkblue">Unit

Controls

type TCursor = -32768..32767;

Description

TCursor is an index into the global list of available cursors maintained by the Screen variable. TCursor values can include indexes to custom cursors added by an application, in addition to the predefined constants defined in the controls unit. The following table lists the predefined cursor constants and their position in the Cursors property array:</span>


0

a więc na drugie pytanie najpierw odpowiem że trzeba napisać taką mniej więcej funkcję inaczej nie da rady:

var s:string;
begin
 s:=ComboBoc.Text;
 if (s='crDefault') then Cursor=crDefault else
 if (s='crCross') then Cursor=crCross else

itd. itp. a na końcu:

 Cursor=crDefault;

wtedy jeśli ComboBox nie zawiera poprawnej nazwy kursora to kursor się zmienia na domyślny, ale w takim rozwiązaniu też lepiej żeby od razu wpisywało się do ComboBoxa nazwę po polsku i wtedy:

if (s='Krzyżyk') then Cursor=crCross;

co do pierwszego pytania nie jestem pewny czy zadziała coś takiego:

procedure a(nazwa:string):TForm; // TForm to jest nazwa komponentu co tło chcesz zmieniać
begin
if (warunek) then Komponent(nazwa).background:=color;
// zmienne warunek, komponent i color muszą być globalne
end;

function TForm1.ButtonClick(costam:TSender);
begin
a('label1');
a('label2');
a('label3');
a('label4');
end;

jak już mówiłem tego rozwiązania nie jestem pewien a wręcz jestem pewien że nie zadziała (nie mam przed sobą delphi). Proponuje zmodyfikowanie kodu. Komponenty można tworzyć jako tabelę dynamicznie.

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