Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2007, 11:43   #1
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
Смущение Пару простых вопросов по ListBox'у

Кому-то может мои вопросы покажутся дурацкими, но все же:

Что надо сделать что б при вызове PopupMenu ListBox'a, выделялась та строка, которая находится сейчас под указателем мыши.

И еще, как, если можно, сделать горизонтальную прокрутку?

Последний раз редактировалось Viteef; 14.06.2007 в 12:15.
Viteef вне форума Ответить с цитированием
Старый 14.06.2007, 11:54   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

1.
procedure TForm4.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
p:tpoint;
begin
p.X:=x;
p.Y:=y;
listbox1.itemindex:=listbox1.Itemat pos(p,true);
end;
2.
procedure TForm1.FormCreate(Sender: TObject);
var
i, MaxWidth: integer;
begin
MaxWidth := 0;
for i := 0 to ListBox1.Items.Count - 1 do
if MaxWidth < ListBox1.Canvas.TextWidth(ListBox1. Items.Strings[i]) then
MaxWidth := ListBox1.Canvas.TextWidth(ListBox1. Items.Strings[i]);
SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0);
end;
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 14.06.2007, 12:16   #3
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
Стрелка

Большущее спасибо КВЭНДИ, а
как можно перетащить строку из одного листбокса в другой?
Viteef вне форума Ответить с цитированием
Старый 14.06.2007, 12:32   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Св-ва у двух списков:
DragKind:=dkDrag;
Dragmode:=dmautomatic;

потом:
procedure TForm4.ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
var
droppedOnIndex: integer;
begin
if (Sender is TListbox) and (Source is TListBox) then
begin
droppedOnIndex := TListBox(Sender).ItemAtPos(Point(X, Y), false);
TListBox(Sender).Items.Insert(dropp edOnIndex,
TListBox(Source).Items[TListBox(Source).itemindex]);
TListBox(Source).Items.Delete(TList Box(Source).itemindex);
TListBox(Source).Update;
TListBox(Sender).Update;
end;
end;
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 14.06.2007, 13:50   #5
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
Стрелка

procedure TForm1.AutoLoadDragDrop(Sender, Source: TObject; X, Y: Integer);
var
droppedOnIndex: integer;
begin
if (Sender is TListbox) and (Source is TListBox) then
begin
droppedOnIndex := TListBox(Sender).ItemAtPos(Point(X, Y), false);
TListBox(Sender).Items.Insert(dropp edOnIndex,
TListBox(Source).Items[TListBox(Source).itemindex]);
TListBox(Source).Items.Delete(TList Box(Source).itemindex);
TListBox(Source).Update;
TListBox(Sender).Update;
end;
end;

procedure TForm1.AllGroupDragDrop(Sender, Source: TObject; X, Y: Integer);
var
droppedOnIndex: integer;
begin
if (Sender is TListbox) and (Source is TListBox) then
begin
droppedOnIndex := TListBox(Sender).ItemAtPos(Point(X, Y), false);
TListBox(Sender).Items.Insert(dropp edOnIndex,
TListBox(Source).Items[TListBox(Source).itemindex]);
TListBox(Source).Items.Delete(TList Box(Source).itemindex);
TListBox(Source).Update;
TListBox(Sender).Update;
end;
end;
//AutoLoad AllGroup - ListBox'ы

Я так понял для обоих ListBox'oB эта процедура, где их в Event прописывать надо?
Viteef вне форума Ответить с цитированием
Старый 14.06.2007, 13:52   #6
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Это для списка- приемника
берешь текст
var
droppedOnIndex: integer;
begin
if (Sender is TListbox) and (Source is TListBox) then
begin
droppedOnIndex := TListBox(Sender).ItemAtPos(Point(X, Y), false);
TListBox(Sender).Items.Insert(dropp edOnIndex,
TListBox(Source).Items[TListBox(Source).itemindex]);
TListBox(Source).Items.Delete(TList Box(Source).ite mindex);
TListBox(Source).Update;
TListBox(Sender).Update;
end;
end;

выбираешь событие для списка
DragDrop

и заменяешь его текст на этот.

Св-ва у двух списков:
DragKind:=dkDrag;
Dragmode:=dmautomatic;

поставил ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи

Последний раз редактировалось zetrix; 15.06.2007 в 07:12.
Квэнди вне форума Ответить с цитированием
Старый 14.06.2007, 14:09   #7
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
Стрелка

Все просто вроде бы, но не работает!

Можешь дать простенький исходник, плз!

Цитата:
Сообщение от Квэнди Посмотреть сообщение
Св-ва у двух списков:
DragKind:=dkDrag;
Dragmode:=dmautomatic;

поставил ?
А как же !

Последний раз редактировалось zetrix; 15.06.2007 в 07:13.
Viteef вне форума Ответить с цитированием
Старый 14.06.2007, 14:32   #8
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

unit Unit4;

interface

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

type
TForm4 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
procedure ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure FormActivate(Sender: TObject);
procedure ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.FormActivate(Sender: TObject);
begin
listbox1.DragMode:=dmAutomatic;
listbox2.DragMode:=dmAutomatic;
end;

procedure TForm4.ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
var
droppedOnIndex: integer;
begin
if (Sender is TListbox) and (Source is TListBox) then
begin
droppedOnIndex := TListBox(Sender).ItemAtPos(Point(X, Y), false);
TListBox(Sender).Items.Insert(dropp edOnIndex,
TListBox(Source).Items[TListBox(Source).itemindex]);
TListBox(Source).Items.Delete(TList Box(Source).itemindex);
TListBox(Source).Update;
TListBox(Sender).Update;
end;
end;



procedure TForm4.ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if (Sender is TListBox) and (Source is TListBox) then
begin
if TListBox(Sender).Name = TListBox(Source).Name then
Accept := False
else
Accept := true;
end;
end;

end.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи

Последний раз редактировалось zetrix; 15.06.2007 в 07:12.
Квэнди вне форума Ответить с цитированием
Старый 14.06.2007, 14:37   #9
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
По умолчанию

Наконец-то, спасибо за помощь.
Viteef вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
КАЛЫМ на ПАРУ ДНЕЙ (PHP + Delphi) = $ BoryaPop Фриланс 8 24.05.2008 21:56
Пару вопросов о DynamicSkinForm Relrin Компоненты Delphi 6 22.04.2008 04:03
Помогите (написть пару элементарных программ на С++) ВаньОК Общие вопросы C/C++ 6 10.02.2008 18:50
Пара простых вопросов BETONOMESHALKA Общие вопросы Delphi 2 27.01.2008 10:30
Срочно пару вопросов fruTT Общие вопросы Delphi 8 30.10.2007 22:14