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

» Вопросы по Delphi (все версии) - часть 4

Автор: f3ka
Дата сообщения: 19.02.2009 11:32
DogmAPT а такое бывает то хоть???
да и если читать книги по среде разработки то думаю возникнет куча вопросов, тк в книгах то описывается на английском меню и тд...
Автор: svs123456789
Дата сообщения: 19.02.2009 16:54

Цитата:
русификатор Delphi 2007

тебе перевод команд меню типа "file" или перевод help ?
Автор: f3ka
Дата сообщения: 20.02.2009 10:55
svs123456789
зря ты так... он наверно и того и другого захочет...
Автор: kigoron
Дата сообщения: 20.02.2009 16:12
Киньте плиз, если есть, кусок кода, который получает список установленных на компе браузеров или ссылку с подобным примером.
Автор: RichyRu
Дата сообщения: 20.02.2009 17:26
Есть такой фрагмент программы:

Цитата:
edtmas.Text:='Первая строка'+#13#10+'Вторая строка';

В окно выводится не в две строки, а так:

Цитата:
Первая строка||Вторая строка


Подскажите, что делать? Контрольную решать надо. Или это версия Delphi такая?
Delphi Enterprise Lite Edition v.7.3.1.6
Автор: Frodo_Torbins
Дата сообщения: 20.02.2009 17:35
RichyRu
Если edtmas имеет тип TEdit, то все правильно. Этот компонент не поддерживает многострочный текст. Нужно использовать компонент типа TMemo.
Автор: RichyRu
Дата сообщения: 20.02.2009 18:08
Frodo_Torbins
Спасибо, все понятно, а в методичке был тип именно TEdit. Теперь все сходится.
Автор: DmitryKz
Дата сообщения: 20.02.2009 23:25
Ребята, кто использовал DKLang, ответьте - локализую приложение, но язык по умолчанию не виден, т. е. находится только тот, что в файле .lng и второе - изменение интерфейса по выбору языка не происходит. Если проект начинать с нуля, тогда все работает, а на готовый проект, когда все контролы на местах, как эту штуку навесить, чтобы работала?
Автор: dardreams
Дата сообщения: 21.02.2009 10:54
Добрый день.
В первый раз решил создать массив компонентов и вот в действиях запустлая кто нибудь скажите почему здесь происходит ошибка ?, Причем сообщение приходит с номером, а действие перекрашивание вызывает ошибку:
<%
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
Procedure PanelOnClick(Sender: TObject);
{ Public declarations }

end;

var
Form1: TForm1;
Panel: array[0..811] of Tpanel;
x,y,z:integer;
implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
begin
y:=-20;
Width:=585;
Height:=586;
for j:=0 to 32 do
begin
y:=y+20;
i:=0;
x:=0;
for i:=0 to 28 do
begin
Panel[i]:=Tpanel.Create(Self);
Panel[i].Parent:=self;
Panel[i].Width:=20;
Panel[i].Height:=20;
Panel[i].Tag:=z;
Panel[i].Left:=x;
Panel[i].Top:=y;
Panel[i].OnClick:=PanelOnClick;
x:=x+20;
Inc(z);
end;
end;
end;

Procedure TForm1.PanelOnClick(Sender: TObject);
var a:integer;
begin
a:=(Sender as TPanel).tag;
ShowMessage(FloatToStr(a));
Panel[a].Color:=clBlack;
end;
end.
%>

Автор: Dmiro
Дата сообщения: 21.02.2009 11:28
dardreams
В приведенном коде заполняются только первые 28 элементов массива.
Во внутреннем цикле надо писать не
Panel[i]:=Tpanel.Create(Self);
Panel[i].Parent:=self;
Panel[i].Width:=20;
Panel[i].Height:=20;
Panel[i].Tag:=z;
Panel[i].Left:=x;
Panel[i].Top:=y;
Panel[i].OnClick:=PanelOnClick;
а
Panel[j*28+i]:=Tpanel.Create(Self);
Panel[j*28+i].Parent:=self;
Panel[j*28+i].Width:=20;
Panel[j*28+i].Height:=20;
Panel[j*28+i].Tag:=j*28+i;
Panel[j*28+i].Left:=x;
Panel[j*28+i].Top:=y;
Panel[j*28+i].OnClick:=PanelOnClick;
Ну и размерность массива должна быть правильной
Автор: dardreams
Дата сообщения: 21.02.2009 11:48
У меня заполняется абсолютно все 811 панелей, меня инетерсует почему ЭТО
ShowMessage(FloatToStr(a)); - работает На все компоненты
а это:
Panel[a].Color:=clBlack; - выдает ошибку.


Добавлено:
Вопрос решен, помогли на др. форуме, оказывается нужно было писать так:
(Sender as TPanel).Color=clBlack;
Всем спасибо а внимание !
Автор: Dmiro
Дата сообщения: 21.02.2009 12:09
dardreams
Совершенно верно помогли.
Но вопрос был ПОЧЕМУ строка выдает ошибку.
Внимательно изучите код заполнения массива и увидите, что массив заполняется с 0 до 28.
И ошибка возникает при кликании на панели с tag>28, т.е. на 2-ой и далее строчках.
А при кликании на первой строке ошибки нет, хотя и закрашивается не та панель.
Автор: DmitryKz
Дата сообщения: 22.02.2009 00:10
Ребята, подскажите, все-таки, какие апишные функции используются для стандартных экшенов категории Window: Close, TileHorizontal, TileVertical. У меня после локализации приложения, несмотря на то, что использован экшнлист Tnt при переключении на русский интерфейс заголовки вышеуказанных стандартных экшенов на нерусской винде отображаются знаками вопроса. Помогите, как исправить
Автор: Grande
Дата сообщения: 22.02.2009 15:29
Уважаемые знатоки, столкнулся с необходимостью использования функций GetWindowLong и SetWindowLong для получения стиля окна и последующего его восстановления. Однако никак не могу взять в толк - а как использовать функцию SetWindowLong? У меня какой-то бред на экране появляется


Код:
WinState := GetWindowLong(hWND, GWL_STYLE);
SetWindowLong(hWND, GWL_STYLE, WinState);
Автор: Arch1S
Дата сообщения: 22.02.2009 15:51
Grande
смотри тут http://www.delphimaster.ru/cgi-bin/forum.pl?id=1220967073&n=0
Автор: Grande
Дата сообщения: 22.02.2009 15:57
Arch1S
Так ведь я так и делаю. Не работает, однако
Автор: Maks150988
Дата сообщения: 22.02.2009 16:56
Ребята, может кто тут делал IE-подобное меню? То есть что-то типа кнопок тулбара на ребаре. Я без понятия какой ему стиль надо придать чтобы был чито только текст в кнопке без битмапа (даже если его нет - смещение координат для текста). Уже соображалка не работает как надо стили поставить, MSDN смотрю, что-то все не найду нужное. Ведь как-то оно работает в IE и например VMWare.
ie_menu_rebar.zip - тестовый проект - распоковать и скомпилировать.
Я конечно придал тулбару стиль чтобы он в строку выводил значок и текст, но значка нет, а смещение координат для якобы его есть. Без манифеста одно, с манифестом - еще кривее получается.
И с отображеним меню не пойму, вроде код должен работать и выводить менюшку снизу кнопки тулбара, а выводит в координатах (0,0). Что за ерунда...
Автор: kigoron
Дата сообщения: 22.02.2009 17:47
Мне нужно вызвать окно диалога выбор программы для открытия файла, потом получить ссылку на файл выбранной программы.
Первую часть решил так:

procedure OpenWith(FileName: string);
begin
ShellExecute(Application.Handle, 'open', PChar('rundll32.exe'),
PChar('shell32.dll,OpenAs_RunDLL ' + FileName), nil, SW_SHOWNORMAL);
end;
...
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Timer1.Enabled := True;
if Opendialog1.Execute then
begin
OpenWith(Opendialog1.FileName);

Как мне получить имя файла с путем выбранной программы?
Автор: Frodo_Torbins
Дата сообщения: 22.02.2009 21:07
kigoron
Я бы попытался прямо из своей программы вызвать функцию OpenAs_RunDLL. Но проблема в том, что результат наверно будет просто занесен в реестр. Может легче написать свой аналог этого диалога?
Автор: Tantos
Дата сообщения: 23.02.2009 06:04
kigoron

Цитата:
потом получить ссылку на файл выбранной программы.

Расшифруй фразу. Лично я понинял так:
1. Через OpenDialog получаем имя файла с путем к нему. За это у тебя отвечает строчка
Код: if Opendialog1.Execute then
Автор: kigoron
Дата сообщения: 23.02.2009 10:16

Цитата:
Имя файла - OpenDialog1.FileName. А что ты подразумеваешь под "путем выбранной программы"? Тебе нужен путь к rundll32.exe? Тогда GetSystemDirectory тебе в помощь.

В OpenDialog1.FileName имя выбранного файла, а мне нужно получить имя выбранной программы, чтоб её запускать через определенный интервал времени.
Автор: Frodo_Torbins
Дата сообщения: 23.02.2009 10:52
kigoron
А можно всю задачу целиком? Ато есть ощущение, что сама постановка задачи не верна.
Автор: Grande
Дата сообщения: 23.02.2009 11:19
kigoron
Думаю, что следует по имени файла найти прогу в реестре.
Автор: kigoron
Дата сообщения: 23.02.2009 12:28

Цитата:
А можно всю задау целиком? Ато есть ощущение, что сама постановка задачи не верна.

Выбрать одну из установленных на компе программ, интервал запуска и завершения. Программа должна автоматом запускать выбранную через заданный промежуток времени и закрывать через другой заданный интервал. Заказчик сказал, то реестром не нужно пользоваться, а просто нужно выбирать из списка программ, который выдается при выборе программы при открытии файла ("открыть с помощью").
Автор: Tantos
Дата сообщения: 23.02.2009 14:46
kigoron
Эту программу необходимо каждый раз заново определять или это будет одна и та же? Во втором случае проще всего записать путь к программе в файл настроек и не мудрить лишний раз. Да и бОльшую часть работы можно переложить на at и "Планировщик заданий" Windows.
Автор: kigoron
Дата сообщения: 23.02.2009 15:18

Цитата:
Эту программу необходимо каждый раз заново определять или это будет одна и та же? Во втором случае проще всего записать путь к программе в файл настроек и не мудрить лишний раз. Да и бОльшую часть работы можно переложить на at и "Планировщик заданий" Windows.

Та же, пока пользователь не прервал выполнение программы и не выбрал другую.

Автор: Frodo_Torbins
Дата сообщения: 23.02.2009 18:33

Цитата:
Заказчик сказал, то реестром не нужно пользоваться, а просто нужно выбирать из списка программ, который выдается при выборе программы при открытии файла ("открыть с помощью").

Этот список все равно похоже берется из реестра, так что свой диалог наверно будет лучше.
Автор: delover
Дата сообщения: 23.02.2009 19:02
Frodo_Torbins
Чем же лучше то, Фродо?

kigoron
X:\Program Files\Borland\DelphiX\Demos\Doc\filmanex.dpr
Использование реестра не предусмотрено, нет там в юнитах Registry. Да и демонстрацию эту давно уже несправедливо обходят стороной.
Автор: Frodo_Torbins
Дата сообщения: 23.02.2009 20:10
delover
Тем что из него по крайней мере можно будет узнать какую программу выбрали.
Автор: delover
Дата сообщения: 23.02.2009 20:42
Frodo_Torbins
Тогда это вопрос к MSDN, которая содержит функции/интерфейсы для замены тупого использования ветки HKEY_CLASSES_ROOT. Мне кажется задание изначально идиотское, реестр (если его читаешь) не изменится, а вот эти функции с ближайшим апдейтом могут уйти в аут.

Добавлено:
kigoron
Можно мониторить процессы, и выбрать из ближайших двух появившихся. Если один из них известный антивирус, то сделать вид, что мы ничего не заметили. В этом то и идиотизм.

Добавлено:
А можно использовать секюрити, чтобы получить PID запущенного ShellExecuteEx процесса.

Добавлено:
У открытого вами процесса привилегии и среда будут только теми, которые у вас.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Глобальные переменные в разных формах с++ builder 'a.


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