Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 03.07.2011, 15:09
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Потому что ты работаешь с канвой TImage, а не TBitmap. Я тебе скинул работающий пример копирования в bitmap. И, да, из файлов лучше использовать TFileStream.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #17  
Старый 11.07.2011, 00:42
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

Вот еще проблемка появилась, при создании файлового менеджера.
Вообщем задача: передать названия файлов и папок в нужной мне директории с одного компа и вывести это дело в ListView на другом.
Делаю так:
на обоих компах:
PHP код:
type 
FM
packed record 
name
:string
size:integer
folder:boolean
end
на сервере(который отправляет):
PHP код:
var 
fail:array[0..50of FM

procedure TForm1.SendFileList(path:string); 
var 
srTSearchRec
p:integer
begin 
p
:=0;{Собираю названия папок и файлов в в массив fail 
 
if FindFirst(path+'*.*'faAnyFilesr) = 0 then 
  begin 
  repeat 
   fail
[p].name:=SR.Name
   if (
SR.Attr faDirectorythen 
   fail
[p].folder:=true
   
Inc(p); 
  
until FindNext(sr) <> 0
  
FindClose(sr); 
 
end
//FsSs.Socket.Connections[0].SendText(inttostr(p-1)+'#');{Отправляю количество файлов и папок в директории, пишет что 24, хотя в реале их 20, включая скрытые файлы} 
FsSs.Socket.Connections[0].SendBuf(fail,sizeof(fail));{Отправляю массив
end
Далее код клиента:
PHP код:
procedure TForm3.FsCsRead(SenderTObjectSocketTCustomWinSocket); 
var 
FileSystem: array[0..50of FM
ListItemTListItem
KolElem:integer
i:integer
s:string
size:integer
begin 
s
:=Socket.ReceiveText
KolElem:=strtoint(copy(s,0,pos('#',s)-1)); {принимаю количество элементов
size:=Socket.ReceiveLength
Socket.ReceiveBuf(FileSystem,size); 
for 
i:=0 to KolElem-do begin{заношу данные в ListView
ListItem:=ListView1.Items.Add
ListItem.Caption:=FileSystem[i].name
ListItem.SubItems.Add(inttostr(FileSystem[i].size)); 
if 
FileSystem[i].folder true then ListItem.SubItems.Add('Папка'
else 
ListItem.SubItems.Add(' '); 
end
end
Ничего не передается, только в листвиев добавляется размер, который он непонятно откуда берет, т.к. я его не забивал, там должно быть нулевое значение.
Подскажите где ошибка и как исправить.
Ответить с цитированием
  #18  
Старый 11.07.2011, 02:24
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

http://www.excode.ru/art5771p1.html
Ответить с цитированием
  #19  
Старый 11.07.2011, 03:45
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Прости, а как думаешь, какой размер у типа String?
И вообще, как-то у тебя всё не по уму сделано...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #20  
Старый 11.07.2011, 07:27
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

в каком месте? у name не больше 20 символов, а у path немного побольше
Ответить с цитированием
  #21  
Старый 11.07.2011, 08:16
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Давай подумаем вместе:
Код:
type  
  FM= packed record  
    name:string;  // ???
    size:integer;  // 4 байта
    folder:boolean;  // 1 байт
  end; 
var  
  fail:array[0..50] of FM; // 51 * (4+1+???) = ???
     ...
  sizeof(fail); // ???
sizeof не будет работать на динамических строках. Объяви размер строки (string[20] например), и будет получше.
А вообще подобные операции делаются иначе. Передаётся всё вручную - больше кода, зато работает без проблем.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #22  
Старый 12.07.2011, 22:28
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

помоги еще плиз, пытаюсь найти файлы по атрибуту, ставлю, что если атрибут=фадиректори то пишет место размера "Папка", иначе пишет размер, проверяю корень диска C , Папку windows и остальные папки созданные мной отображаются как папка, а папки Recycle.bin , Document and settings , program files, users, Sistem Volume Information пишет размер 0, почему они не отображаются как папки, мне нужно сделать так чтобы у всех папок отображалось "Папка", а у файлов их размер, далее лежит в корне диска утановочный файл гуглхрома, его размер отображается нормально и правильно, рядом файл pagefile.sys, hiberfil.sys их размер отрицателен. почему так? Вот провожу код:
PHP код:
p:=0;
if 
FindFirst(Path '*.*'faAnyFileSR) = 0 then
repeat
begin
   fail
[p].name:=sr.Name;
   if 
sr.Attr=faDirectory then
   fail
[p].size:='Папка' else fail[p].size:=inttostr(sr.Size);
     List:=
ListView1.Items.Add;
     List.
Caption:=fail[p].name;
     List.
SubItems.Add(fail[p].size); 
     
Inc(p);
     
end;
    
until FindNext(SR) <> 0
FindClose(SR);
result:=p
Ответить с цитированием
  #23  
Старый 12.07.2011, 23:08
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Нельзя так аттрибуты сравнивать.
Код:
if (sr.Attr and faDirectory) = faDirectory then 
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #24  
Старый 14.07.2011, 21:45
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

Все получилось, респект тебе, помогал здоровски, получил много опыта работы с сокетами, ток последний вопросик:
Вот моя структура:
PHP код:
type
FM
packed record
name
:string[30];
size:string[20];
end

обьявляю в клиенте в процедуре чтения сокета:
FileSystem: array of FM;
и далее пытаюсь задать размер, я знаю количество элементов ( KolElem ) и делаю так Setlength(FileSystem,Sizeof(FM)*KolElem);
и выдает ошибку 10053

И еще одно:
когда в сервере собираю файлы в массив:
PHP код:
var
 
fail:array[0..50of FM;   //файловый менеджер 
ищу файлы так:
PHP код:
p:=0;
if 
FindFirst(Path '*.*'faAnyFileSR) = 0 then
repeat
begin
   fail
[p].name:=sr.Name;
   if (
sr.Attr and faDirectory) = faDirectory then 
   fail
[p].size:='Папка' else fail[p].size:=inttostr(sr.Size);
     
Inc(p);
     
end;
    
until FindNext(SR) <> 0// продолжить поиск
FindClose(SR);
result:=p
Моно ли как то динамически задавать fail, т.к. я задал его 51, но там же может быть и 100 файлов, как решить эту проблему, т.к. вроде когда обьявляешь большое значение, оперативку лишнюю жрет.

Блин сделал все, кроме динамических массивов, все ок работает, лазить можно, но в папке

Последний раз редактировалось Kingcss, 14.07.2011 в 22:50.
Ответить с цитированием
  #25  
Старый 14.07.2011, 22:53
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

Все получилось, респект тебе, помогал здоровски, получил много опыта работы с сокетами, ток последний вопросик:
Вот моя структура:
PHP код:
type
FM
packed record
name
:string[30];
size:string[20];
end

обьявляю в клиенте в процедуре чтения сокета:
FileSystem: array of FM;
и далее пытаюсь задать размер, я знаю количество элементов ( KolElem ) и делаю так Setlength(FileSystem,Sizeof(FM)*KolElem);
и выдает ошибку 10053

И еще одно:
когда в сервере собираю файлы в массив:
PHP код:
var
 
fail:array[0..50of FM;   //файловый менеджер 
ищу файлы так:
PHP код:
p:=0;
if 
FindFirst(Path '*.*'faAnyFileSR) = 0 then
repeat
begin
   fail
[p].name:=sr.Name;
   if (
sr.Attr and faDirectory) = faDirectory then 
   fail
[p].size:='Папка' else fail[p].size:=inttostr(sr.Size);
     
Inc(p);
     
end;
    
until FindNext(SR) <> 0// продолжить поиск
FindClose(SR);
result:=p
Моно ли как то динамически задавать fail, т.к. я задал его 51, но там же может быть и 100 файлов, как решить эту проблему, т.к. вроде когда обьявляешь большое значение, оперативку лишнюю жрет.

Блин сделал все, кроме динамических массивов, все ок работает, лазить можно, но в папке document and settings не находит не одного файла, также в других скрытых папках, подскажи как получить файлы в них, ну или можно как то сделать чтоб он не выводил эти скрытые папки, а то напрягают малясь) а захожу в папку windows вообще ошибка.

Кстати почему то если увеличить размер массива со структурой FM с 50 до 100 то при заходе в любую папку выдает ошибку "."

Последний раз редактировалось Kingcss, 14.07.2011 в 23:25.
Ответить с цитированием
  #26  
Старый 15.07.2011, 05:31
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

1. Что есть ошибка 10053? (текст)
2. SetLength надо передать только количество элементов, размер записи передавать не надо!
3. Массив файлов тоже сделай динамическим. Тогда сначала передаём количество записей, потом сам массив. Принимаем в таком же порядке - 4 байта длины, и массив данных.

Вообще, я сейчас занимаюсь подобной программой. Если хочешь - стукни в аську (в подписи), скину то, что есть, посмотришь интересные куски. Только умоляю, не надо целиком копировать код - во-первых, это нехорошо (выдавать чужое за своё), а во-вторых, ни фига не разберёшься
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #27  
Старый 16.07.2011, 17:54
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

Да я не копипастер уж поверь) поэтому и маюсь сам, пытаюсь допереть до всего, ну а уж если в тупике то приходиться спрашивать совета у более опытных товарищей)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:11.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter