![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
строки.... [D7, XP]
Steep © (2008-02-11 23:06:00)суть такая берем первый Memo (текст примерно такой):
Linkin Park, Era, Ария, Evanescence, Limp Bizkit, DMX, 50 Cent, Slipknot, Nightwish,
Rammstein, Enya, Papa Roach, Король и Шут, Blink 182, Apocaliptica, Benny Benassi,
Alizee, Nickelback, Nirvana, Powerman 5000, The Black Eyed Peace, Наив,
Cranberries, Moby, Ludacris, Tokia Hotel, Three Days Grace, Nelly Furtado, Metallica,
HIM, Prodigy, Brainstorm, Tiga, KoRn, Green Day, 666, Город 312, Roxette, Jay-Z, Rob
Zombie, Flipsyde, Justin Timberlake, Сплин, Дельфин, Timbaland, placebo, zdob si
zdub, Paul Van Dyk, all american rejects, Guano Apes, Lordi, Lost prophets, Rihanna,
Global Deejays, Die Apokalyptischen Reiter, Пилигрим, Легалайз, Morcheeba, Akon,
Pink, Bob Sinkler, Gregorian, The Killers, Fort Minor
потом ищем до запятой копируем в Memo2 вроде бы все работает
НО почемуто после некоторых названии в Memo2 появляются пустые строки...
например после: Nightwish, Benny Benassi, Наив, Metallica и тд.
код сканирование текста
procedure TForm1.Button1Click(Sender: TObject);
var
AllText: string;
x: boolean;
tmp: string;
tmppos: integer;
begin
x := false;
AllText := Memo1.Text;
repeat
tmppos := pos(', ', AllText);
if tmppos<>0 then
begin
//Showmessage(AllText);
tmp := copy(AllText, 1, tmppos-1 );
//Showmessage('tmp: ' + tmp);
Memo2.Lines.Append( tmp );
delete(AllText, 1, tmppos+1 );
//Showmessage(AllText);
end
else x := true;
until x
end;
как недопустить их появления? в чем может быть ошибка?
ketmar (2008-02-12 01:53:00) [21]>[42] antonn © (2008-02-12 01:46:00)
>не имею склонности к подсчету чужих денег
да? так ты ещё и наглый врун.
[37]: «именно поэтому микрософт продает, зарабатывает и имеет бОльшую аудиторию, а ты сидишь в какой нибудь консоли и скрипишь зубами от зависти»
внимательно прочитаю обоснование причин, по которым эту фразу можно понять не как: «ты лузер, и бабла как m$ не зашибаешь (да ваще тебе еле на лекарства хватает!), сидишь где-то в мухосранске; вот начни зашибать как m$ (ну, или как я хотя бы) — тогда и говори что-то».
сливы и отмазы не прокатят. или признай, что ты лжец, или обоснуй свои слова.
---
Understanding is not required. Only obedience.
Steep (2008-02-12 01:51:00) [22]насчет клипборда...
допустим используем код
function SetClipboardText( const AText: string ): Boolean;
var
h:THandle;
begin
Clipboard.Open;
Clipboard.AsText := AText;
h := Clipboard.GetAsHandle(CF_TEXT);
SetClipboardData(CF_LOCALE, h);
Clipboard.Close;
end;
и затемSetClipboardText( MemoZpt.Text );
все работает
НО если пишем использовать эту процедуру на клавиши Ctr+C
procedure TFrm_Text.MemoZptKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Shift = [ssCtrl]) and (Key = ord('C')) then
begin
SetClipboardText( TMemo(sender).selText );
end;
end;
то нифига не работает - как я понял винда использует свои методы...
а на наши плюет...
то есть нужно либо полностью перекрывать... либо... либо что-то другое....
...
все мои мозги на сегодня получули - хорошую тряску....
пойду я спать - время у меня уже 4 утра.....
всем удачного времени суток... а я уже сплю...
{RASkov} (2008-02-12 01:51:00) [23]> [36] Steep (12.02.08 01:23)
Проще WM_COPY "поймать" нежели кнопки отслеживать, тем более что можно скопировать и "мышой" и другими сочетаниями "кнопок"....
antonn (2008-02-12 01:46:00) [24]
> я так полагаю, ты плевать хотел на m$, и денег у тебя больше,
> чем у них? я за тебя рад.
> если не больше — не вякай глупости, а?
не имею склонности к подсчету чужих денег :) Потому что завидовать - дурно.
> Германн © (12.02.08 01:42) [41]
>
> Сначала посмотри в зеркало и скажи тому, кого в нём увидишь.
> Скажи ему несколько раз, пока тот, кто в зеркале, наконец-
> то поймет.
форум портит, я теперь тоже хочу вякать везде где можно, и желательно не в тему, и с направленной агрессией :)
Германн (2008-02-12 01:42:00) [25]
> antonn © (12.02.08 01:32) [39]
>
>
> > Германн © (12.02.08 01:31) [38]
> >
> >
> > > antonn © (12.02.08 01:28) [37]
> >
> > Иногда лучше жевать.
>
> Вот и я ему говорю.
>
Сначала посмотри в зеркало и скажи тому, кого в нём увидишь. Скажи ему несколько раз, пока тот, кто в зеркале, наконец-то поймет.
ketmar (2008-02-12 01:41:00) [26]>[31] Игорь Шевченко © (2008-02-12 00:45:00)
тогда сначала научи, как добиться этого при помощи программного переключения раскладок. и чтобы юзер при сём не нервничал.
>[37] antonn © (2008-02-12 01:28:00)
я так рад, что ты обо мне много знаешь. можно, я тебе пожалуюсь? соседи постоянно в стену стучат: им мой скрип зубов по ночам спать мешает. я уже три вставных челюсти сточил, да…
я так полагаю, ты плевать хотел на m$, и денег у тебя больше, чем у них? я за тебя рад.
если не больше — не вякай глупости, а?
---
Understanding is not required. Only obedience.
antonn (2008-02-12 01:32:00) [27]
> Германн © (12.02.08 01:31) [38]
>
>
> > antonn © (12.02.08 01:28) [37]
>
> Иногда лучше жевать.
Вот и я ему говорю.
Германн (2008-02-12 01:31:00) [28]
> antonn © (12.02.08 01:28) [37]
Иногда лучше жевать.
antonn (2008-02-12 01:28:00) [29]
> ketmar © (12.02.08 00:03) [19]
[17] прочитай внимательно, запиши на бумажке и запомни.
пользователи, они такие, тянутся к тому продукту, который проще и надежней. и не бьет палкой. именно поэтому микрософт продает, зарабатывает и имеет бОльшую аудиторию, а ты сидишь в какой нибудь консоли и скрипишь зубами от зависти.
%)
Steep (2008-02-12 01:23:00) [30]типо
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Shift = [ssCtrl]) and (Key = ord('C')) then
begin
скопировать выделенный текст в буфер в нормальном виде :)))
end;
end;
Steep (2008-02-12 01:10:00) [31]
> Это не то. Это я и сам умею. А мне надо, чтобы из любого
> Edit'а стандартным нажатием Ctrl+C в clipboard получался
> хороший русский текст.
наверно как то обрабатывать нажатие клавиш...
Steep (2008-02-12 01:05:00) [32]unit файл
unit RusClipboard;
interface
uses Clipbrd;
type
TRusClipboard = class(TClipboard)
private
procedure SetCodePage(const CodePage: longint);
public
procedure Open; override;
procedure Close; override;
end;
implementation
uses Windows;
{ TRusClipboard }
procedure TRusClipboard.Close;
begin
SetCodePage($0419);
inherited;
end;
procedure TRusClipboard.Open;
begin
inherited;
SetCodePage($0419);
end;
procedure TRusClipboard.SetCodePage(const CodePage: longint);
var
Data: THandle;
DataPtr: Pointer;
begin
// Назначить кодовую страницу для буфера обмена
Data:= GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, 4);
try
DataPtr := GlobalLock(Data);
try
Move(CodePage, DataPtr^, 4);
SetClipboardData(CF_LOCALE, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
end;
end;
var
FClipboard: TClipboard;
OldClipboard: TClipboard;
initialization
{Установить клипборд}
FClipboard:= TRusClipboard.Create;
OldClipboard:= SetClipboard(FClipboard);
if OldClipboard <> nil then OldClipboard.Free;
end.
Игорь Шевченко (2008-02-12 01:02:00) [33]Steep (12.02.08 00:58) [32]
Это не то. Это я и сам умею. А мне надо, чтобы из любого Edit'а стандартным нажатием Ctrl+C в clipboard получался хороший русский текст.
Steep (2008-02-12 00:58:00) [34]вот нашел....
procedure BufferToClipboard(Buffer: WideString);
var WideBuffer: WideString;
BuffSize: Cardinal;
Data: THandle;
DataPtr: Pointer;
begin
if Buffer <> '' then begin
WideBuffer := Buffer;
BuffSize := length(Buffer) * SizeOf(WideChar);
Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE+GMEM_ZEROINIT, BuffSize + 2);
try
DataPtr := GlobalLock(Data);
try
Move(PWideChar(WideBuffer)^, Pointer(Cardinal(DataPtr))^, BuffSize);
finally
GlobalUnlock(Data);
end;
Clipboard.SetAsHandle(CF_UNICODETEXT, Data);
except
GlobalFree(Data);
raise;
end;
end;
end;
вызов процедуры
BufferToClipboard(' hello world');
Игорь Шевченко (2008-02-12 00:45:00) [35]ketmar © (12.02.08 00:38) [29]
> и как можно добиться того же, но раскладку не дёргать?
Научи, а ? Я на самом деле не знаю "как добиться того же", чтобы из любых Delphi-ских Editов по стандартным командам копирования добиться вставки в юникодные программы корректного русского текста. Я серьезно.
ketmar (2008-02-12 00:39:00) [36]>[26] Johnmen © (2008-02-12 00:28:00)
хм. а, ну да. строки с пробелами кавычить надо. каюсь, забыл.
---
Understanding is not required. Only obedience.
ketmar (2008-02-12 00:38:00) [37]>[27] Steep (2008-02-12 00:34:00)
>неужели програмно переключать чтобы работало наверняка?
мегебаянЪ.
мне вот интересно, почему 99.9% вопрошающих про «кракозяблы в буфере обмена» никогда не задумываются, какое именно магическое действие совершает переключение раскладки, и как можно добиться того же, но раскладку не дёргать?
---
Understanding is not required. Only obedience.
Johnmen (2008-02-12 00:36:00) [38]
> потомучто у меня не миллионы слов - а маленький код понять
> легче - ну если не понять то хотя бы меньше кода....
Если ты так реально считаешь, то ты не станешь программистом.
Да тебе, как я уже понял, и не надо...
Steep (2008-02-12 00:34:00) [39]
> Зачем использовать аффигенно тормознутые ф-ии, если можно
> написать быстрый однопроходный код?
потомучто у меня не миллионы слов - а маленький код понять легче - ну если не понять то хотя бы меньше кода....
> Клавиатуру на русский переключи перед копированием :)
помогло... неужели програмно переключать чтобы работало наверняка?
Johnmen (2008-02-12 00:28:00) [40]
> ketmar © (12.02.08 00:04) [21]
> интересно, почему никто не вспомнил про TStrings.CommaText?
Потому, что и пробел является неотменным разделителем.