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

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

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

ShIvADeSt (07-04-2008 02:27): продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=9383  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите плиз как в ЛистВью добавить разделители. Какую LVM команду надо послать в контрол.
То есть если тупо объяснить, надо как в Винраре сделать. Там есть опция в установках для показа разделителей.
Ну кто понял, помогите плиз, а то чуть ли не все команды в элемент переслал...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 19:46 11-12-2007
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Maks150988 это свойство GridLines, если я тебя правильно понял

Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 20:41 11-12-2007
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jokerjar79
Да не я ж на ВинАпи одном работаю. Тут чтобы добавить например строку, надо LVM_INSERTITEM команду. А вот как разделители сделать, не знаю...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 21:45 11-12-2007
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Maks150988, а понятно. Вот, нашел в МСДНе:
 

Код:
LVM_FIRST = $1000;
LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54;
LVS_EX_GRIDLINES = $00000001;
 
...
 
SendMessage(List, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_GRIDLINES, LVS_EX_GRIDLINES);


Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 06:35 12-12-2007
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jokerjar79
Спасибо. Вчера кое-каr откопал в справке ВинАпи с дистрибутива Делфи тоже команду.

Код:
 
ListView_SetExtendedListViewStyle(GetDlgItem(hWin, List), LVS_EX_GRIDLINES);
 

Но SendMessage мне почему-то больше нравится.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 16:24 12-12-2007 | Исправлено: Maks150988, 16:53 12-12-2007
MrGalaxy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа!
Хочу программно выключить компьютер. Функция ExitWindowSex требует для этого повышения привилегий.
Курил описание на AdjustTokenPrivileges и сопутствующие разделы через справку Delphi (Ctrl+F1).
Осталось непонятным, где находится существующий TokenHandle, как к нему получить доступ. Или этот параметр описывается переменной типа cardinal и в неё автоматически помещается вызванное значение? Но тогда получается, что, вроде, этот аргумент функции и не нужен для модификации. В общем, полная каша в голове.
Помогите разобраться!

Всего записей: 1868 | Зарегистр. 11-01-2007 | Отправлено: 19:33 12-12-2007
BrdGuest



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2 MrGalaxy
Вот здесь всё расписано, правда, для вижуал васика...

Всего записей: 43 | Зарегистр. 07-12-2007 | Отправлено: 20:21 12-12-2007
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MrGalaxy
Код:
program Shuddown;
 
uses
  Windows;
 
var
  hToken: THandle;
  tkp:    TTokenPrivileges;
 
begin
  if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
    if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then begin
      tkp.PrivilegeCount:=1;
      tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
      if AdjustTokenPrivileges(hToken, False, tkp, 0, PTokenPrivileges(nil)^, PDWORD(nil)^) then
        ExitWindowsEx(EWX_SHUTDOWN+EWX_FORCE, 0);
    end;
end.

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 08:15 13-12-2007
skinash



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

Цитата:
Настроил в общем не плохо, но есть некоторые неприятные моменты.

А ты отошли им в багрепорт свои пожелания, глядишь, к следующей версии исправят. Там ребята оперативно работают...
Вопрос

Код:
S := Format('%?d', [2]);

Что нужно поставить вместо '?' чтобы S показала '02'  
Если я делаю так:

Код:
S := Format('%2d', [2]);

то S у меня показывает ' 2' (т.е. с пробелом, а не с нулём)
 
Сам разобрался:

Код:
S := Format('%.2d', [2]);


Всего записей: 145 | Зарегистр. 21-09-2006 | Отправлено: 09:01 13-12-2007 | Исправлено: skinash, 11:23 13-12-2007
delover

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

Код:
if BlaBla then exit
else continue;
 

форматит в

Код:
if BlaBla then  
begin
  exit
end else  
begin
  continue;
end;

Еси запретить бегины, то не форматирует. А я хочу получть стандартный Дельфовый

