Zanzaczam ze temat wyjatkowo umiescilem w tym dziale ze wzgledu na to ze w noobie usuwane sa tematy po 30 dniach.
Jestem w trakcie tworzenia prostego progamu do wykreslania krzywych Beziera – jednak ze względu na to że jestem poczatkujacy mam powazne problemy z zagadnieniami podstawowymi i szukam optymalnych rozwiazan oraz przykladów ich zastosowania.
Ponizej zamieszczam screen z programu i link do powiedzmy dzialajacej wersji:
http://83.18.241.202/krzywebeziera//Screen.JPG
http://krzywebeziera.glt.pl/Project1.exe
Chcialby aby była natychmiastowa reakcja na zmiane pol TEdit (gorny prawy rog formy)– czyli wprowadzenie innych wartosci niż domyslnie tam wpisane, zrealizowane mam to tak :
procedure TForm1.SiatkaEchange(Sender: TObject); // aby nastapilo natychmiastowe „uaktualnienie plotna" SiatkaE to pole TEdit
begin
Przerysuj; //procedura przerysowania plotna
end;
Tylko pytanie – jak zabezpieczyc się przed blednym podaniem danej – czyli zamiast liczby znaku literowego – pole jako takie jest „tekstowe” ? I druga sprawa – co zrobic żeby można było klawiszem backspace usuwac poprzednia wartosc? Bo wstawiajac takei cos do Change wywala mi obecnie program.
Jak utworzyc dodatkowe okno które pojawi się i do ktorego należy wprowadzic dane ewentalnie zatwierdzic opcje etc a które wstrzyma na chwile dzialanie procedury z ktorej zostalo wywolane a nastepnie powroci do niej? Np. okno do wprowadzania nr pkt i jego nowych wspolrzednych? Chwilowo mam efekt taki ze np. pojawia się okno ale procedura jest dalej wykonywana. Chciałbym np. dodatkowe okno pojawiajace się w przypadku opuszczania programu gdy sa wprowadzone jakies dane a grozilaby ich utrata (niezapisane).
No i na razie najpowazniejszy problem - obsługa myszki. Obecnie wstawianie punktow i usuwanie klikajac na paintboxie realizowalem przez OnClick – tyle ze to nie pozwala chyba na bardziej wyrafinowane – albo raczej moja wiedza na to nie pozwala Domyslam się ze rozwiazaniem jest – przechwytywanie zdarzen : OnMouse UP, DOWN, MOVE. Chciałbym także odzielic dzialanie klawiszy myszy lewy oraz prawy - aby prawy sluzyl do wyswietlenia menu kontekstowego (podrecznego). Czy moglby ktos zamiescic gotowy przykład ? I przy okazji pytanie – co się stanie jeśli istnieja obok siebie procedury korzystajace z PaintboxOnClick oraz PaintboxMouseDown – tzn wykonane zostana obie procedury, jedna z nich?
Kolejna sprawa wiaze się posrednio z powyzszym - sprawa obsługi danych ala Excel. Dzialanie procedur realizujacych algorytm tworzenia krzywych opiera się na zastosowaniu tablic skladajacych się z rekordow:
type
typ = record // wspolrzedne dowolnego punktu zapisujemy w postaci rekordu
x: integer; // wspolrzedna x dowolnego punktu
y: integer; // wspolrzedna y dowolnego punktu
I tak mam zdefiniowane 3 tablice
pkt1:array[1..1000] of typ; // pkt1 - tablica punktow kontrolnych
pkt2:array[1..1000] of typ; // pkt2 - tablica punktow posrednich
pkt3:array[1..1000] of typ; // pkt3 - tablica punktow ostatecznych - koncowych
Jedną z nich jednak chciałbym udostepnic uzytkownikowi programu do „wgladu” – czyli aby mogl na ekranie obserwować zawartość jedenj tabeli. I tu pytanie z czego skorzystac? Myslalem o skorzystaniu z StringGrid – tyle ze chciałbym żeby osoba uzywajaca program mogla za posrednictwem takiego pseudoarkusza dodawac, uswac dowolny wiersz (ze wspolrzednymi x,y) – np. podobnie jak w excelu wciskajac prawy klawisz myszki pojawilo się menu A tam „wstaw” „usun” i aby można wprowadzac i edytowac wspolrzedne.
Czy w zwiazku z tym konieczne jest zastosowanie kolejnego menu popup które się pojawi wylacznie gdy zdarzenie MouseDown dotyczy StringGrida? Czy może jest jakies lepsze rozwiazanie – inny komponent? Jeśli to możliwe prosilbym o przyklady podobnych problemow i ich rozwiazania.
Mam również pytanie odnosnie obslugi przez delphi schowka oraz formatu jpg – stworzylem procedury które pozwalaja na skopiowanie do schowka lub zapisujace do pliku jpg to co tworzone jest na plotnie – problem w tym ze obraz zapisywany w jpg jest jakby wyprany z kolorow – tak jakby przy zapisywaniu inne odcienie powstawaly czerwony kolor krzywej nie jest wcale taki soczysty– czy da się cos z tym zrobic?
Przewijanie memo – stworzyłem rowniez memo (przycisk Pomoc) w którym widnieje spora dawka tresci – w zamyslnie krotki help co i jak w porgramie – chciałbym jednak ze względu na ilosc tekstu zrobic memo przewijane – dadalem scroollbar tylko teraz problem mam jak opisac aby srolowaniu towarzyszylo przesuniecie tekstu w memo w dol lub w gore tj jak wypelnic:
procedure TAboutBox.ScrollScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
begin
end;
Trzeba chyba skorzystac z ScrollPos i na tym konczy się moja skromna wiedza Czy moglby ktos wyjasnic zapis:
Memo.Perform(WM_VSCROLL,SB_LINEDOWN,0);
Memo.Perform(WM_VSCROLL,SB_LINEUP,0);
Wiem ze jest standardowo do memo scroll – ale co gdybm chcial sam taki stworzyc?
I na razie ostatni z problemow - StatusBar – Chciałbym aby w pasku stanu widnial panel które można kliknac i zmienić wartosc typu bolean – i aby zmieniala się zawartos panelu – tj z podswietlonej na nie podswietlona (identycznie jak np. w wordzie zmiana jezyka itp. Tyle ze tu tylko dwie wartosci – opcja katywna nie aktywna) Ile maksymalnie może być paneli? Nie wiem czemu ale mnie wysypuje się gdy tworze wiecej niż 4 :(
Dzieki z gory za cierpliwosc w czytaniu tego tesiemca i za wszelkie uwagi, wskazowki podpowiedzi :)