Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi

Модерирует : ShIvADeSt

ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

   

Commandos



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста как в Delphi:
1. Выключить, перезагрузить компьютер и сменить пользователя в WINDOWS XP
2. Как можно скопировать файл и отображать процесс копирования в ProgressBar'е

Всего записей: 71 | Зарегистр. 17-08-2002 | Отправлено: 07:38 10-08-2004
c0r0ner



злобный доктор
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1. RTFM ExitWindowsEx(), в MSDNе все подробно описано.
2.,берем хелп по делфи (стандартный встроеный) и находим
Код:
var
 
  FromF, ToF: file;
  NumRead, NumWritten: Integer;
  Buf: array[1..2048] of Char;
begin
  if OpenDialog1.Execute then     { Display Open dialog box }
  begin
    AssignFile(FromF, OpenDialog1.FileName);
    Reset(FromF, 1); { Record size = 1 }
    if SaveDialog1.Execute then      { Display Save dialog box}
    begin
      AssignFile(ToF, SaveDialog1.FileName); { Open output file }
 
      Rewrite(ToF, 1); { Record size = 1 }
      Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF))
        + ' bytes...');
      repeat
        BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
        BlockWrite(ToF, Buf, NumRead, NumWritten);
      until (NumRead = 0) or (NumWritten <> NumRead);
      CloseFile(FromF);
      CloseFile(ToF);
    end;
  end;
end;



----------
Я - сущий ангел. Только крылья в стирке, а нимб на подзарядке.

Всего записей: 742 | Зарегистр. 09-12-2001 | Отправлено: 11:49 10-08-2004
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
c0r0ner
в цикл так-то надо воткнуть присвоение ПБ значение счетчика и processmessages либо refresh

----------
...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 15:26 10-08-2004
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А еще красивее все это выполнять в отдельном потоке чтобы быстрее работало, без ProcessMessages.

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 13:36 11-08-2004
deadsy



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
и работу с файлом сделать в классе TFileStream

Всего записей: 44 | Зарегистр. 05-08-2004 | Отправлено: 14:31 11-08-2004
Giperon

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Раз уж тема называется вопросы по Delphi тоже задам вопрос. Есть ли в Delphi что-то похожее на STL в C++. Меня интересует именно входит ли это в стандартную поставку или нет. То что дополнительно можно установить все что угодно это понятно.

Всего записей: 51 | Зарегистр. 01-11-2003 | Отправлено: 15:23 17-08-2004
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Giperon
скорее всего - только от сторонних разработчиков. собственно, как и STL

----------
...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 11:59 18-08-2004
LeXB



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Выключить компьютер в ХР без  проблем
 
    OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,ph);
    LookupPrivilegeValue(Nil,'SeShutdownPrivilege',tp.Privileges[0].Luid);
    tp.PrivilegeCount:=1;
    tp.Privileges[0].Attributes:=2;
    AdjustTokenPrivileges(ph,FALSE,tp,SizeOf(prevst),prevst,rl);
    ExitWindowsEx(EWX_POWEROFF, 0);
 
перегрузить ето меняешь параметр EWX_POWEROFF на EWX_REBOOT,
log off на EWX_LOGOF.
 
и подскажите как мне вывести компьютер в состояние Hibernate, ос - ХР.  
 
function SetSuspendState: Integer; stdcall; external 'powrprof.dll'; - при включении выдает access violation
 
Добавлено
сорри забыл
 
var
ph:THandle;
tp,prevst:TTokenPrivileges;
rl:DWORD;

Всего записей: 55 | Зарегистр. 05-03-2004 | Отправлено: 16:23 18-08-2004
Paha_W



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите пожалуйста решение нескольких вопросов:
Есть компоненты Imag, Label и Button, на Image я делаю событие OnClick  и в процедуре пишу

Цитата:
procedure TForm1.Image1Click(Sender: TObject);
begin
Image1.Canvas.Brush.Color:=clBlue;
Image1.Canvas.FloodFill(10,10,clBlue, fsBorder );
end;end.

Вопрос: как мне написать процедуру на Button, чтобы при клике на Image и потом на Button в Label мне выводило сообщение и если клика нет на Image  другое сообщение.
Вопрос_1: Как всё это повторить для нескольких Image. Например, Я нажимаю Image1, потом Image2, потом Button в Label1 выводило значение 'Два'. При нажатии на три Image занчение 'Три'!!!
Заранее примного Благодарен!!!

Всего записей: 440 | Зарегистр. 26-05-2004 | Отправлено: 06:38 17-09-2004
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Paha_W
По первоему вопросу, заводишь переменную логиченского типа boolean Н-р Flag, вначале она ложь, в обработчике события на клик по имагу пишешь Flag:=True;
потом в обработчике события нажатия кнопки пишешь условие, if Flag then Label1.Caption:='Pressed' else Label1.Caption:='Not pressed'
Для вывода числа нажатий на имаги вводишь еще одну переменную, которую увеличиваешь при кликах.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 07:39 17-09-2004
Paha_W



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Еще Вопрос:
Все практически тоже (смотреть выше), но Image уже 7 стоят как одно значение у электронных часов.  
   _
  |_|
  |_|
                                 
Я сам выбираю кликом какой Image загорится, но не меньше двух, и потом нажимаю Button и Label выводится результат к какому числу больше подходит!!!
 
Заранее примного Благодарен!!!
 
ShIvADeSt
Спасибо!!!

Всего записей: 440 | Зарегистр. 26-05-2004 | Отправлено: 09:53 17-09-2004
AB2000



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может это совсем простой вопрос.  
Но все же.  
 
Со всеми моими проектами приходится таскать файл qtintf70.dll.  
 
Можно ли от него избавиться. Что для этого надо.

Всего записей: 61 | Зарегистр. 28-04-2004 | Отправлено: 20:19 21-10-2004
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Со всеми моими проектами приходится таскать файл qtintf70.dll.

Первый способ, создать файл ресурсов раз и на всегда, туда включить эту бибилотеку и при запуске приложения распаковывать ее, после работы удалять. Этот ресурсник подключать ко всем проектам. Второй способ, найти альтернативный компонент, который обходится без библиотек.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:40 22-10-2004
Z MeZe



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вроде жива тема . Кроме как здесь, не нашел пока где спросить:
Интересует такая вещь:
Нужно выудить уникальный номер CD-диска
Помогите.., кто может с этим заморачивался.
...
Немного предыстории, чтобы было понятнее и не было пустословия:
Выцепленный lpVolumeSerialNumber из GetVolumeInformation не дает уникальный номер, точнее он дает номер, но при каждой перезаписи (продолжении мультисессии и т.д.) он становится другим (ПРОВЕРЕНО), т.е. при записи проги на диск нельзя узнать КАКОЙ БУДЕТ СЕРИЙНИК, а при банальном копировании образов дисков на втором он становится тем же (ТОЖЕ ПРОВЕРЕНО). Это, наверное больше похоже на контрольную сумму, хотя про это нигде не сказано.
По поводу уникального... В комплекте Nero есть программулинка CDSpeed.exe (по умолчанию ...\Program Files\Ahead\Nero Toolkit), так вот там есть такая вещь: Дополнительно|Инф. о диске:
- - - - - - - как пример - - - - - - - - -
Manufacturer        : Mitsubishi
Code                : 97m34s23f
Disc Type          : HighSpeed CD-RW
Usage              : General
Recording Layer    : Phase Change
Recording Speed    : 4 X - 10 X
Capacity            : 79:59.74
                      703 MB
Additional Capacity : n/a
Overburn Capacity  : не проверено
---------------------------------------------
Так вот тот производитель (Manufacturer) и код (Code) и являются как раз уникальными (ТОЖЕ ПРОВЕРЕНО) и при записи, и при перезаписи эти параметры НЕ МЕНЯЮТСЯ и у каждого диска они свои.

А как это выцепить средствами Дельфи (ну или как то еще, но чтобы Дельфями можно было это дело обработать)...
Заморачиваюсь сейчас по этому поводу.
Заранее спасибо.
 
Добавлено
Немного уточню вопрос. Скажем, нужна "защита от дурака", т.е.:
1. диск в CD-приводе, работает.
2. достали СD - программа ругается (это можно и проще, знаю).
3. скопировали на другую болванку (это они умеют делать) - не работает, ругается.
4. успокоились, приняли все как есть и заказали еще один диск.
Если есть более простые решения - подскажите, буду благодарен.
Только желательно более конкретную инфу (код будет просто идеален ), потому что в общих и чуть конкретных чертах проблема ясна, не понятен принцип реализации.
 
Добавлено
Paha_W

Цитата:
  _  
  |_|  
  |_|

 
А если, к примеру, ты вот так накликаешь:  
_
| |
, с какой цифрой ассоциировать 9 или 0?
...или так
| |
 _
, с какой ближе 6 или 0?
Или надо при таком раскладе на лабел выводить, к примеру:"9, 0";"6, 0" соответственно.
И это так, что на скорую руку в голову пришло, а там, я думаю, достаточно логических заморочек.
Тута, таксссазать, больше логики, нежели программирования.
 
 
 
Добавлено
Paha_W
ну ты из закарючек моих понял, что я имею в виду?

Всего записей: 455 | Зарегистр. 09-02-2004 | Отправлено: 02:14 23-10-2004
Paha_W



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Если так  

Цитата:
А если, к примеру, ты вот так накликаешь:  
 _  
| |, с какой цифрой ассоциировать 9 или 0?  
 

то тогда программа выбирает наименьшее число значение 0, аналогично и в других случаях. (вообще-то она смотрит по количеству сегментов, сколько минимум не хватает до той или иной цифры и выводит его). Ну а если такие ситуации то она берет минимальный.
Я сделал для одного числа и у меня все получается. теперь я пытаюсь делать для нескольких чисел.

Цитата:
ли надо при таком раскладе на лабел выводить, к примеру:"9, 0";"6, 0" соответственно.

Да у меня была такая задумка что бы все похожие выводила, но что не получается. и я сделал, чтобы она выводила только один результат.

Цитата:
Добавлено  
Paha_W  
ну ты из закарючек моих понял, что я имею в виду?
, да понял!
Я сделал для одного числа и у меня все получается. теперь я пытаюсь делать для нескольких чисел.

Всего записей: 440 | Зарегистр. 26-05-2004 | Отправлено: 07:25 25-10-2004
Z MeZe



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Работающая хрень, создавай проект и меняй весь файл Unit1
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;
const
  FigureArr: array [0..9,0..6] of boolean =
   ((true ,true ,true ,true ,true ,true ,false),
    (false,true ,true ,false,false,false,false),
    (true ,true ,false,true ,true ,false,true ),
    (true ,true ,true ,true ,false,false,true ),
    (false,true ,true ,false,false,true ,true ),
    (true ,false,true ,true ,false,true ,true ),
    (true ,false,true ,true ,true ,true ,true ),
    (true ,true ,true ,false,false,false,false),
    (true ,true ,true ,true ,true ,true ,true ),
    (true ,true ,true ,true ,false,true ,true ));
// массив с начальными данными (10 цифр, 7 позиций)
type
  TForm1 = class(TForm)
    Image0: TImage;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    Label1: TLabel;
    BtnRun: TButton;
    procedure Image0Click(Sender: TObject);
    procedure BtnRunClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  CheckArr: array [0..6] of boolean; // массив для проверки нажатых имиджей
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var i : byte;
begin
 for i:=0 to 6 do
  with (findcomponent('Image'+IntToStr(i))  as TImage) do begin
    Canvas.Brush.Color:=clGray;  
    Canvas.FillRect(Rect(0,0,Width,Height))
  end