Код:
if BlaBla then  
  exit else  
  continue;
 


Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 17:58 13-12-2007
MrGalaxy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BrdGuest
RomanTim
Спасибо, господа!
Я написал так:

Код:
var
  Form1: TForm1;
  tokenhandle: THandle;
  tp: TTokenPrivileges;
  X: cardinal;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
 
begin
 if OpenProcessToken(GetCurrentProcess, TOKEN_ALL_ACCESS, tokenhandle) then
  if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tp.Privileges[0].Luid) then
   begin
     tp.PrivilegeCount:=1;
     tp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
        If AdjustTokenPrivileges(TokenHandle, false, tp, 0, nil, X) then
            ExitWindowsEx(EWX_SHUTDOWN,0)
   end
end;
 
end.

Проверил, работает в т.ч. и на Висте-64.
RomanTim, я Вас чуть покритикую за "+EWX_FORCE". Дело в том, что такая конструкция должна выключать ЭВМ, не завершая процессы, а делая им секир-башка без всякого сохранения пользовательских данных. Для этого не надо и привилегии повышать, так выключается, я проверял. А что мне понравилось - так это то, что Вы обошлись без создания промежуточной переменной при вызове AdjustTokenPrivileges.  
 
Добавлено:
Может, это уже обсуждалось, но какой Делфи чётко работает с-под Висты-64? Я на работе попробовал поставить 6-й, ему что-то не понравилось, ругнулся. Дома ставить не рискую.
2006-й будет работать? Я видел в продаже у пиратов.

Всего записей: 1868 | Зарегистр. 11-01-2007 | Отправлено: 18:59 13-12-2007
ALPeresvet

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. У меня такой вопрос:
если есть только исполнительный файл проекта, можно каким - нибудь способом получить из него исходники?

Всего записей: 13 | Зарегистр. 29-11-2007 | Отправлено: 20:33 13-12-2007
BrdGuest



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ALPeresvet
Программу, написанную на Делфи, можно попробовать "декомпилировать" тулзой DeDe (взять можно здесь). Однако полноценные исходники ты таким образом не получишь.

Всего записей: 43 | Зарегистр. 07-12-2007 | Отправлено: 09:02 14-12-2007
skinash



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
Внимательно посмотри настройки. Страничка Transform->Add or remove...->Leave begin and end as is

Цитата:
if BlaBla then exit  
else continue;

у меня форматирует как

Цитата:
  if BlaBla then
    exit
  else
    continue;

Вот мой конфигурационный файл: JCFSettings.cfg
Единственное что мне не нравится, это то, как он комменты форматирует.
 
Добавлено:
ALPeresvet
Добавлю, получишь названия процедур и функций а внутри код на ассемблере. Ну и ещё формы получишь со всеми компонентами. Например, ImageList со всеми картинками.

Всего записей: 145 | Зарегистр. 21-09-2006 | Отправлено: 09:09 14-12-2007 | Исправлено: skinash, 10:32 14-12-2007
Fallen_Angel_888

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
нужна помощь. поисковик текста запускается, но текст не ищет, вот код:
 
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    FindDialog1: TFindDialog;
    procedure Button1Click(Sender: TObject);
    procedure FindDialog1Find(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
FindDialog1.Execute;
end;
 
procedure TForm1.FindDialog1Find(Sender: TObject);
var
  Buff, P, FT: PChar;
  BuffLen: Word;
begin
  with Sender as TFindDialog do
  begin
    GetMem(FT, Length(FindText) + 1);
    StrPCopy(FT, FindText);
    BuffLen := Memo1.GetTextLen + 1;
    GetMem(Buff, BuffLen);
    Memo1.GetTextBuf(Buff, BuffLen);
    P := Buff + Memo1.SelStart + Memo1.SelLength;
    P := StrPos(P, FT);
    if P = nil then
      MessageBeep(0)
    else
    begin
      Memo1.SelStart := P - Buff;
      Memo1.SelLength := Length(FindText);
    end;
    FreeMem(FT, Length(FindText) + 1);
    FreeMem(Buff, BuffLen);
  end;
  end;
end.

Всего записей: 13 | Зарегистр. 30-11-2007 | Отправлено: 10:55 14-12-2007
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fallen_Angel_888
_http://www.swissdelphicenter.ch/en/showcode.php?id=1881
и спрячь код в more

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 12:28 14-12-2007
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
skinash
Спасибо получилось почти так как надо. Единственное я оставляю без переноса строки типа

Код:
 
   if p = nil then exit;
   //а не так
   if p = nil then  
      exit;

Но многово хотеть это - ничего не иметь. А комментарии я вообще не форматирую, ни одной галочки не ставлю.
 
Fallen_Angel_888
А у меня ищет. В следующей строке указывается с какой позиции искать.

Код:
 
P := Buff + Memo1.SelStart + Memo1.SelLength;
 

В начале работы программы позиция в TMemo1 в конце. Я ставлю её в начало текста. Потом жму кнопку. Пока ничего не видно. Закрываю диологовое окно и нажимаю Tab чтобы активизировать TMemo1. И вижу что теперь выделена StrPos. Твой код рабочий.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 12:57 14-12-2007
skinash



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

Цитата:
Единственное я оставляю без переноса строки типа

Код:
if p = nil then exit;  
   //а не так  
   if p = nil then  
      exit;

 

Ну вообще то это не по ГОСТУ ( я имею ввиду "Delphi 5, Руководство разработчика", написанный Стивом Тейксейрой и Ксавье Пачеко. Глава 6 )
Хотя, это уже холивар
 
Добавлено:
Fallen_Angel_888
Блин, опасный код с GetMem FreeMem. Чем вам VCL не угодил, всё равно же его используешь (TMemo, TButton, TFindDialog).

Всего записей: 145 | Зарегистр. 21-09-2006 | Отправлено: 16:18 14-12-2007
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MrGalaxy
По поводу EWX_FORCE. Был когда то написанный код, я его кинул, задача, под которую он писался, не предусматривала попыток аккуратно завершить приложения.
На счет делфи под Vista x64. У меня вроде без проблем встала 2007 (которая в общем то и выпускалась чтобы нормально висту поддержать). Одно но - обновление при установке подвисает, а на 2003 x64 установилось без проблем

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 11:49 15-12-2007
MrGalaxy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа!
Возникла задача - перехват программой нажатия клавиши SLEEP.
Поскольку ни в книжках, что есть у меня, ни в справке Делфи нет кода клавиш управления питанием, то написал такую программульку, чтобы этот код узнать:
http://slil.ru/25238047


код программы
 
Запуская её на работе на 3-х машинах, узнал, что power и wake соответствует один и тот же код 255, sleep - 95.
Радостно потирая руки и надувая щёки , я пришёл домой с намерением отполировать программу.
Включаю ЭВМ, задаю системе не выполнять никакие действия при нажатии этих клавиш (как делал на работе), а моя программа вообще не реагирует на них!!!  Не знаю, в какой бубен бить.
 
Просьба запустить приложенную программку у себя на машинах (намеренно дал исходный код, чтоб не было подозрений насчёт троянов) на предмет высвечивания кода клавиш питания.
Инструкция:
- назначить через панель управления клавишам питания режим "не выполнять никаких действий", дабы не смущать систему;
- запустить программу;
- нажать клавишу питания;
- нажать кнопу программы.
Результат, если не трудно, сообщите.
 
ЗЫ: На работе на 2-х машинах XP SP2, на 3-й - Виста, ставленная с того же дистрибутива, что и дома.
ЗЫЗЫ: Самое интересное, что ОС реагирует на клавиши питания как положено.

Всего записей: 1868 | Зарегистр. 11-01-2007 | Отправлено: 12:45 15-12-2007 | Исправлено: MrGalaxy, 16:46 15-12-2007
   

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 3
ShIvADeSt (07-04-2008 02:27): продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=9383


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru