Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Как в RichView'e вывести строку


Автор: Andreyzpr 8.4.2007, 16:35
У меня есть RichView
В нем выводяться ссылки типа \\ай_пишник
Тоесть адреса открытых ресурсов по локалке
Как сделать, чтобы при нажатии на этот адрес получить его. Открыть дальше как я знаю но вот как именно мне получить этот адрес, на который нажат курсор? 

Автор: aktuba 8.4.2007, 16:56
Т.е.? Я не понял вопроса, если честно. В чем именно проблема?

Автор: Andreyzpr 8.4.2007, 17:50
Вот смотри
У меня есть richView
В нем списком выведены ссылки. Например
\\10.0.0.1
\\10.0.0.2
\\10.0.0.3  и т.п.
Чтобы перейти по этому адресу на удаленный компьютер я использую ShellEcecute
Вот мне нада чтобы например если я нажму на 10.0.0.1 то перешло на этот компьютер, если на 10.0.0.2 то на него.
Тоесть чтото типо ссылки чтобы было...
Как вот реализовать??
В крайнем случае есль плохо объяснил (увы с меня плохой оратор) то как реализовать - при нажатии на строчку в RichView'e ShowMessage'm вывелся текст который там в строчке (дальше я ужо догадаюсь  smile  )

Автор: aktuba 8.4.2007, 18:01
Оформляй как ссылку и все. Только у меня один уточняющий вопрос: ты используешь TRichView или TRichEdit?

Автор: Andreyzpr 8.4.2007, 19:18
Я ж вот и хочу узнать как оформить как ссылку?
Использую RichView

Автор: aktuba 8.4.2007, 19:59
Цитата

Я ж вот и хочу узнать как оформить как ссылку?
Использую RichView 


Тогда, для начала, покажи как добавляешь текст в RichView...

Автор: Andreyzpr 8.4.2007, 20:32
вот так:
Код

RichView1.AddTextFromNewLine('forum.vingrad.ru', 0);
RichView1.Format;

Автор: aktuba 8.4.2007, 21:57
Попробуй так:
Код

uses
  RVItem;

procedure TForm1.Button1Click(Sender: TObject);
var
  lItem: TCustomRVItemInfo;
begin
  lItem := TCustomRVItemInfo.Create(RichView1.RVData);
  lItem.Tag := Integer(PChar('http://forum.vingrad.ru'));
  lItem.StyleNo := 1;                                                       //<--- Здесь указываем стиль для ссылок.
  RichView1.AddItem('forum.vingrad.ru', lItem);
  RichView1.Format;
end;


В аттаче накидал демо проект. Если не понятно, что я написал выше - посмотри его.

Автор: Andreyzpr 8.4.2007, 22:28
Чет я не очь понял.. там же уже готовые надписи....
Вот смотри в чем проблема.
Прога исчет по сети открытые для общего доступа ресурсы = фильимы, музыку и т.п.
Исчет следующим кодом: (RichView переименован в Log)
Код

procedure TForm1.ScanResourse;
var
hNetEnum: THandle;
NetContainerToOpen: NETRESOURCE;
ResourceBuffer: array[1..2000] of TNetResource;
i, ResourceBuf, EntriesToGet: DWORD;
ip:string;
name:string;
f:TextFile;
ii:Integer;
s:Integer;
ini:TiniFIle;
begin
Log.Clear;
NetContainerToOpen.dwScope:=RESOURCE_GLOBALNET;
NetContainerToOpen.dwType:=RESOURCETYPE_ANY;
NetContainerToOpen.lpLocalName:=nil;
NetContainerToOpen.lpRemoteName:= PChar('\\' + name);
NetContainerToOpen.lpProvider:= nil;
WNetOpenEnum (RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
     RESOURCEUSAGE_CONNECTABLE or RESOURCEUSAGE_CONTAINER,
     @NetContainerToOpen, hNetEnum);     
while TRUE do
  begin
    ResourceBuf := sizeof(ResourceBuffer);
     EntriesToGet:=2000;
    if (NO_ERROR <> WNetEnumResource(hNetEnum, EntriesToGet,
              @ResourceBuffer, ResourceBuf)) then
          begin
           WNetCloseEnum(hNetEnum) ;
           exit;
          end;
          for i := 1 to EntriesToGet do
              Log.AddTextFromNewLine(string(ResourceBuffer[i].lpRemoteName), 0); //Вот я добавляю в RichView все найденые
              Log.Format; 
             end;


Оно добавить в него все найденые.. а как их теперь сделать в виде ссылок?

Автор: aktuba 8.4.2007, 23:04
Код

procedure TForm1.ScanResourse;
var
  hNetEnum: THandle;
  NetContainerToOpen: NETRESOURCE;
  ResourceBuffer: array[1..2000] of TNetResource;
  i, ResourceBuf, EntriesToGet: DWORD;
  ip:string;
  name:string;
  f:TextFile;
  ii:Integer;
  s:Integer;
  ini:TiniFIle;
  lItem: TCustomRVItemInfo;
begin
  Log.Clear;
  NetContainerToOpen.dwScope:=RESOURCE_GLOBALNET;
  NetContainerToOpen.dwType:=RESOURCETYPE_ANY; 
  NetContainerToOpen.lpLocalName:=nil;
  NetContainerToOpen.lpRemoteName:= PChar('\\' + name);
  NetContainerToOpen.lpProvider:= nil;
  WNetOpenEnum (RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
     RESOURCEUSAGE_CONNECTABLE or RESOURCEUSAGE_CONTAINER,
     @NetContainerToOpen, hNetEnum);     
  while TRUE do
  begin
    ResourceBuf := sizeof(ResourceBuffer);
     EntriesToGet:=2000;
    if (NO_ERROR <> WNetEnumResource(hNetEnum, EntriesToGet,
              @ResourceBuffer, ResourceBuf)) then
          begin
           WNetCloseEnum(hNetEnum) ;
           exit;
          end;
          for i := 1 to EntriesToGet do
            begin
              lItem := TCustomRVItemInfo.Create(RichView1.RVData);
              lItem.Tag := Integer(ResourceBuffer[i].lpRemoteName);
              lItem.StyleNo := 1;                                                       //<--- Здесь указываем стиль для ссылок.
              RichView1.AddItem(string(ResourceBuffer[i].lpRemoteName), lItem);
            end;
  end;
  Log.Format; 


Добавь в Uses RVItem. Насчет стиля не забудь...

P.S.: код не проверял.

Автор: Andreyzpr 8.4.2007, 23:23
aktuba вообще пусто
ничего не показывает
я для страховки под конец добавил RichView.Format но оно тоже ниче не показывало..

Автор: aktuba 9.4.2007, 00:11
Выложи проект - посмотрю... или скинь мне.

Автор: Andreyzpr 9.4.2007, 09:35
Дело в том что там большая программа...
Там остальное нас не интересует.
Главное это тот код что я тебе выложил.
Смари: у меня на форме RichView и Style для него, и кнопка и едитом
В обработчике события кнопки идет код тот что я тебе выше указал
Можешь взять тот код что я тебе написал, только заместо riuchView.AddTextFromNewLine напиши Memo1.Lines.Add
И кинь мемо на форму
В едите пишешь IP адрес того, у кого буиш шарить ресурсы
А там все увидишь....
--------------------------------
А если уже не углубляться в подробности:::
У меня в richView'e  НАПРИМЕР такие ссылки, которые каждые три секунды меняються на другие цифры:
\\10.0.0.1
\\10.0.0.2
\\10.0.0.3
тоесть эти айпишники не постоянны
Первые три секунды например
\\10.0.0.1
\\10.0.0.2
\\10.0.0.3
через три секунды уже
\\10.0.0.4
\\10.0.0.5
\\10.0.0.6
Как его превратить в ссылки
Мне кажеццо там надо работать с обработчиком OnJump но я не знаком с RichView'om поэтому не знаю толком этого обработчика.

Добавлено через 11 минут и 32 секунды
aktuba  впринцепях я проблему решил следующим образом:
Код

var
  lItem: TCustomRVItemInfo;
  i:Integer;
begin
for i:=0 to memo1.Lines.Count do
  begin
    if Memo1.Lines[i] <> '' then begin
  lItem := TCustomRVItemInfo.Create(RichView1.RVData);
  lItem.Tag := Integer(PChar(Memo1.Lines[i]));
  lItem.StyleNo := 1;
  RichView1.AddItem(Memo1.Lines[i], lItem);
  RichView1.Format;
  end;
  end;
end;

Тоесть вначале оно в мемо віведет а потом в RichView
Только появилась другая проблема
На какую бы я ссылку не нажимал, хоть на \\10.0.0.1  хоть на http://forum.vingrad.ru ничего не происходит
Как сделать чтобы оно переходило по ссылке?????

Автор: aktuba 9.4.2007, 09:47
Тот код, который я привел в начале - прекрасно работает. Скачай http://forum.vingrad.ru/act-Attach/type/post/id-1092037.html и посмотри. Раз у тебя ничего не выводится - скорее всего ты неправильно устанавливаешь стили! Я в каждом коде указал на это. В моих примерах стили жестко фиксированны. Скачай пример и посмотри. Если так не получится/не понятно - сделай текстовый пример: форма с RVStyle, RVEdit и кнопку, по которой добавляются строки. Выложишь сюда - я доделаю и выложу обратно... Обращай внимание на стили - это главное!!!

P.S.: http://forum.vingrad.ru/act-Attach/type/post/id-1092037.html - там все предельно ясно и понятно!!!

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Цитата

aktuba  впринцепях я проблему решил следующим образом:


Гвозди можно забивать и микроскопом, но для этого предназначен молоток. Так зачем ты идешь обходным путем???

Автор: Andreyzpr 9.4.2007, 11:12
Ну вот я скачал аттач.
С выводом текста то понятно
А как сделать чтобы оно исче переходило по той ссылке!!
Я нажимаю и у мну ничего не происходит!

Автор: aktuba 9.4.2007, 11:27
Цитата

Ну вот я скачал аттач.
С выводом текста то понятно
А как сделать чтобы оно исче переходило по той ссылке!!
Я нажимаю и у мну ничего не происходит! 


Странно. У меня вроде работало. Ок, попробую объяснить на словах. В OnJump тебе необходимо получить текст из тега текущего (или выделенного, не помню) итема и перейти по ней самостоятельно. Потестить и ответить точнее смогу только вечером или ночью...

Автор: Andreyzpr 9.4.2007, 13:19
Во я ж и написал что незнаю что  в OnJump е писать 
Ну тада если можно вечером глянешь smile
зараннее спасибо ;)

Автор: aktuba 9.4.2007, 18:06
Держи готовый пример. Заметь - в нем нет никаких мемо и т.д. Обращай внимание на то, какой стиль присваивается и почему так...

Автор: Andreyzpr 10.4.2007, 23:16
Отлично с OnJump все работает
Спасибо  smile 

А что такое аттач?

Автор: aktuba 10.4.2007, 23:20
Цитата

А что такое аттач?


Аттач = приложение (приложено). К комментарию я приложил проект, это и есть аатач. Ты бы показал, как сделал...

Автор: alesumkin 29.8.2018, 21:48
А не подскажите как добавить строку или несколько между двумя другими, у меня задача, есть текст к примеру
1
2
{code}
3
4
5

должно получиться

1
2
новая строка 1
новая строка 2 
новая строка 3
3
4
5

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)