// делаем все имиджи серые.
end;
procedure TForm1.Image0Click(Sender: TObject);
begin
 with (Sender as TImage) do begin
   CheckArr[Tag]:=not CheckArr[Tag];
  if CheckArr[Tag] then Canvas.brush.Color:=clRed
                   else Canvas.brush.Color:=clGray;
   Canvas.FillRect(Rect(0,0,Width,Height))
 end
// нажали на серый - стал красным (активным), нажали на красный - стал
// серый (неактивный)
end;
procedure TForm1.BtnRunClick(Sender: TObject);
var j, WhichFigure, Max : byte;
    i, ThisStep: ShortInt;
    FlagBool, FindFigureBool : boolean;
begin
  Max:=0;
  i:=-1;
 while (i<9)and (not FindFigureBool) do begin // пока не кончатся или не найдет цифру
   inc(i);
   ThisStep:=-1;
   FlagBool:=false;
  for j:=0 to 6 do
   if (FigureArr[i,j] = CheckArr[j]) then Inc(ThisStep)  
                                     else FlagBool:=true;
// если началные данные совпадают с нажатыми, увеличиваем "похожесть" на 1,
  if not FlagBool then begin
                         FindFigureBool:=true;
                         WhichFigure:=i
                       end
// если не изменена FlagBool, то найдена "100% похожесть" на цифру
                  else if ThisStep>Max then begin
                                              Max:=ThisStep;
                                              WhichFigure:=i
                                            end
// если "похожесть на цифру" этого шага больше, чем предыдущего, Max:=ThisStep
// WhichFigure присваивается цифры этого шага
 end;
  Label1.Caption:=IntToStr(WhichFigure)
end;
end.
-----------------------------------------------------------
На форме (если непонятно) от Image0 до Image6 (верхний - Image0, далее по час.
стрелке до | Image5, Image6 - средний)
Свойства Tag у каждого имиджа соответственно 0,1,2,3,4,5,6,
События OnClick у КАЖДОГО имиджа - Image0Click
Кнопка BtnRun
лабел Label1
---
Что буде непонятно - спрашивай через профильное мыло.
Удачи

 
 
Добавлено
Paha_W
Это, короче, твои супер извращения с часы, забыл в начале поста вписать кому.

Всего записей: 455 | Зарегистр. 09-02-2004 | Отправлено: 01:48 26-10-2004
deadsy



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AB2000 слушай, библиотека которую ты описал это из CLX, просто не используй CLX (всё пиши на VCL) и не нужно будет ничего таскать

Всего записей: 44 | Зарегистр. 05-08-2004 | Отправлено: 13:58 27-10-2004
Tema



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мож кто знает...
Программка должна просто висеть гдето в виде маленькой панельки поверх всех окон и парой кнопок на ней. Кажой кнопке присвоена определённая фраза.
Теперь проблема:
Я печатаю, например, в МС Ворде и нажимаю на одну из кнопок своей программки, которая висит где-то рядом. В том месте, где в Ворде стоял курсор должна вставиться фраза ссответствующая нажатой кнопке.

Всего записей: 124 | Зарегистр. 10-11-2003 | Отправлено: 01:31 22-11-2004
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Программка должна просто висеть гдето в виде маленькой панельки поверх всех окон и парой кнопок на ней. Кажой кнопке присвоена определённая фраза.  
Теперь проблема:  
Я печатаю, например, в МС Ворде и нажимаю на одну из кнопок своей программки, которая висит где-то рядом. В том месте, где в Ворде стоял курсор должна вставиться фраза ссответствующая нажатой кнопке.

это можнго сделать при помощи keybd_event, почитай как использовать, но только вместо нажатия на кнопки лучше заюзать горячие клавиши, чтобы не терять фокус.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:33 22-11-2004
Tema



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
вместо нажатия на кнопки лучше заюзать горячие клавиши, чтобы не терять фокус

А если кнопочек штук 50? В этом-то и вся фишка.... Нужно, чтобы фокус возвращался на Ворд, после нажатия кнопки в программе...
За keybd_event спасибо большое! Почитаю сейчас.

Всего записей: 124 | Зарегистр. 10-11-2003 | Отправлено: 15:29 22-11-2004
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi
ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru