Drag and Drop for List Boxes

Drag and Drop for List Boxes

Question:
How do I implement drag and drop between two list boxes on a form?

Answer:
Dragging items from one list box and dropping them into another is, with Delphi, amazingly easy to implement. I’m going to show you a couple of very simple routines to handle two types of dragging and dropping. The first involves moving items from one list into another, and the second involves dragging items within the same list box.

Dragging Between Two List Boxes

To perform dragging between two list boxes, you first have to make the items in the source list box “drag-able.” The easiest way to do this is to set the DragMode property of the list box to dmAutomatic. (I realize there are those of you who prefer to have more precise control over dragging operations by programmatically starting and ending drag operations with BeginDrag and EndDrag. But since this discussion is mainly geared towards the novice, I’m going to skip that topic in favor of getting the user up and running right away).

The second thing to do is to set the MultiSelect property to True. This is purely optional, but it’s quite useful for transferring multiple items between lists.

The next thing you have to do is let the target list accept items being dropped. The way you typically do this is with the target list’s OnDragOver event. Here’s a simple example:

procedure TMainForm.lstStudyTracersDragOver(Sender, Source: TObject; X,  Y: Integer; State: TDragState; var Accept: Boolean);begin  {Only let another TListBox drop items}  if Source is TListBox then    Accept := True  else        Accept := False;end;

The conditional above checks to see if the source is a list box. If it is, the target sets its Accept property to true. The method that controls dragging and dropping is the target list box’s OnDragDrop method. But instead of writing code in the method to handle the dropped items directly, I use a generalize method instead:

procedure TransferItemsNoDups(Sender, Source : TObject);var  I, N : Integer;  Found : Boolean;begin  with (Source AS TListBox) do begin    for I := 0 to Items.Count – 1 do      if Selected[I] then begin        Found := False;        for N := 0 to (Sender AS TListBox).Items.Count – 1 do          if (Sender AS TListBox).Items[N] = Items[I] then            Found := True;        if NOT Found then          (Sender AS TListBox).Items.Add(Items[I]);      end;  end;end;

Notice the name of the procedure: TransferItemsNoDups. This method will iterate through the items in the source list. For each selected item to be transferred, it checks to see if the item exists in the target list. If it does, then the item is skipped; otherwise, it’s added to the end of the list. Since this came out of an application I wrote, there’s one bit of code I didn’t insert that you might consider doing yourself; that is, some code that will delete the selected items once they’re transferred. In that case, you’d probably write a procedure that looks like the following:

procedure TransferItems(Sender, Source : TObject);var  I : Integer;  Found : Boolean;begin  with (Source AS TListBox) do begin    for I := 0 to Items.Count – 1 do      if Selected[I] then        (Sender AS TListBox).Items.Add(Items[I]);        for I := 0 to Items.Count – 1 DownTo 0 do          if Selected[I] then                Items.Delete(I);  end;end;

Notice that I didn’t do any duplicate checking in the procedure above. That’s because it would be useless. This methodology is best used between two lists where you allow your user to drag and drop between the two.

Moving Items Within a List Box

Moving items within a list box is a pretty simple thing to do. Look at the procedure below:

procedure MoveItems(var Target : TObject; X, Y : Integer);var  NPos : Integer;begin  with Target AS TListBox do begin    NPos := ItemAtPos(Point(X, Y), False);    if (NPos >= Items.Count) then      Dec(NPos);    {Move selected item to the new position}    Items.Move(ItemIndex, NPos);    ItemIndex := NPos;  end;end;

The first thing that happens in the code is the drop position is read into an integer variable. Then the procedure checks the value of the position to determine if it’s in the range of the items of the list box. If not, its value is decremented to either 0 or to the count of the items. After that, the Move method is invoked to move the currently selected item to the new drop position, and the currently selected item is reselected in the position it was dropped.

I didn’t cover all the subtle nuances of drag and drop here. My purpose was to give you something to start with. I suggest you pore over the Delphi user manual and online help for more in-depth discussions of drag and drop functionality.

devx-admin

devx-admin

Share the Post:
Apple Tech

Apple’s Search Engine Disruptor Brewing?

As the fourth quarter of 2023 kicks off, the technology sphere is abuzz with assorted news and advancements. Global stocks exhibit mixed results, whereas cryptocurrency

Revolutionary Job Market

AI is Reshaping the Tech Job Market

The tech industry is facing significant layoffs in 2023, with over 224,503 workers in the U.S losing their jobs. However, experts maintain that job security

Foreign Relations

US-China Trade War: Who’s Winning?

The August 2023 visit of Gina Raimondo, the U.S. Secretary of Commerce, to China demonstrated the progress being made in dialogue between the two nations.

Pandemic Recovery

Conquering Pandemic Supply Chain Struggles

The worldwide coronavirus pandemic has underscored supply chain challenges that resulted in billions of dollars in losses for automakers in 2021. Consequently, several firms are

Game Changer

How ChatGPT is Changing the Game

The AI-powered tool ChatGPT has taken the computing world by storm, receiving high praise from experts like Brex design lead, Pietro Schirano. Developed by OpenAI,

Apple Tech

Apple’s Search Engine Disruptor Brewing?

As the fourth quarter of 2023 kicks off, the technology sphere is abuzz with assorted news and advancements. Global stocks exhibit mixed results, whereas cryptocurrency tokens have seen a substantial

GlobalFoundries Titan

GlobalFoundries: Semiconductor Industry Titan

GlobalFoundries, a company that might not be a household name but has managed to make enormous strides in its relatively short 14-year history. As the third-largest semiconductor foundry in the

Revolutionary Job Market

AI is Reshaping the Tech Job Market

The tech industry is facing significant layoffs in 2023, with over 224,503 workers in the U.S losing their jobs. However, experts maintain that job security in the sector remains strong.

Foreign Relations

US-China Trade War: Who’s Winning?

The August 2023 visit of Gina Raimondo, the U.S. Secretary of Commerce, to China demonstrated the progress being made in dialogue between the two nations. However, the United States’ stance

Pandemic Recovery

Conquering Pandemic Supply Chain Struggles

The worldwide coronavirus pandemic has underscored supply chain challenges that resulted in billions of dollars in losses for automakers in 2021. Consequently, several firms are now contemplating constructing domestic manufacturing

Game Changer

How ChatGPT is Changing the Game

The AI-powered tool ChatGPT has taken the computing world by storm, receiving high praise from experts like Brex design lead, Pietro Schirano. Developed by OpenAI, ChatGPT is known for its

Future of Cybersecurity

Cybersecurity Battles: Lapsus$ Era Unfolds

In 2023, the cybersecurity field faces significant challenges due to the continuous transformation of threats and the increasing abilities of hackers. A prime example of this is the group of

Apple's AI Future

Inside Apple’s AI Expansion Plans

Rather than following the widespread pattern of job cuts in the tech sector, Apple’s CEO Tim Cook disclosed plans to increase the company’s UK workforce. The main area of focus

AI Finance

AI Stocks to Watch

As investor interest in artificial intelligence (AI) grows, many companies are highlighting their AI product plans. However, discovering AI stocks that already generate revenue from generative AI, such as OpenAI,

Web App Security

Web Application Supply Chain Security

Today’s web applications depend on a wide array of third-party components and open-source tools to function effectively. This reliance on external resources poses significant security risks, as malicious actors can

Thrilling Battle

Thrilling Battle: Germany Versus Huawei

The German interior ministry has put forward suggestions that would oblige telecommunications operators to decrease their reliance on equipment manufactured by Chinese firms Huawei and ZTE. This development comes after

iPhone 15 Unveiling

The iPhone 15’s Secrets and Surprises

As we dive into the most frequently asked questions and intriguing features, let us reiterate that the iPhone 15 brings substantial advancements in technology and design compared to its predecessors.

Chip Overcoming

iPhone 15 Pro Max: Overcoming Chip Setbacks

Apple recently faced a significant challenge in the development of a key component for its latest iPhone series, the iPhone 15 Pro Max, which was unveiled just a week ago.

Performance Camera

iPhone 15: Performance, Camera, Battery

Apple’s highly anticipated iPhone 15 has finally hit the market, sending ripples of excitement across the tech industry. For those considering upgrading to this new model, three essential features come

Battery Breakthrough

Electric Vehicle Battery Breakthrough

The prices of lithium-ion batteries have seen a considerable reduction, with the cost per kilowatt-hour dipping under $100 for the first occasion in two years, as reported by energy analytics

Economy Act Soars

Virginia’s Clean Economy Act Soars Ahead

Virginia has made significant strides towards achieving its short-term carbon-free objectives as outlined in the Clean Economy Act of 2020. Currently, about 44,000 megawatts (MW) of wind, solar, and energy

Renewable Storage Innovation

Innovative Energy Storage Solutions

The Department of Energy recently revealed a significant investment of $325 million in advanced battery technologies to store excess renewable energy produced by solar and wind sources. This funding will

Renesas Tech Revolution

Revolutionizing India’s Tech Sector with Renesas

Tushar Sharma, a semiconductor engineer at Renesas Electronics, met with Indian Prime Minister Narendra Modi to discuss the company’s support for India’s “Make in India” initiative. This initiative focuses on

Development Project

Thrilling East Windsor Mixed-Use Development

Real estate developer James Cormier, in collaboration with a partnership, has purchased 137 acres of land in Connecticut for $1.15 million with the intention of constructing residential and commercial buildings.

USA Companies

Top Software Development Companies in USA

Navigating the tech landscape to find the right partner is crucial yet challenging. This article offers a comparative glimpse into the top software development companies in the USA. Through a

Software Development

Top Software Development Companies

Looking for the best in software development? Our list of Top Software Development Companies is your gateway to finding the right tech partner. Dive in and explore the leaders in

India Web Development

Top Web Development Companies in India

In the digital race, the right web development partner is your winning edge. Dive into our curated list of top web development companies in India, and kickstart your journey to

USA Web Development

Top Web Development Companies in USA

Looking for the best web development companies in the USA? We’ve got you covered! Check out our top 10 picks to find the right partner for your online project. Your

Clean Energy Adoption

Inside Michigan’s Clean Energy Revolution

Democratic state legislators in Michigan continue to discuss and debate clean energy legislation in the hopes of establishing a comprehensive clean energy strategy for the state. A Senate committee meeting

Chips Act Revolution

European Chips Act: What is it?

In response to the intensifying worldwide technology competition, Europe has unveiled the long-awaited European Chips Act. This daring legislative proposal aims to fortify Europe’s semiconductor supply chain and enhance its