Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


Set Combo Box Items

 
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine Lua Scripting
View previous topic :: View next topic  
Author Message
Game Hacking Dojo
Master Cheater
Reputation: 1

Joined: 17 Sep 2023
Posts: 250

PostPosted: Tue Nov 26, 2024 10:02 am    Post subject: Set Combo Box Items Reply with quote

How do I set items of a combo box to table items or directly insert an item?

#################

Okay, solved thank you

Code:
local combobox = createComboBox()
local table = {}

if table ~= {} then
  for i = 1, #table do
    combobox.items.add(table[i])
  end
end
Back to top
View user's profile Send private message Visit poster's website
atom0s
Moderator
Reputation: 205

Joined: 25 Jan 2006
Posts: 8587
Location: 127.0.0.1

PostPosted: Tue Nov 26, 2024 3:24 pm    Post subject: This post has 1 review(s) Reply with quote

Just a heads up, this is not a valid means of comparison in Lua:
Code:
if table ~= {} then


When you define a table by setting something to just {} (an empty table) this creates a new instance of a unique table object. For example:

Code:

local t1 = {};
local t2 = {};


This would create two separate instances of a table object into t1 and t2 respectively. However, they are not equal to the same thing, meaning doing:
Code:
if (t1 == t2) then


Would always be false.

Based on what you're showing in your main post, it looks more like you would want to check the length of the table instead. Such as:

Code:

if (#t1 > 0) then
    -- add elements of table to the combobox..
end

_________________
- Retired.
Back to top
View user's profile Send private message Visit poster's website
LeFiXER
Grandmaster Cheater Supreme
Reputation: 20

Joined: 02 Sep 2011
Posts: 1069
Location: 0x90

PostPosted: Wed Nov 27, 2024 10:19 am    Post subject: Re: Set Combo Box Items Reply with quote

Game Hacking Dojo wrote:
How do I set items of a combo box to table items or directly insert an item?

#################

Okay, solved thank you

Code:
local combobox = createComboBox()
local table = {}

if table ~= {} then
  for i = 1, #table do
    combobox.items.add(table[i])
  end
end


In addition to what atom0s has said. I would like to point out that this code is very specific and will cause you to copy/paste for every situation where you want to add items from a table to a combobox. It would be better to do this:
Code:

-- Cleanup the form if it already exists
if exampleForm then exampleForm.destroy(); exampleForm = nil end

-- Define items for the combobox
local items = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '10' }

-- Create the form
exampleForm = createForm(getMainForm())
exampleForm.Name = 'frmMain'
exampleForm.Caption = 'Combobox Example Form'
exampleForm.Width = 300
exampleForm.Height = 100
exampleForm.Position = 'poDesktopCenter'

-- Create a label for the combobox
local cbItemsLabel = createLabel(exampleForm)
cbItemsLabel.Caption = 'Combobox Items:'
cbItemsLabel.Top = 20
cbItemsLabel.Left = 10

-- Create the combobox
local cbItems = createComboBox(exampleForm)
cbItems.Name = 'myCombo'
cbItems.Width = exampleForm.Width - 20
cbItems.Top = 40
cbItems.Left = 10
cbItems.Text = ''

-- Function to add items from a table to a combobox
local function addTableToCombobox(form, combobox, tbl)
    local function getFormComponent(form, componentName)
        if form == nil then error('Must provide a valid form.') end
        for i = 0, form.getComponentCount() - 1 do
            local component = form.getComponent(i)
            if component.Name == componentName then
                return component
            end
        end
        error('Invalid component.')
    end

    -- Check if the table is valid
    if tbl == nil or #tbl == 0 then error('Must provide a valid table.') end

    -- Get the combobox component
    local comboboxComponent = getFormComponent(form, combobox.Name)

    -- Add the items from the table to the combobox
    for i = 1, #tbl do
        comboboxComponent.Items.add(tbl[i])
    end
end

-- Add the items to the combobox, here I am passing the variable names, rather than the name of the component
addTableToCombobox(exampleForm, cbItems, items)


This way, you can add table items to any combobox on any form. I would highly recommend modular programming because it breaks down a program into smaller, manageable pieces, each handling a specific task. This makes the code easier to understand, maintain, and debug. It also allows for code reuse, faster development, and better collaboration among team members. By isolating functionality into separate modules, changes in one part of the code are less likely to affect others, improving overall efficiency and scalability. Just something I thought I should point out.
Back to top
View user's profile Send private message
Game Hacking Dojo
Master Cheater
Reputation: 1

Joined: 17 Sep 2023
Posts: 250

PostPosted: Wed Nov 27, 2024 1:31 pm    Post subject: Reply with quote

atom0s wrote:
Just a heads up, this is not a valid means of comparison in Lua:
Code:
if table ~= {} then


When you define a table by setting something to just {} (an empty table) this creates a new instance of a unique table object. For example:

Code:

local t1 = {};
local t2 = {};


This would create two separate instances of a table object into t1 and t2 respectively. However, they are not equal to the same thing, meaning doing:
Code:
if (t1 == t2) then


Would always be false.

Based on what you're showing in your main post, it looks more like you would want to check the length of the table instead. Such as:

Code:

if (#t1 > 0) then
    -- add elements of table to the combobox..
end


Thank you for the feedback, I really appreciate it. fixed.

LeFiXER wrote:
This way, you can add table items to any combobox on any form. I would highly recommend modular programming because it breaks down a program into smaller, manageable pieces, each handling a specific task. This makes the code easier to understand, maintain, and debug. It also allows for code reuse, faster development, and better collaboration among team members. By isolating functionality into separate modules, changes in one part of the code are less likely to affect others, improving overall efficiency and scalability. Just something I thought I should point out.


Thank you for the tip. I try to work by that prioritising efficiency and readability.

This is what I needed this for:
https://forum.cheatengine.org/viewtopic.php?t=622886

Any feedback or criticism is apperciated.
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine Lua Scripting All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites