[Delphi] - Nietypowe zastosowanie Memo

0

Czy ktoś ma genialny pomysł na to żeby w Memo
nie można było edytować lini powyżej tej w której jest
kursor (coś jak w DOSie)
Męczę się za tymi OnKeyPress i Down ale zupełnie
nic mi z tego nie wychodzi :(
Może ktoś już coś takiego robił albo może jest taki komponent ?
(Aplikacja Konsolowa odpada bo nie wiem ja w takowej
pod dynamicznie stworzyn ClientSocket podpiąć procedurę
pod zdarzenie ClientSocket.OnRead)--__________________________________
Pozdrawiam...
piechnat

0

Moze to nie jest dokladnie to co chciales ale moze jakos ci pomoze :-) A wiec wrzucasz memo a pod nie edita. Ustawiasz odpowiednie ustawienia tak zeby wygladaly jednakowo no i komemdy by sie pisalo w edicie a pokazywalo by sie w memo :-) --pozdrawiam PEDROS {hello}

Encyklopedia was potrzebuje:
www.4programmers.net/delphi/help.php

Delphi 6 Personal.

0

Tak już mam, chciałem ulepszyć {glowa}
A nie wierz może tego jak w aplikacji konsolowej wsawić ClientSocket ? ;( --__________________________________
Pozdrawiam...
piechnat

0

piechnat napisał:
&gtA nie wierz może tego jak w aplikacji konsolowej wsawić ClientSocket ? ;(

Nie mam rozowo blekitnego pojecia :-)--pozdrawiam PEDROS {hello}

Encyklopedia was potrzebuje:
www.4programmers.net/delphi/help.php

Delphi 6 Personal.

0

piechnat napisał:
Czy ktoś ma genialny pomysł na to żeby w Memo
&gtnie można było edytować lini powyżej tej w której jest
&gtkursor (coś jak w DOSie)

wpadlem na cos takiego

zrob memo readonly i daj:

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin

if key=VK_UP then key:=0;
if (key=VK_BACK) or (key=VK_Left) then
begin
key:=0;
if (Length(Memo1.Text)&gt0) and (Memo1.Text[Length(Memo1.Text)]&lt&gt#10) then
begin
Memo1.SelStart:=Pred(Length(Memo1.Text));
Memo1.SelLength:=1;
Memo1.SelText:='';
end;
end;
Memo1.Text:=Memo1.Text+Chr(Key);
if key=VK_Return then Memo1.Text:=Memo1.Text+#10;
memo1.SelStart:=Length(memo1.Text);
end;

procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Memo1.SelStart:=Length(memo1.Text);
end;

o to chodzilo???

--
Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

0

&gto to chodzilo???

właśnie o taki genialny pomysł mi chodziło {brawo}
(jeden problem, dodaje tylko duże litery
ale to już sobie coś pokombinuje)
Wielkie dzięki pq, jak zawsze przychodzisz z pomocną dłonią :)

--


Pozdrawiam...
piechnat

0

&gtWielkie dzięki pq, jak zawsze przychodzisz z pomocną dłonią :)

cala przyjemnosc po mojej stronie. oczywsicie jeszcze troche trzeba dopracowac, np zeby shift i control nie zostawialy sladow, ale to juz pozostawiam Tobie.--Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

0

Mam jeszcze takie pytanko:

Jak przeScrollować memo na sam dół, jest jakieś
Memo.ScrollBy(x,y) ale jakieś dziwne rzeczy się
dzieją, a mi chodzi o taki efekt jak przy Memo.lines.add() :(--__________________________________
Pozdrawiam...
piechnat

0

&gtA nie wierz może tego jak w aplikacji konsolowej wsawić ClientSocket ? ;(

procedure read(tu parametry z procedury read normalnego socketa);
begin
..
end;

var
klient:TClientSocket;

klient:=TClientSocket.create;
...
klient.onread:=read;

Delphi 6

Pozdrówka

0

Zrobiłem tak:

program Project1;

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp;

procedure read(Sender: TObject; Socket: TCustomWinSocket);
begin
// ble ble ble
end;

var
klient : TClientSocket;

begin
klient := TClientSocket.create(nil);
klient.onread := read;
end.

w lini klient.onread := read; pojawia się błąd:
Incompatible types: 'method pointer and regular procedure'

Co teraz ?--__________________________________
Pozdrawiam...
piechnat

0

piechnat napisał:
&gtw lini klient.onread := read; pojawia się błąd:
&gtIncompatible types: 'method pointer and regular procedure'

Zonk polega na tym, że w Delphi wskaźnik do procedury ma 4 bajty, a do metody 8. Są to różne typy. W związku tym należało by umieścić read w obiekcie:

type
TObsluga = class
procedure Read; // z parametrami of koz
end;
var
Obsluga:=TObsluga.Create;
Client.OnRead:=Obsluga.Read;
...
...
Obsluga.Free
end.--Vogel [Delphi 6 PE]

Life is just a dream, you know...
[Cowboy Bebop]

0

Wybacz mi ale jakoś nie umiem tego poskładać :(
teraz mam tak:
program Project1;

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp;

type
TObsluga = class
procedure read(Sender: TObject; Socket: TCustomWinSocket);
end;

procedure read(Sender: TObject; Socket: TCustomWinSocket);
begin
// ble ble ble
end;

var
Obsluga : TObsluga;
Client : TClientSocket;
begin
Obsluga := TObsluga.Create;
Client := TClientSocket.create(nil);
Client.OnRead := Obsluga.read;
Obsluga.Free
end.

W linijce procedure read(Sender: TObject; Socket: TCustomWinSocket);
wyskakuje [Error] Project1.dpr(9): Unsatisfied forward or external declaration: 'TObsluga.read'--__________________________________
Pozdrawiam...
piechnat

0

procedure TObsluga.read(Sender: TObject; Socket: TCustomWinSocket);
begin
// ble ble ble
end;

Teraz powinno działać :D--Vogel [Delphi 6 PE]

Life is just a dream, you know...
[Cowboy Bebop]

0

&gtTeraz powinno działać :D
hura, zadziałało {brawo} --__________________________________
Pozdrawiam...
piechnat

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