Wartości w checkbox lub listbox

Wartości w checkbox lub listbox
0

no i gdzie ten WTF?? bo u mnie wyświetla static 6. Powiedzmy sobie może coś żeby to było jasne - ja używam Delphi a nie FP. I czy tam będzie AnsiString czy string czy PChar to po prostu działa.

Czytanie ze zrozumieniem: "Proponuję ustawić lokalną zmienną s na coś innego niż const". Nawet taką prostą instrukcję trudno zrozumieć? eh. Ulituję się, dopisz np. s:='static'+chr(random(256));.

BTW ale oczywiście z tobą nie ma się co kłócić bo ty i tak wiesz lepiej...
dla mnie EOT jak chcesz to możesz dalej przedstawiać swoje teorie na temat zbawienia świata

To żegnam.

A generyk to wg ciebie magiczny twór nie zajmujący żadnego miejsca w pamięci nie mający wewnątrz siebie żadnego rekordu opisującego parę string => string? Musisz się przespać lub zacząć czytać podstawy programowania.

W implementacji FPC nie ma żadnego rekordu. To po prostu tobie się coś wydaje (jak widać dalej źle).

Niby jakim cudem te nakłady będą mniejsze? W generyku musisz co najmniej zdublować oryginalny string z listbox'a. No chyba że nawet nie przeczytałeś tytułu tematu lub nie zrozumiałeś (czytanie ze zrozumieniem się kłania) i myślisz że do listbox'a dodaje się dodatkowy string aby mieć mapę string -> string.

Czytanie ze zrozumieniem kazało mi założyć że chodzi o mapę string-string (nie o żadną kontrolkę). O tym jest mowa i przedstawiam najlepsze rozwiązanie takiej mapy. Nie muszę dublować żadnego stringa, raz jeszcze pleciesz bzdury o budowie ansistringów (aka string w Delphi).

Nie wspominając już o tym że w listbox'ie może być "a"->"b", "a"->"c", "a"->"b" zaś w proponowanej mapie nie może być.

A to czemu nie może być? Możesz mnie oświecić? Czy to ja mam ciebie oświecić o twojej niewiedzy?

to oczywiście czytałeś pytanie ("Czy można w Delphi wpisać do listboxa lub checkboxa 2 wartości") i oczywiście to jest twoja odpowiedź...

Ale ten temat dotyczy czegoś innego.

Zgoda, chodziło mi o rozwiązanie ogólne. Tylko tu pojawia się inne pytanie: Po co używać ListBoxa (który z założenia jest listą) do robienia mapy? Generalnie to jestem za trzymaniem danych w wewnętrznej strukturze i filtrowanie danych do kontrolek. Ale jeżeli ktoś chce pisać prosty system w którym coś chce się dopisać do stringa coś to normalni programiści robią właśnie podejście z klasą. Tylko teraz pytanie, czemu mówicie o milionach elementów, tak jakby temat dotyczył takich właśnie wielkości? Skoro mówimy o prostym pytaniu jak dodać dodatkowe dane do TStringList to po prostu robimy klasę i po sprawie. Natomiast z niewiadomych mi powodów rozwijacie temat przechodząc i do budowy stringów i mówicie o wielkościach tysiące razy większych niż chodzi o to pytaczowi. Więc czy to ja nie potrafię zrozumieć pytania czy wy? Ja po prostu rozwijam wasze myśli, nie moim problemem jest wasza nadinterpretacja problemu. Ja tu tylko mówiłem o budowie ansistringów, TStringList i map, natomiast nie interesował mnie bądź co bądź podstawowy problem pytacza.

Nie ja muszę ogarnąć temat generyków tylko ty musisz ogarnąć jak te generyki się robi.

Ależ oczywiście, bo nigdy nie używałem/tworzyłem generyków.

W mapie para string -> string tworzy rekord w którym oprócz tych dwóch stringów w zależności od rozwiązania może być nawet kilka dodatkowych pól, bez tego nie da się stworzyć mapy.

Twórcy biblioteki fgl czitowali, nie ma rekordu. To że w pamięci to wygląda jak rekord nie robi z tego rekordu. To jest po prostu lista w której jest ileś pointerów (2*rozmiar mapy) i gdzie tu problem? Ja tu rekordów nie widzę.

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
0
-321oho napisał(a):

A generyk to wg ciebie magiczny twór nie zajmujący żadnego miejsca w pamięci nie mający wewnątrz siebie żadnego rekordu opisującego parę string => string? Musisz się przespać lub zacząć czytać podstawy programowania.

W implementacji FPC nie ma żadnego rekordu. To po prostu tobie się coś wydaje (jak widać dalej źle).

-321oho napisał(a):

Ależ oczywiście, bo nigdy nie używałem/tworzyłem generyków.
Zamiast przemyśleć o czym mowa, czepiasz się słów. Musi być jakiś rekord trzymający dwa napisy, i nie ważne jak ten rekord jest zaimplementowany, jako record jako TObject lub pewien obszar pamięci w którym wpakowane jeden po drugim wskaźniki do napisów lub nawet jako pewien obszar pamięci w którym te dwa napisy będą trzymane w postaci spakowanej. Tak czy owak będzie to rekord. Jeżeli w twoim pojmowaniu rekord to tylko i wyłącznie record to chyba jednak musisz poczytać jakieś podstawy.

-321oho napisał(a):

Czytanie ze zrozumieniem kazało mi założyć że chodzi o mapę string-string (nie o żadną kontrolkę). O tym jest mowa i przedstawiam najlepsze rozwiązanie takiej mapy. Nie muszę dublować żadnego stringa, raz jeszcze pleciesz bzdury o budowie ansistringów (aka string w Delphi).
W takim razie przeczytaj jeszcze raz tytul tematu: - "Wartości w checkbox lub listbox" i powiedz którego słowa nie rozumiesz.

-321oho napisał(a):

Nie wspominając już o tym że w listbox'ie może być "a"->"b", "a"->"c", "a"->"b" zaś w proponowanej mapie nie może być.
A to czemu nie może być? Możesz mnie oświecić? Czy to ja mam ciebie oświecić o twojej niewiedzy?
Dobrze oświecę cię w przypadku listbox'a z trzema wierszami "a" jak w powyższym przykładzie do pierwszego "a" podpięte "b", do drugiego "a" podpięte "c", a do trzeciego "a" podpięte znowu "b". W przypadku mapy i dodania powyższych trzech par klucz->wartość wynikiem wyszukiwania klucza będzie zawsze zbiór {"b","c"}. Widzisz różnice?

-321oho napisał(a):

...natomiast nie interesował mnie bądź co bądź podstawowy problem pytacza.
Pozostali odpowiadają pytaczowi, oraz próbują wyjaśnić ci o czym mowa. Owszem milion elementów w listbox'ie to jawna przesada, ale 50 tyś widziałem (owszem bez podpiętego czegokolwiek), musiałem po kimś przerabiać tą formatkę bo niestety listbox kiepsko sobie z tym radził.

-321oho napisał(a):

W mapie para string -> string tworzy rekord w którym oprócz tych dwóch stringów w zależności od rozwiązania może być nawet kilka dodatkowych pól, bez tego nie da się stworzyć mapy.

Twórcy biblioteki fgl czitowali, nie ma rekordu. To że w pamięci to wygląda jak rekord nie robi z tego rekordu. To jest po prostu lista w której jest ileś pointerów (2rozmiar mapy) i gdzie tu problem? Ja tu rekordów nie widzę.
</quote>Powiedz mi czym różni się dla ciebie tablica N rekordów po dwa pointery od tablicy 2
N pointerów? A no tak fizycznie tego nie podzielili na rozmiar mapy elementów! Teraz to nie rekordy więc żadnej pamięci nie zajmują. Tak czy owak masz 2*rozmiar_wskaźnika na każdą parę z mapy. Ja to nazywam rekordem (nie mylić z record). Poza tym, to wszystko? żadnej innej pamięci ta mapa nie zajmuje?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
flowCRANE
"Wartości w checkbox lub listbox" - CheckBox nie posiada listy, "CheckListBox" owszem;
_13th_Dragon
Ja to rozumiałem jako ComboBox lub CheckListBox, ale tak czy owak w obu przypadkach chodzi o TStrings
0

Zamiast przemyśleć o czym mowa, czepiasz się słów. Musi być jakiś rekord trzymający dwa napisy, i nie ważne jak ten rekord jest zaimplementowany, jako record jako TObject lub pewien obszar pamięci w którym wpakowane jeden po drugim wskaźniki do napisów lub nawet jako pewien obszar pamięci w którym te dwa napisy będą trzymane w postaci spakowanej. Tak czy owak będzie to rekord.

To twoim zdaniem:

  • tablica jest rekordem
  • obiekt jest rekordem
  • klasa jest rekordem
  • program jest rekordem (najs)

Wychodzi że twoim zdaniem wszystko co da się umieścić w pamięci jest rekordem (cała przestrzeń wirtualna procesu też jest rekordem).

Ah i tak, czepiam się słów, jakbyś mnie nie znał. Nie robiłbym problemów gdybyś nazwał to inaczej, tylko problem leży w tym że nazwałeś to rekordem wobec czego zrozumiałem to trochę inaczej. Jeżeli masz zamiar się z moją interpretacją kłócić to proszę bardzo, nie mniej rekord to jest pewna konstrukcja Pascala.

Jeżeli w twoim pojmowaniu rekord to tylko i wyłącznie record to chyba jednak musisz poczytać jakieś podstawy.

Jakie podstawy? Słucham uważnie.

W takim razie przeczytaj jeszcze raz tytul tematu: - "Wartości w checkbox lub listbox" i powiedz którego słowa nie rozumiesz.

A przeczytałeś cały post? Ja tu tylko mówiłem o budowie ansistringów, TStringList i map, natomiast nie interesował mnie bądź co bądź podstawowy problem pytacza.

Dobrze oświecę cię w przypadku listbox'a z trzema wierszami "a" jak w powyższym przykładzie do pierwszego "a" podpięte "b", do drugiego "a" podpięte "c", a do trzeciego "a" podpięte znowu "b". W przypadku mapy i dodania powyższych trzech par klucz->wartość wynikiem wyszukiwania klucza będzie zawsze zbiór {"b","c"}. Widzisz różnice?

Kopiuj
program DragonNieZnaGenerykow;
{$mode objfpc}{$H+}
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this },fgl;
type
  T13h=specialize TFPGMap<String,String>;
var
  g:T13h;
  i:integer;
begin
  g:=T13h.Create;
  g.Add('a','b');
  g.Add('a','c');
  g.Add('a','b');
  for i:=0 to g.Count-1 do writeln(g.Keys[i],#32,g.Data[i]);
end.

Try it yourself
Może zamiast się ze mną kłócić posłuchaj moich dobrych rad i poucz się nieco o ansistringach i generykach.

Pozostali odpowiadają pytaczowi, oraz próbują wyjaśnić ci o czym mowa. Owszem milion elementów w listbox'ie to jawna przesada, ale 50 tyś widziałem (owszem bez podpiętego czegokolwiek), musiałem po kimś przerabiać tą formatkę bo niestety listbox kiepsko sobie z tym radził.

No to proszę bardzo odpowiadajcie pytaczowi, tylko w takim wypadku rozważacie problemy nieadekwatne do problemu pytacza. Dlatego też uznałem że nie chodzi już o pytanie i począłem zwalczanie herezji o ansistringach i ich pakowaniu jako obiekt do TStringList. Ponieważ mówiliście o milionie elementów dlatego też zaproponowałem generyk. Ja nie odpowiadam pytaczowi, a wam. Wy już również nie odpowiadacie pytaczowi tylko prowadzicie rozmowę luźno związaną z tematem (czego przejawem jest np. milion elementów).

Powiedz mi czym różni się dla ciebie tablica N rekordów po dwa pointery od tablicy 2N pointerów? A no tak fizycznie tego nie podzielili na rozmiar mapy elementów! Teraz to nie rekordy więc żadnej pamięci nie zajmują. Tak czy owak masz 2rozmiar_wskaźnika na każdą parę z mapy. Ja to nazywam rekordem (nie mylić z record).

Zacznijmy od tego że record to słowo kluczowe Pascala, po polsku to jest rekord albo struktura (zależy od języka programowania). A czym się ona różni? Np. wyrównaniem, kolejnością elementów w pamięci. Tablica też zajmuje pamięć, tylko gdybyśmy teraz zrobili coś takiego: TFPGMap<Byte,Byte>; to jest duża szansa że to nie będzie to samo. Więcej będzie zajmować rekord ze względu na wyrównanie.
Rozumiem twoje pojmowanie rekordów, nie mniej to nie są rekordy w rozumieniu Pascala. A ponieważ jesteśmy w dziale Pascal/Delphi uznałem że chodzi o rekordy w ujęciu Pascalowym.

Poza tym, to wszystko? żadnej innej pamięci ta mapa nie zajmuje?

FKeySize,FDataSize,FDuplicates,FSorted,FOnKeyPtrCompare,FOnDataPtrCompare,FList,FCount,FCapacity,FItemSize . W sumie pewnie z 20-30 bajtów.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)