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

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

Автор: Aladdinych
Дата сообщения: 17.05.2008 20:58
Пользуюсь Дельфи 7
Мне нужно организовать плавающий тулбар в приложении
я использовал для этого форму со свойством bsToolWindow
но возникли вопросы:
1. Какие компоненты для кнопок использовать чтобы они имели два состояния нажатое и отжатое
2. Чтобы при наведении на кнопку она выделялась
3. Чтобы кнопки были flat
4. Чтобы при буксировке тулбара на край главного окна он мог зафиксироваться на нем и чтобы его потом можно было отбуксировать назад в плавающее состояние
Автор: Frodo_Torbins
Дата сообщения: 17.05.2008 22:32
Aladdinych Очевидно, что в качестве кнопок вам подойдут TSpeedButton. Подробности в справке.
Чтобы ваш тулбар можно было буксировать установите ему DragMode=dmAutomatic и DragKind=dkDock. Объекту (например панель), на который можно будет кидать ваш тулбар сделайте DockSite=True. Подробности также в справке, рекомендую поэкспериментировать.
Автор: mauar
Дата сообщения: 18.05.2008 03:34
Нужно создать программу отображающую Юникод при изминении языка програмы на русский язык загружается данный Юникод из файла ini
вот код программы:


Код:
unit Unit1;

interface

uses
Windows, Controls, StdCtrls, Classes, SysUtils, Forms,
Dialogs;

type
TForm1 = class(TForm)
CNew: TButton;
AComboBox1: TComboBox;
CSample: TLabel;
TSample: TEdit;
CButton1: TButton;
CButton2: TButton;
CButton3: TButton;
CheckBox1: TCheckBox;
procedure CNewClick(Sender: TObject);
procedure AComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
f:TStringList;
implementation

{$R *.dfm}
function lang(k:string):string;
begin
lang:=copy(k,pos('=',k)+1,length(k)-pos(k,'='));
end;

procedure TForm1.CNewClick(Sender: TObject);
var
b:byte;
begin
f:=TStringList.Create;
for b:=0 to Form1.ComponentCount-1 do
begin
f.Add(Form1.Components[b].Name+'=')
end;
f.SaveToFile('NewLang.ini');
end;

procedure TForm1.AComboBox1Change(Sender: TObject);
var
b:byte;
CompType:char;
begin
f:=TStringList.Create;
f.LoadFromFile(AComboBox1.Text+'.ini');
for b:=0 to f.Count-1 do
begin
CompType:=copy(f.Strings[b],1,1)[1];
if CompType='C' then
TCheckBox(Form1.Components[b]).Caption:=lang(f.Strings[b])
else
if CompType='T' then
TEdit(Form1.Components[b]).Text:=lang(f.Strings[b])
end;
end;

end.
Автор: Frodo_Torbins
Дата сообщения: 18.05.2008 17:58
mauar
Unicode Controls вам помогут: http://mh-nexus.de/tntunicodecontrols.htm
Автор: AlexVel
Дата сообщения: 19.05.2008 14:48
Может у кого стоит на компе BDS2006 (Delphi 10) или BDS2007 (Delphi 11).
Очень прошу - заархивируйте (solid RAR,7z) папки:
BDS\4.0\Source\Win32\RTL
BDS\4.0\Source\Win32\VCL
или
BDS\5.0\Source\Win32\RTL
BDS\5.0\Source\Win32\VCL
и выложте куда-нить на обменник (рапидшару или любой другой на Ваше усмотрение)
Архив должен получиться не более 2 мегабайт.
Ссылку можно в ПМ
Просто скачать целиком дистры BDS ради этих файлов не представляется возможным (траф не анлим).
Заранее благодарен
Автор: GrHnd
Дата сообщения: 19.05.2008 14:56
Подскажите как можно внести изменения в код DLL в памяти?
Следующий код в последнем MOV дает ошибку:
Access violation at address 0045C5B1 in module 'Testdll.exe'. Write of address 67183910.
т.е. запрещает запись туда, куда мне надо.

libhandle:=LoadLibrary(PAnsiChar(dll));
libhandle:=libhandle+sm;
asm
MOV EDI,libhandle
MOV EBX,[EDI]
cmp EBX,zn_old1
jne m1
MOV EBX,[EDI+4]
cmp EBX,zn_old2
jne m1
mov EBX,zn_new
MOV [EDI],EBX
m1:
end;
Автор: YFred
Дата сообщения: 19.05.2008 15:06
akaGM
Помоему код ты только раздул
и как сделать без case? Варианта hod 2
Автор: MbIIIIb
Дата сообщения: 19.05.2008 16:33
Подскажите пожалуйста, как прочитать из файла числа и записать их в массив, строки в файле будут иметь примерно такой вид
1#1#-0.065
1#2#0.235
1#3#0.000056
.......
где первых два числа индексы элемента массива, а последнее сам элемент.
Автор: Maks150988
Дата сообщения: 19.05.2008 19:47
Всем привет. Вот уже три дня не могу сделать функцию для проверки значения в ини файле. Вот что есть:

function IniCheckString(const FFileName, Section, CheckStr : string): Boolean;
var
Buffer: array[0..1023] of Char;
ListStat: PChar;
begin
if GetPrivateProfileString(PChar(Section), nil, nil, Buffer, SizeOf(Buffer), PChar(FFileName)) <> 0 then
begin
ListStat := Buffer;
while ListStat^ <> '' do
begin
if (pos(CheckStr, ListStat) = 0) then
begin
Result := True;
Exit;
end
else
Result := False;
inc(ListStat, lstrlen(ListStat) + 1);
end;
end;
end;

Ну и использование:

if IniCheckString(PChar(GetCurDir + 'LinkURL.dat'), PChar('Stations'), PChar('Значение')) = true then messagebox(happ,'yes','',0);

То есть имеем ини файл с содержимым:
[Stations]
Значение

И функция должна вернуть тру вслучае нахождения искомой строки. Но она вообще ничего не возвращает. Что не так?
Автор: xy
Дата сообщения: 19.05.2008 21:28
Друзья, помогите решить одну (еще) глупую проблему.. у нас есть несколько проектов - везде кнопки и прочие контролы такие дельфийские старые, ну квадратные типа вин98

Тут создали в CG Delphi 2007 новый проект, а там кнопочки новые.. хм.. вот вопрос где это посмотреть и как это контролировать - в принципе всё заточено под старую схему, хотелось бы перевести новый проект на старые контролы..

но в перспективе может всё переведем на новые :)

Добавлено:
Всё - решено - зависит от свойства проекта Enable runtime themes (там где иконка проекту выбирается)
Автор: Frodo_Torbins
Дата сообщения: 19.05.2008 22:07
AlexVel
Ловите: #
MbIIIIb
Найти знак # вам поможет функция Pos, а преобразовать строку в число можно с помощью функций StrToInt и StrToFloat.
Автор: Aladdinych
Дата сообщения: 19.05.2008 22:27
объект toolbar помещен на dock объект
как сделать, чтобы не отображалась кнопка закрытия.
Автор: greenpc
Дата сообщения: 20.05.2008 10:17
Maks150988

Цитата:
То есть имеем ини файл с содержимым:
[Stations]
Значение

[Stations] - секция, а дальше должно быть типа
Переменная = Значение
посмотри на ф-ции ReadString (ReadInteger, ReadBool) у класса TIniFile
там последний параметр значение по умолчанию
ЗЫ: и конечно читаем азы если на апи
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // section name ---- Stations
LPCTSTR lpKeyName, // key name ---- Переменная
LPCTSTR lpDefault, // default string ---- значение по умолчанию
LPTSTR lpReturnedString, // destination buffer --- значение Переменной
DWORD nSize, // size of destination buffer
LPCTSTR lpFileName // initialization file name
);

Автор: OdesitVadim
Дата сообщения: 20.05.2008 13:32
GrHnd
Ну логично запрещает, ибо небо. Зачем туда писать.
Но если сильно хочеться, то можно - для начала надо выставить правильные разрешения на страницу памяти. Для это надо пользоваться функциями VirtualProtectEx и VirtualProtect.
Автор: Antananarivu
Дата сообщения: 20.05.2008 13:45
Здравствуйте.
Использую Indy.
Подскажите пожалуйста, могу ли я узнать размер вложения-файла до того как его сохранить?
То есть:

Код: Attach := IdMessage.MessageParts.Items[intIndex] as TIdAttachment ;
??? - здесь нужно узнать имя файла перед тем как его сохранить!
Attach.savetofile(имя_файла);
Автор: GrHnd
Дата сообщения: 20.05.2008 14:35
OdesitVadim
А нет ли работающего примера под WinXP SP2?

Добавлено:
Или хотя бы листинга, который можно доработать до живого?
Автор: OdesitVadim
Дата сообщения: 20.05.2008 15:25
GrHnd
Ну я подсказал по каким словам гуглить, но если не умеем...
http://forum.oszone.net/archive/index.php/t-52078.html
http://www.delphisources.ru/pages/faq/base/app_xp_hide.html
http://www.cracklab.ru/f/index.php?action=vthread&topic=3463&forum=1&page=-1
собственно сама функция http://www.podgoretsky.pri.ee/ftp/Docs/Delphi/Memory/virtual/VirtualProtectEx.html
Да, следует заметить, что многие фаерволы неоднозначно реагируют на эту функцию и правильно делают.Надо ли оно тебе?
может проще пропатчить длл ещё на диске?
Автор: GrHnd
Дата сообщения: 20.05.2008 16:10
OdesitVadim
К сожаление dll подписана.
Автор: OdesitVadim
Дата сообщения: 20.05.2008 16:34
GrHnd
ну тогда это не по тематике этого форума. Хотя если она подписана, не факт, что там нет других защит.
Автор: Aladdinych
Дата сообщения: 21.05.2008 12:26
Есть Toolbar помещенный на форму.
Когда я его помещаю на панель - режим dkDock и использую стандартный DockManager, Toolbar приобретает вид панели с заголовком из двух параллельных черточек и кнопки [X].
Я хочу чтобы:
1. Кномпки закрытия вообще не было.
2. Элемент для буксировки имел другой вид, отличный от стандартного.
3. Буксировать тоолба можно было за любое место.

Как этого добиться?
Нужно ли для этого писать свой dockmanager,
где найти его пример.
Автор: YFred
Дата сообщения: 21.05.2008 15:44
Люди помогите писал программу сегодня и приключился такой глюк:

Пишу например


Код: var
p: integer;
begin
....код..
p:=1;
....код..
end;
Автор: OdesitVadim
Дата сообщения: 21.05.2008 16:28
А программа работает адекватно?
Если да, то это просто банальная оптимизация (может переменная больше не используется или используется только по значению) - компилятор прикинул, что её можно выкинуть. Но в настройках компилятора можно это дело отключить.

А может быть другой глюк - глюк компилятора.Иногда он просто не перекомпилирует файл. надо удалить dcu файлы и сделать Build All
Автор: Antananarivu
Дата сообщения: 21.05.2008 16:52
Здравствуйте, понимаю, что шансы решить свой вопрос минимальны, но все же попробую.
Опять Indy...........
Моя почтовая программа работала, скачивала файлы, сохраняла аттачи. И вдруг... перестает работать стандартная процедура Retrieve, причем с теми файлами с которыми раньше прекрасно работала (у меня есть тестовые файлы).
Выдает такую ошибку (она меняется в зависимости от письма):

Код: Cannot create file OM8R4AAAAAAAAAAAAAAAJKKHJKJKJ...
Автор: Steriosux
Дата сообщения: 22.05.2008 06:00
Не то, чтобы вопрос, а просьба небольшая.
У кого есть от 7-ки REGISTRY.PAS - закиньте, плиз, если не сложно
Автор: greenpc
Дата сообщения: 22.05.2008 06:20
Steriosux
_http://ifolder.ru/6666677
Автор: delover
Дата сообщения: 22.05.2008 08:02
Как правильно превращать
DataSet.RecNo
в
DataSet.FieldByName('ID').AsInteger
?

Спасибо.
Автор: greenpc
Дата сообщения: 22.05.2008 08:14
delover
я подозреваю что ID - ключевое поле.

Цитата:
Как правильно превращать...

никак.
RecNo - порядковый номер записи в таблице

Автор: Unbreakable
Дата сообщения: 22.05.2008 11:04
Как сделать окно класса tooltips_class32, чтобы его можно было перемещать мышкой?

P.S. Заранее благодарен за любую помощь
Автор: Steriosux
Дата сообщения: 22.05.2008 11:37
greenpc
Спасибо. То, что нужно
Автор: delover
Дата сообщения: 23.05.2008 07:45
greenpc
Спасибо. А для чего в гриде свойства
SelectedRows.Count
и
TDBGridOption = (...dgRowSelect...dgMultiSelect)
?

Я так понимаю, что в программах они обычно не используются. Правильно? Так как если их использовать, то придётся превращать "порядковый номер записи в таблице", превращать в "ключевое поле".

Приведу пример - у меня прайс лист в одной таблице, а оформленный заказ в другой. Может я что-то неправильно делаю? Можете подсказать, или привести пример, когда используя грид можно не пользоваться ID?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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