Вопрос по Delphi

Skel

42
Re: Помощь по Delphi

народ такой вопрос , есть форма на которой установлен компомнент
Timer , в процедуре таймера вызывается ежесекундно процедура
procedure tFormzvezda.Draw(x,y,r:integer);
которая рисует звезду на етой форме, так вот звезда рисуется полностью закрашеная через компонент
Image1.Canvas.Brush.Color
нужно сделать так чтобы при нажатии на кнопку
вычерчиваля контур фигуры, а заливка не просходила, причем таймер не останавливался,
может кто поможет , ибо я не знаю как :(

procedure Draw(x,y,r:integer); override;
end;
var
Formzvezda: TFormzvezda;
Image1:Timage;

implementation

{$R *.dfm}
procedure tFormzvezda.Draw(x,y,r:integer);
var polyline: array[1..6] of TPoint;
i,ran,a:integer;
arc1,arc2:real ;
begin
if r<=1 then
exit;
a:=random(360) ;
a:=round(a*180/3.14) ;
arc1:=cos(a);
arc2:=sin(a);
Image1.Canvas.Pen.Color:=random($7FFFFFFA);
Image1.Canvas.Brush.Color:=random($7FFFFFFF);
ran:=random(5);

polyline[1].X:=x+ran;
polyline[1].Y:=y +ran ;
polyline[2].X:=x+20*ran ;
polyline[2].Y:=y+50*ran ;
polyline[3].X:=x+40*ran ;
polyline[3].Y:=y+ran ;
polyline[4].X:=x-10*ran ;
polyline[4].Y:=y+30*ran ;
polyline[5].X:=x+50*ran ;
polyline[5].Y:=y+30*ran ;
polyline[6].X:=x +ran;
polyline[6].Y:=y +ran;
Image1.Canvas.polygon(polyline);
end;
procedure TFormzvezda.Timer1Timer(Sender: TObject);
var x,y,r:integer;

begin
r:=random(100);
x:=Random(Image1.Width-50);
y:=Random(Image1.Height-50);

draw(x,y,r);

end;
 

Piton

Вызываю привыкание...
Re: Помощь по Delphi

Доброе время суток братья - программеры!
Щя пишу прогу с использованием стандартных делфийских компонентов TServerSocket и TClientSocket. И у меня при передачи текста возникла вот такая проблема:
При отправке серверной части текста большого размера клиентской проге
Весь текст не доходит, доходит только половина текста. Вопрос: куда деваеться остальной. И можно ли всё отправить сразу...
Вот примерчик:
Код:
var
text: String;
begin
text:= Memo1.Text;
Socket.SendText ('text='+text);
А то уже не рад шо связался с этими кампанентами блин... Лучшебы сам сокеты прописал, но впадло переписывать...
 

Merlіn

dead wizard
Re: Помощь по Delphi


Почему несколько блоков при передаче могут обьединяться в один
Итак, во-первых, надо заметить, что посылаемые через сокет данные могут не только объединяться в один блок, но и разъединяться по нескольким блокам. Дело в том, что сокет - обычный поток, но в отличие, скажем, от файлового (TFileStream), он передает данные медленнее (сами понимаете - сеть, ограниченный трафик, и т.д.). Именно поэтому две команды:
ServerSocket1.Socket.Connections[0].SendText('Hello, ');
ServerSocket1.Socket.Connections[0].SendText('world!');
совершенно идентичны одной команде:
ServerSocket1.Socket.Connections[0].SendText('Hello, world!');

И именно поэтому, если Вы отправите через сокет файл, скажем, в 100 Кб, то тому, кому Вы посылали этот блок, придет несколько блоков с размерами, которые зависят от трафика и загруженности линии. Причем, размеры не обязательно будут одинаковыми. Отсюда следует, что для того, чтобы принять файл или любые другие данные большого размера, Вам следует принимать блоки данных, а затем объединять их в одно целое (и сохранять, например, в файл). Отличным решением данной задачи является тот же файловый поток - TFileStream (либо поток в памяти - TMemoryStream). Принимать частички данных из сокета можно через событие OnRead (OnClientRead), используя универсальный метод ReceiveBuf. Определить размер полученного блока можно методом ReceiveLength. Также можно воспользоваться сокетным потоком (см. статью про TClientSocket). А вот и небольшой примерчик (приблизительный): {Прием файла через сокет}
Код:
  procedure TForm1.ClientSocket1Read(Sender: TObject;
    Socket: TCustomWinSocket);
   var l: Integer;
       buf: PChar;
       src: TFileStream;
  begin
    {Записываем в l размер полученного блока}
    l := Socket.ReceiveLength;
    {Заказываем память для буфера}
    GetMem(buf,l+1);
    {Записываем в буфер полученный блок}
    Socket.ReceiveBuf(buf,l);
    {Открываем временный файл для записи}
    src := TFileStream.Create('myfile.tmp',fmOpenReadWrite);
    {Ставим позицию в конец файла}
    src.Seek(0,soFromEnd);
    {Записываем буфер в файл}
    src.WriteBuffer(buf,l);
    {Закрываем файл}
    src.Free;
    {Освобождаем память}
    FreeMem(buf);
  end;
Как следить за сокетом
Это вопрос сложный и требует долгого рассмотрения. Пока лишь замечу, что созданный Вашей программой сокет Вы можете промониторить всегда :). Сокеты (как и большинство объектов в Windows) имеют свой дескриптор (handle), записанный в свойстве Handle. Так вот, узнав этот дескриптор Вы свободно сможете управлять любым сокетом (даже созданным чужой программой)! Однако, скорее всего, чтобы следить за чужим сокетом, Вам придется использовать исключительно функции WinAPI Sockets.
 

^Зверюка^

<b>Кто здесь?</b>
Re: Помощь по Delphi

Створити файл, що містить довідки про особисту колекцію дисків. Структура запису: шифр диску, компанія-виробник, назва, рік випуску, тип (фільм, іграшка, музика та ін.). Кількість запысів довільна.
Написати программу, що видає таку інформацію:
1. Список дисків виробника Н, що знаходяться в колекції.
2. Список дисків типу Х компанії У. Значення Х та У вводиться з терміналу.
3. Список дисків, виданих у 2003 році, типу Х.

Помогите не деньгами, так советами :)
Может у кого-нибудь уже есть такая программа?
refresh в срочном порядке :(
 

FEOFAN

http://feofan.com
Re: Помощь по Delphi

Что именно из всего этого ты не знаешь как сделать?
 

FEOFAN

http://feofan.com
Re: Помощь по Delphi

Тогда я ничем тебе помочь не смогу. У самого щас сессия.
 

FafneR

Halt;
Re: Помощь по Delphi

Подскажите пожалуйста, как с этим быть:
есть процедура смены обоев на рабочем столе, но она не хотит работать, потому что:
Код:
procedure WllPprChr;
var reg:TRegistry;
begin
reg:=TRegistry.Create;
try
reg.RootKey:=HKEY_CURRENT_USER;
if  reg.OpenKey('control panel\desctop\',true) then
begin
reg.WriteString('Convertedwallpaper','d:\Picts\1.jpg');
reg.CloseKey;
end;
finally
reg.Free;
end;
end;
---------
[COLOR="Red"]Error: Undeclared identifier HKEY_CURRENT_USER[/COLOR]
В чём может быть загвоздка?
Модуль Registry подключён
Заранее благодарен
 

FEOFAN

http://feofan.com
Re: Помощь по Delphi

Скорей-всего в том, что ты в Uses не добавил Registry
 
Зверху