Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi

Автор: Commandos
Дата сообщения: 10.08.2004 06:38
Подскажите пожалуйста как в Delphi:
1. Выключить, перезагрузить компьютер и сменить пользователя в WINDOWS XP
2. Как можно скопировать файл и отображать процесс копирования в ProgressBar'е
Автор: c0r0ner
Дата сообщения: 10.08.2004 10:49
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;
Автор: Sleepwalker
Дата сообщения: 10.08.2004 14:26
c0r0ner
в цикл так-то надо воткнуть присвоение ПБ значение счетчика и processmessages либо refresh
Автор: MrZeRo
Дата сообщения: 11.08.2004 12:36
А еще красивее все это выполнять в отдельном потоке чтобы быстрее работало, без ProcessMessages.
Автор: deadsy
Дата сообщения: 11.08.2004 13:31
и работу с файлом сделать в классе TFileStream
Автор: Giperon
Дата сообщения: 17.08.2004 14:23
Раз уж тема называется вопросы по Delphi тоже задам вопрос. Есть ли в Delphi что-то похожее на STL в C++. Меня интересует именно входит ли это в стандартную поставку или нет. То что дополнительно можно установить все что угодно это понятно.
Автор: Sleepwalker
Дата сообщения: 18.08.2004 10:59
Giperon
скорее всего - только от сторонних разработчиков. собственно, как и STL
Автор: LeXB
Дата сообщения: 18.08.2004 15:23
Выключить компьютер в ХР без проблем

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;
Автор: Paha_W
Дата сообщения: 17.09.2004 05:38
Подскажите пожалуйста решение нескольких вопросов:
Есть компоненты 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 занчение 'Три'!!!
Заранее примного Благодарен!!!
Автор: ShIvADeSt
Дата сообщения: 17.09.2004 06:39
Paha_W
По первоему вопросу, заводишь переменную логиченского типа boolean Н-р Flag, вначале она ложь, в обработчике события на клик по имагу пишешь Flag:=True;
потом в обработчике события нажатия кнопки пишешь условие, if Flag then Label1.Caption:='Pressed' else Label1.Caption:='Not pressed'
Для вывода числа нажатий на имаги вводишь еще одну переменную, которую увеличиваешь при кликах.
Автор: Paha_W
Дата сообщения: 17.09.2004 08:53
Еще Вопрос:
Все практически тоже (смотреть выше), но Image уже 7 стоят как одно значение у электронных часов.
_
|_|
|_|

Я сам выбираю кликом какой Image загорится, но не меньше двух, и потом нажимаю Button и Label выводится результат к какому числу больше подходит!!!

Заранее примного Благодарен!!!

ShIvADeSt
Спасибо!!!
Автор: AB2000
Дата сообщения: 21.10.2004 19:19
Может это совсем простой вопрос.
Но все же.

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

Можно ли от него избавиться. Что для этого надо.
Автор: ShIvADeSt
Дата сообщения: 22.10.2004 01:40

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

Первый способ, создать файл ресурсов раз и на всегда, туда включить эту бибилотеку и при запуске приложения распаковывать ее, после работы удалять. Этот ресурсник подключать ко всем проектам. Второй способ, найти альтернативный компонент, который обходится без библиотек.
Автор: Z MeZe
Дата сообщения: 23.10.2004 01:14
Вроде жива тема . Кроме как здесь, не нашел пока где спросить:
Интересует такая вещь:
Нужно выудить уникальный номер 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
ну ты из закарючек моих понял, что я имею в виду?
Автор: Paha_W
Дата сообщения: 25.10.2004 06:25
Если так

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

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

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

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

Цитата:
Добавлено
Paha_W
ну ты из закарючек моих понял, что я имею в виду?
, да понял!
Я сделал для одного числа и у меня все получается. теперь я пытаюсь делать для нескольких чисел.
Автор: Z MeZe
Дата сообщения: 26.10.2004 00:48
Работающая хрень, создавай проект и меняй весь файл 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
Это, короче, твои супер извращения с часы, забыл в начале поста вписать кому.
Автор: deadsy
Дата сообщения: 27.10.2004 12:58
AB2000 слушай, библиотека которую ты описал это из CLX, просто не используй CLX (всё пиши на VCL) и не нужно будет ничего таскать
Автор: Tema
Дата сообщения: 22.11.2004 00:31
Мож кто знает...
Программка должна просто висеть гдето в виде маленькой панельки поверх всех окон и парой кнопок на ней. Кажой кнопке присвоена определённая фраза.
Теперь проблема:
Я печатаю, например, в МС Ворде и нажимаю на одну из кнопок своей программки, которая висит где-то рядом. В том месте, где в Ворде стоял курсор должна вставиться фраза ссответствующая нажатой кнопке.
Автор: ShIvADeSt
Дата сообщения: 22.11.2004 01:33

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

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

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

А если кнопочек штук 50? В этом-то и вся фишка.... Нужно, чтобы фокус возвращался на Ворд, после нажатия кнопки в программе...
За keybd_event спасибо большое! Почитаю сейчас.
Автор: ShIvADeSt
Дата сообщения: 23.11.2004 00:47
Tema
Тогда делай горячку, на запоминание хэндла активного окна, а полсе нажатия на кнопку вновь делай его активным и потом спустя секунду посылай текст
Автор: Tema
Дата сообщения: 23.11.2004 14:34
Хмм.. Интересное предложение. Попробую сейчас... Расскажу. Всё сделал Всем спасибо.
Автор: DGRADE
Дата сообщения: 10.01.2005 22:44
Такой вот вопрос. Столкнулся с проблемой в компоненте Memo. Допустим у меня есть текстовый файл, в нем 3 строчки произвольной информации. Открываю файл, и хочу информацию отобразить на компоненте мемо. Проблема получилось такая, с помощью процедуры Read()я считываю первую строку, помещаю в инфу в строковую переменную, и помещаю из переменной в Memo1.Text(). затем, когда считывается следущая строка процедурой Readln, и помещаю в следущую строковую переменную, по идее она должна считать следущую строчку из файла. Затем я опять помещаю инфу из переменной в мемо.текст. Конечно, я не ожидаю, что он перейдет на новую строчку( хотелось бы узнать как это сделать), но уж то, что текст в компоненте мемо станет пуст я точно не ожидал.
Возможно написал слишком запутанно, я в этом деле еще начинающий.
Вот часть кода.

procedure TForm1.Button2Click(Sender: TObject);
var Buff1: String;
var I: integer;
begin
I:=0;
AssignFile(SomeFile,'c:\bd.txt') ;
Reset(SomeFile) ;
while I < 5 do
begin
Readln(SomeFile, Buff1);
Memo1.:=Buff1;
I:=I+1;
end;
end;
PS Вариант уже слегка модифицирован циклом. Но результат тот же...
Автор: Dimonka
Дата сообщения: 10.01.2005 22:54
DGRADE
Вся твоя программка вместится в одну строчку и без ошибок

Memo1.Lines.LoadFromFile(SomeFile);
Автор: DGRADE
Дата сообщения: 10.01.2005 23:05
[Error] Unit1.pas(46): Incompatible types: 'String' and 'Text'
Вот, что выдает при попытки скомпилировать такую строчку.
Автор: Z MeZe
Дата сообщения: 10.01.2005 23:18
DGRADE

Цитата:
[Error] Unit1.pas(46): Incompatible types: 'String' and 'Text'
Вот, что выдает при попытки скомпилировать такую строчку.

Ну, ессессно.
Dimonka имел в виду (как я понимаю) путь к самому файлу. Т.е. (из твоего прошлого случая):
Memo1.Lines.LoadFromFile('c:\bd.txt');
А ошибка правильная. Ты же вместо типа string, подсовывал в LoadFromFile переменную типа TextFile или ему подобные.
А так Dimonka прав - все твое вышеописанное укладывается в одну строку:
Memo1.Lines.LoadFromFile(путь к файлу);
Автор: Tema
Дата сообщения: 11.01.2005 01:24

Цитата:
Memo1.Lines.LoadFromFile(путь к файлу);

я бы сказал имя файла с путём или без(зависит от того, где файл лежит)
Но ты я думаю уже понял..

2 DGRADE:
В принципе, если тебе приспичило делать так, да и на будущее:

I:=0;
AssignFile(SomeFile,'c:\bd.txt') ;
Reset(SomeFile) ;
Memo1.Lines.Clear; //Очистить мемо
while I < 5 do
begin
Readln(SomeFile, Buff1);
Memo1.Lines.Append(Buff1); //добавить строку
I:=I+1;
end;
end;
Автор: DGRADE
Дата сообщения: 11.01.2005 20:56
Вот спасибо, просто я в основном буду не с текстовыми файлами работать.
ЗЫ А Аппенд это переход на новую строку?
Автор: Z MeZe
Дата сообщения: 11.01.2005 23:40
DGRADE

Цитата:
ЗЫ А Аппенд это переход на новую строку?

... ->
Цитата:
Memo1.Lines.Append(Buff1); //добавить строку

Вроде как Tema доступно описал.

по хелпам бы полазал:

Цитата:

procedure Append(const S: string);
Append is the same as the Add method, except that it does not return a value. Use Append when there is no need to know the index of the string after it has been added, or with descendants of TStrings for which the index returned is not meaningful.
For example, the TStrings descendant used by memo objects uses an index to determine where to insert a string, but the inserted string does not necessarily end up as a single string in the list...
Автор: Tema
Дата сообщения: 12.01.2005 09:05

Цитата:
Вот спасибо, просто я в основном буду не с текстовыми файлами работать.

)))))))))))))
Ну и что, что не с текстовыми?
Если у тя файл называется, например, myfile.uyh, то так и пиши:

Код: Memo1.Lines.LoadFromFile('myfile.uyh');

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Вероятность одинакового CRC32


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.