szerokosc-wysokosc formy w dana strone ?

0

w jaki sposob mozna forme powiekszyc, albo pomniejszyc w dana strone ? chodzi o to by np. po kliknieciu w button lewa "sciana" poszla o 100 w lewo. czyli calosc nie mieniajac swego polozenia, ani ort!, ani prawa sciana powiekszyla sie o 100... tylko jak ?

ojj zapomnialal :) jeszcze jak w memo1 zrobic, aby bylo widac caly czas dolny tekst ? bo co chwile sie dopisuje, ale memo pokazuje sam poczatek... jak ustawic widok dolny ?

0

służę pomocą:] 9161291

0

wole odpowiedz na forum :) aby byla dostepna takze dla wszystkich :)

0

I bardzo dobrze. Co to jest, biuro matrymonialne, że gg podajesz spec?

Jak chcesz rozciągnąć w prawo albo w dół, to nie ma problemu, prawda?

// prawy
Form1.Width := Form1.Width + 40;
// dolny
Form1.Height := Form1.Height + 50;

Jak chcesz rozciągnąć lewy albo górny brzeg, to robisz podobnie, ale dodatkowo przesuwasz formę:

// lewy
Form1.Width := Form1.Width + 70;
Form1.Left := Form1.Left - 70;
// górny:
Form1.Top := Form1.Top -45;
Form1.Height := Form1.Height + 45;

A przewijanie za sam dół, to zdaje się, że robisz tak:

RichEdit1.Lines.Add('Dodałeś tę linię, chcesz, żeby od razu była widoczna'+IntToStr(random(1000)));
// więc dodajesz coś takiego
RichEdit1.Perform(EM_SCROLLCARET, 0, 0);
0

dziekuje Ranides za dobre checi :) ale to rozciaganie lewego i górnego nie chodzi :( ten kodzik rozciaga prawe albo dolne i tylko dodatkowo <ort>przesówa </ort>mi caly program w lewo lub w prawo... a lewa strona programu nadal nie jest nawet ruszona :(

0

Wiolkaaa, bo to tak działa. Left, Top to współrzędne narożnika okna, czyli w lewo i w górę formy sie nie rozciąga, tylko przesuwa, potem zwiększa się szerokość/wysokość czyli rozciąga się prawą stronę. Patrzę na kod Ranidesa i musi działać poprawnie.

P.S. Spec_team, widziałem kilka Twoich "optymalnych" rozwiązań. Zaiste, niektóre byly "fachowe".

0

no tak :) mozliwe, ze dziala poprawnie :) tylko mam pare sporo roznych obiektów, ktore sa w programie i potrzebuje miejsca po lewej ich stronie... i dlatego potrzebowalam rozciagnac lewa, poniewaz nie moge przesuwać przystkich po kolei :) i w tym moj problem... :)

0

hmmm :) tutaj jest chyba troche na odwrót :)

memo1.Perform(EM_SCROLLCARET, 0, 0);

pokazuje zawsze poczatek(góre) zawartosci memo :P a ja potrzebuje, aby pokazało koniec(dół) zawartosci memo :)

0

Każdy komponent ma Left i Top. Dla kontrolek Left, top formy to 0,0, czyli jeżeli potrzebujesz miejsca na formie po lewej to to co pisał Ranides i to samo dla wszystkich kontrolek, czyli: przesuwasz formę w lewo/do góry, zwiększasz szer/wys o wartość przesunięcia i wszystkie kontrolki przesuwasz w prawo/dół o wartość przesunięcia formy.

Sorka za zamotanie wypowiedzi.

0

hihihi :) tak troszke poplatane, ale zrozumiale :) tak czy inaczej bedzie trzeba przesuwać wszystko :P hmmm... a co do memo1 to jak mam wwpisac ? :)

0

u mnie

RichEdit1.Perform(EM_SCROLLCARET, 0, 0);

nie działa. Czy ktoś wie jak zrealizować scrolowanie tak by była widoczna konkretna linijka (np. ta z kursorem)
A tak poza tym czy ktoś może wie jak uzyskać info na temat widoczności poszczególnych linii w Trichedit czy Tmemo?

0

EM_SCROLLCARET w takiej formie jest dość perfidne ;) Tzn. przewija na sam dół, jeśli jest wywołane tuż po instrukcji dodania wiersza ;) Dokładniej:

RichEdit1.Perform(EM_SCROLLCARET, 0, 0);

przewija memo tak, żeby kursor tekstowy był widoczny. Czyli najlepiej najpierw ustawić kursor za pomocą SelStart, czy czegoś innego, a później ten kod wywoływać.

Co do widocznych wierszy, to:

top := SendMessage(memo.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);

zwraca numer pierwszej widocznej linii (tej na samej górze).

Co do przesuwania wszystkich komponentów, do "rozciągającego" kodu dodajesz dwie linie, coby wszystko przesunąć za jednym zamachem:

for i:=0 to form1.ControlCount-1 do
  form1.Controls[i].Left := form1.Controls[i].Left+100;
0

hmmm :) tylko jak takie cos zrobic... :) dodaje caly czas linie do memo (od dolu dopisuje) a kursor i tak jest zawsze przy pierwszej (górnej) lini... i w ten sposob w ogóle sie nie rusza i nie widze co dopisuje... :P nie wiem jak zrobic, aby zawsze był dół widoczny.... :(

0

moze to ma jakis wplyw, ze zawartosc memo jest przesylana client-server z drugego memo ? i dlatego zawsze jest u góry ?

0

if (Memo1.Height <= (Memo1.Lines.Count-1) * Memo1.Font.Height) then
Memo1.ScrollBy(0, (Memo1.Lines.Count-1) * Memo1.Font.Height);

0

dziekuje :) juz chyba wiem co mi dolega :) mam tylko prosbe :) w jaki sposob mozna odczytac ostatnią linie w memo ? :)

0

ok :) zrobilam :) juz wszystko mam :) dziekuje za pomoc i odpowiedzi :)

pozdrawiam :)
Wiola :)

0

ojjj chyba nie do konca wszystko mam :P mam jeszcze mala prosbe :) w jaki sposob mozna piszac sobie cos w memo1 po przejsciu do nastepnej lini, poprzednia kopiuje sie do memo2 ?

0

?? :) Prosze pomozcie :)

0

wie ktos ? :)

0

misiu puchaty:) pobierasz bieżący numer wiersza:) memo1.CaretPos.y :) Wykrywasz przejście do nowej linii, wykrywając wciśnięcie entera :) w OnKeyPressed sprawdzasz Key=#13 :) Pobierać tekst z konkretnej linii umiesz :) Dodawać tekst do drugiego memo chyba też :) pomyśl więc sam, jak to połączyć :)

pobiłem jej rekord w ilości emotek, pobiłem? :)

0

hmmm :) dzieki za inf :) tylko u mnie problem jest taki, ze nie przechodze do nowej lini za pomoca entera :) tylko raczej dopisuje sie automatycznie, albo za pomoca buttona :) i w tym maly problem, aby samo po przejsciu w nowa linie poprzednia przeszla do memo2 :) niestety nie umie tego zautomatyzować dlatego pisze tutaj :) z prosba o pomoc :)

P.S.
sorry, ze tak mecze, ale nie moge sobie z tym sama poradzic :) a bardzo bardzo potrzebuje takie cos :)

0

48x :-) (bez Ranidesa) nowy rekord forum. [green]

0

aaa tak samo te buzki wychodza :) ale odpowiedzi na moj maly problem nie mam... prosze pomozcie mi :)

0

tak na marginesie skoro już zacząłem ten podrzędny temat w tym wątku; w kwestii

TRichEdit98.Perform(EM_SCROLLCARET, 0, 0);

które to u mnie nie chciało działać. Otóż ta instrukcja działa w następującym połączeniu:

{1}RichEdit981.SelStart:=RichEdit981.SelStart;// selstart musi być chociaż "ruszone" w taki oto banalny sposób by w ogóle doszło do scrolowania poniższą instrukcją
{2}RichEdit981.Perform(EM_SCROLLCARET, 0, 0);
{3}RichEdit981.SetFocus;// bez tego też nie widać efektu instrukcji {2} 

Czy ktoś zaobserwowal u siebie podobne dziwadełko?
Pozdrawiam:)

0

tak :) to mojego problemu nie dotyczy :) nie rozwiazujeee :(

0

@Marmar:
dzięki za przeanalizowanie tego dogłębne. Ten kod z FAQ skopiowałem, na którym zawsze mogłem polegać, więc nie analizowałem tego tak dogłębnie.

@wiolkaaa:
nie mam konceptu tak na poczekaniu. Pokombinuj z OnChange. Rozwiązanie prymitywne to: zapamiętywanie ilości linii i numeru bieżącej linii. Jeśli i jedno i drugie zwiększyło się o 1, to znaczy, że najprawdopodobniej dodana została nowa linia o numerze CaretPos.y-1

btw: kiedyś Johny_Bravo napisał, że 90% dziewcząt tutaj naprawdę nie jest dziewczynami. Zgadzam się. Jak na razie tylko Aimee zwróciła mi uwagę, że w odpowiedziach do dziewczyn mieszam tryb żeński i męski. Dziewczyna taki zgrzyt natychmiast wyłapuje. Facet udający dziewczynę nie.

0

hmmm :) tylko w jaki sposob napisac warunek (if) ze sie zmienila wartosc ? w onchange ? :) bo chyba nie bardzo sie da :P

0

dwie zmienne globalne:

var lines,row:integer

w OnCreate formy:

lines := Memo1.Lines.Count;
row := Memo1.CaretPos.y;

w OnChange:

if (lines+1 = Memo1.Lines.Count) and (row+1 = Memo1.CaretPos.y) then begin
    // chyba dodano nową linię
    Memo2.Lines.Add(Memo1.Lines[row];
    end;
lines := Memo1.Lines.Count;
row := Memo1.CaretPos.y;

Ale to będzie działać tylko wtedy, kiedy Memo1 nie jest zmieniane przez użytkownika, a ty dodajesz do Memo1 tylko po jednej linii, a nie kilka naraz. Ogólnie lepiej jest sprawdzać SelStart, żeby wiedzieć, skąd dokąd się zmienił tekst. A najlepiej po prostu kopiować po każdej zmianie tekst z Memo1 do Memo2. Tak na mój gust. Ale może ktoś ma coś lepszego, mi się myśleć nad tym nie chce :]

0

tak ladnie dziala :) jezli zdania sa dodawane cale przez np button czy cos takiego :) ale gdy np. bedziemy cos pisac i jestesmy w nowej lini to nie kopiuje sie... :( a wlasnie na tym mi zalezy i z tym mam problem :)

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