| Autor | Správa |
Manny
 Užívateľ
 Založený: 30.09.2009 Príspevky: 61
 | Zaslal: Pi 18.06.10 13:46 |   |
Zdravím,
tí, čo ste niekedy programovali v PHP, tak viete, že combobox sa dá napísať cez kód:
| kód: | <select name="moj_box">
<option value="raz">Prvá možnosť</option>
<option value="dva">Druhá možnosť</option>
</select> |
V Delphi si môžem vytvoriť combo a nasypať tam itemy cez:
| kód: | ComboBox1.Items.Add('Prvá možnosť');
ComboBox1.Items.Add('Druhá možnosť'); |
Otázka teraz znie: Ako sa dopracujem k výsledku ako pri PHP? To znamená, že keď zvolím možnosť "Prvá možnosť", combo mi vráti hodnotu "raz"? Combo vracia len ItemIndex, takže je moja jediná šanca? Mám teda ísť obklukou cez ItemIndex a niekde inde si definovať, že 0 = "raz", 1 = "dva"? Ak to je tak, tož v tomto prípade môže ľahko vzniknúť problém, ak sa nastaví preusporiadanie prvkov.
Vďaka za názory a reakcie. Prajem pekný deň. |
| |
   |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 927
 | Zaslal: Pi 18.06.10 14:02 |   |
1, prvy kod je HTML a nie PHP
2, metoda Add by mala mat aj druhy parameter typu TObject. zadefinujes si novy object napr TComboVal ten nech ma jeden field typu string a instanciu takehoto objektu budes davat ako druhy parameter metody Add. skus sa inspirovat tu http://delphi.about.com/od/vclusing/a/items_addobject.htm |
| |
  |
 |
Manny
 Užívateľ
 Založený: 30.09.2009 Príspevky: 61
 |
coldak, vďaka za odpoveď uvažujem ešte nad jednou alternatívou. spraviť si do comboboxu (ak sa to dá), ďalší zoznam (TStrings), ktorý by "išiel" súčasne s Items. V Items by sa nachádzali položky, ktoré sa zobrazia a v tom druhom liste by boli interné hodnoty. Identifikovať by sa dali cez ItemIndex. |
| |
   |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 927
 |
jasne, kedysi som to tiez tak robieval ze som si vytvoril novy objekt odvodeny od TComboBox a do neho dorobil doplnujuci zoznam . kludne to urob aj tak, aspon si precvicis vytvaranie noveho objektu  |
| |
  |
 |
Manny
 Užívateľ
 Založený: 30.09.2009 Príspevky: 61
 | Zaslal: Št 29.07.10 11:56 |   |
Len taká otázka... nikdy som neupravoval/nevytváral komponentu. Vedel by mi niekto poradiť ako vytvoriť duplicitnú komponentu z TComboBox-u akurát by mala tieto 3 funkcie naviac:
| kód: | AddInternal(TComboBox, 'Text, čo sa vykreslí v ComboBoxe - string', 'interná hodnota, napr. IDčko - string'); // zadanému comboboxu pridá ďalší riadok s internou hodnotou
SetInternal(TComboBox, 'interná hodnota'); // nastaví ako "selected" zadanú internú hodnotu danému combobxu
GetInternal(TComboBox) : string; // vráti aktuálne označenú internú hodnotu |
|
| |
   |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 909
 | Zaslal: Št 29.07.10 12:42 |   |
| kód: | TNewCombo = class(TComboBox)
public
AddInternal(TComboBox, 'Text, čo sa vykreslí v ComboBoxe - string', 'interná hodnota, napr. IDčko - string'); // zadanému comboboxu pridá ďalsí riadok s internou hodnotou
SetInternal(TComboBox, 'interná hodnota'); // nastaví ako "selected" zadanú internú hodnotu danému combobxu
GetInternal(TComboBox) : string; // vráti aktuálne označenú internú hodnotu
end; |
Už len dopísať definície členských funkcií. |
| |
   |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 927
 | Zaslal: Št 29.07.10 13:39 |   |
|
  |
 |
Manny
 Užívateľ
 Založený: 30.09.2009 Príspevky: 61
 | Zaslal: Št 29.07.10 15:29 |   |
Díky chlapi Idem naštudovať.
Mimochodom tie členské funkcie "hovoria", čo všetko má tá funkcia robiť? Teda členská funkcia = jadro? Nemám tieto termíny ešte osvojené. |
| |
   |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 909
 | Zaslal: Št 29.07.10 16:56 |   |
Členské funkcie sú funkcie zapuzdrené v triede. Čiže napríklad Form1.Show alebo aj Form1.OnClick, ktorú si vytvoríš pre ošetrenie kliknutia na TButton.
A keďže ty si nejaké nové členské funkcie pridal do deklarácie triedy (AddInternal, SetInternal, GetInternal), tak ich ešte treba definovať - čiže napísať ich telo, napr:
| kód: | | procedure AddInternal( x: TComboBox); |
|
| |
   |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 927
 | Zaslal: Št 29.07.10 17:08 |   |
| Fico napísal: | Členské funkcie sú funkcie zapuzdrené v triede. Čiže napríklad Form1.Show alebo aj Form1.OnClick, ktorú si vytvoríš pre ošetrenie kliknutia na TButton.
A keďže ty si nejaké nové členské funkcie pridal do deklarácie triedy (AddInternal, SetInternal, GetInternal), tak ich ešte treba definovať - čiže napísať ich telo, napr:
| kód: | | procedure AddInternal( x: TComboBox); |
|
suhlasim, len sa mi zda ze tam chyba prefix triedy, cize
| kód: | | procedure TNewCombo.AddInternal( x: TComboBox); |
|
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 909
 | Zaslal: Št 29.07.10 17:09 |   |
|
   |
 |
Manny
 Užívateľ
 Založený: 30.09.2009 Príspevky: 61
 |
Vďaka za odpovede, našiel som aj celkom dlhý a kvalitný seriál v offline verzii od Václava Kadleca, kde je tiež vysvetlené vytváranie komponent (aj pre iných, ak by mal niekto podobné nejasnosti).
Umíme to s Delphi (offline):
http://umime-to-s-delphi.wz.cz/s_reg/setup/setup.zip |
| |
   |
 |
|