* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Maggio 05, 2024, 05:09:47 pm

Inserisci il nome utente, la password e la durata della sessione.

501 Visitatori, 0 Utenti

Autore Topic: creare un componente timer da codice... altro problema!!!  (Letto 27171 volte)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:creare un componente timer da codice... altro problema!!!
« Risposta #30 il: Settembre 10, 2014, 03:10:14 pm »
Booo non sono in grado.... sono troppo scarso... :-(

allora io ho questo codice:


prova così:

in una cartella (tipo c:\immagini_bottoni) mettici una serie di bitmap che si chiamano: Button_0.bmp, Button_1.bmp, Button_2.bmp e così via
Nel file ini aggiungi una voce "..._Image" per ogni bottone

poi prova questo codice

Codice: [Seleziona]

  for i:=0 to N_Pulsanti-1 do
       begin
         MyBytton:=TButton.Create(Tabsheet2);
         TButton(MyBytton).Caption:=Ini.ReadString('Pulsanti','Button' + IntToStr(i+1) + '_Caption','');
         TButton(MyBytton).Top:=Ini.ReadInteger('Pulsanti','Button' + IntToStr(i+1) + '_Top',50);
         TButton(MyBytton).Left:=Ini.ReadInteger('Pulsanti','Button' + IntToStr(i+1) + '_Left',50);
         TButton(MyBytton).Width:=Ini.ReadInteger('Pulsanti','Button' + IntToStr(i+1) + '_Width',50);
         TButton(MyBytton).Height:=Ini.ReadInteger('Pulsanti','Button' + IntToStr(i+1) + '_Height',50);
         TButton(MyBytton).Visible:=true;
         TButton(MyBytton).Parent:=Tabsheet2;
         // TButton(MyBytton).Owner:=Tabsheet2;
         TButton(MyBytton).OnClick:=@DoClick; //gli dico a quale procedura far riferimento all'evento onclick
         s := Ini.ReadString('Pulsanti','Button' + IntToStr(i+1) + '_Image','');
         TButton(MyBytton).Glyph.LoadFromFile( s );
       end;

Edit:
scusa ma non avevo sfruttato il fine ini, ho sistemato il codice sopra
« Ultima modifica: Settembre 10, 2014, 03:17:49 pm da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

sekoto

  • Full Member
  • ***
  • Post: 134
  • Karma: +0/-0
Re:creare un componente timer da codice... altro problema!!!
« Risposta #31 il: Settembre 10, 2014, 03:27:21 pm »
Mi dà il seguente errore:

Project project1 raised exception class 'RunError(216)'.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:creare un componente timer da codice... altro problema!!!
« Risposta #32 il: Settembre 10, 2014, 03:33:42 pm »
riprova e fammi sapere

Codice: [Seleziona]

  for i:=0 to N_Pulsanti-1 do
       begin
         MyBytton:=TButton.Create(Tabsheet2);
         TButton(MyBytton).Caption:=Ini.ReadString('Pulsanti','Button' + IntToStr(i+1) + '_Caption','');
         TButton(MyBytton).Top:=Ini.ReadInteger('Pulsanti','Button' + IntToStr(i+1) + '_Top',50);
         TButton(MyBytton).Left:=Ini.ReadInteger('Pulsanti','Button' + IntToStr(i+1) + '_Left',50);
         TButton(MyBytton).Width:=Ini.ReadInteger('Pulsanti','Button' + IntToStr(i+1) + '_Width',50);
         TButton(MyBytton).Height:=Ini.ReadInteger('Pulsanti','Button' + IntToStr(i+1) + '_Height',50);
         TButton(MyBytton).Visible:=true;
         TButton(MyBytton).Parent:=Tabsheet2;
         // TButton(MyBytton).Owner:=Tabsheet2;
         TButton(MyBytton).OnClick:=@DoClick; //gli dico a quale procedura far riferimento all'evento onclick
         s := Ini.ReadString('Pulsanti','Button' + IntToStr(i+1) + '_Image','');
         if not fileexists(s) then
             showmessage('file ' + s + ' non trovato!');
         TButton(MyBytton).Glyph.LoadFromFile( s );
       end;
Imagination is more important than knowledge (A.Einstein)

sekoto

  • Full Member
  • ***
  • Post: 134
  • Karma: +0/-0
Re:creare un componente timer da codice... altro problema!!!
« Risposta #33 il: Settembre 10, 2014, 03:48:35 pm »
non funziona

mi da l'errore di prima!!!

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:creare un componente timer da codice... altro problema!!!
« Risposta #34 il: Settembre 10, 2014, 04:19:04 pm »
ops...

la classe che usi è TButton che non ha la gliph...
Devi sostituire TButton con TBitBtn (che invece ha la Gliph)

Imagination is more important than knowledge (A.Einstein)

sekoto

  • Full Member
  • ***
  • Post: 134
  • Karma: +0/-0
Re:creare un componente timer da codice... altro problema!!!
« Risposta #35 il: Settembre 10, 2014, 06:31:12 pm »
Veramente io ho sostituitoil tuttocon TSpeedbutton ma non funziona ugualmente...

Mi sa che sono io che sono imbranato!!!!

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:creare un componente timer da codice... altro problema!!!
« Risposta #36 il: Settembre 10, 2014, 06:35:40 pm »
Riesci a individuare su quale riga di codice ti restituisce l'errore?
Potresti creare un esempio minimo compilabile che dimostri l'errore e postarlo qui sul forum, per facilitare il compito di chi cerca di aiutarti  ;)

sekoto

  • Full Member
  • ***
  • Post: 134
  • Karma: +0/-0
Re:creare un componente timer da codice... altro problema!!!
« Risposta #37 il: Settembre 10, 2014, 07:23:36 pm »
Allora ho intrapreso un'altra strada, salvando il percorso dell'immagine in un file di testo, a questo punto tale file viene caricato in un TMemo all'apertura dell'applicazione quindi l'immagine viene associata al pulsante man mano che il pulsante viene creato

esempio:

....

   SetLength(MyBytton, N_Pulsanti);
     for i:=0 to N_Pulsanti-1 do
       begin
         MyBytton:=TSpeedButton.Create(TabSheet2);
         TSpeedButton(MyBytton).Caption:=Ini.ReadString('Pulsanti','SpeedButton' + IntToStr(i+1) + '_Caption','');
         TSpeedButton(MyBytton).Name:=Ini.ReadString('Pulsanti','SpeedButton' + IntToStr(i+1) + '_Name','');
         imagepicture.ComboBox1.Items.Add(Ini.ReadString('Pulsanti','SpeedButton' + IntToStr(i+1) + '_Name',''));
         TSpeedButton(MyBytton).Top:=Ini.ReadInteger('Pulsanti','SpeedButton' + IntToStr(i+1) + '_Top',50);
         TSpeedButton(MyBytton).Left:=Ini.ReadInteger('Pulsanti','SpeedButton' + IntToStr(i+1) + '_Left',50);
         TSpeedButton(MyBytton).Width:=Ini.ReadInteger('Pulsanti','SpeedButton' + IntToStr(i+1) + '_Width',50);
         TSpeedButton(MyBytton).Height:=Ini.ReadInteger('Pulsanti','SpeedButton' + IntToStr(i+1) + '_Height',50);
         TSpeedButton(MyBytton).Glyph.LoadFromFile(Memo.Lines);
         if not fileexists(Memo.Lines) then
            showmessage('file' + ImageButton.Lines + ' non trovato');
         TSpeedButton(MyBytton).Visible:=true;     

.....   

Ma quando carica le immagini mi da un errore del tipo "Wrong image format"

Dov'è l'errore???                 

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:creare un componente timer da codice... altro problema!!!
« Risposta #38 il: Settembre 10, 2014, 07:27:30 pm »
sbaglio o così hai la stessa immagine per tutti i bottoni?
Imagination is more important than knowledge (A.Einstein)

sekoto

  • Full Member
  • ***
  • Post: 134
  • Karma: +0/-0
Re:creare un componente timer da codice... altro problema!!!
« Risposta #39 il: Settembre 10, 2014, 07:37:06 pm »
sbagli perchè l'immagine viene associata al momento della creazione del pulsante

quindi al pulsante n°1 viene associata la riga n°1 del memo che contiene il percorso della prima immagine
al secondo  pulsante n° 2 viene associata la riga n° 2 del memo che contiene il percorso della seconda immagine
e via dicendo

ma il problema è l'errore che mi dà che non so da cosa dipende.
Le immagini che uso sono di tipo png che dovrebbero andar bene anche perchè ho fatto una prova durante la stesura del codice provando ad assegnare ad un pulsante fisico un immagine e l'operazione va a buon fine.

Non so da cosa dipende...

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:creare un componente timer da codice... altro problema!!!
« Risposta #40 il: Settembre 10, 2014, 07:43:27 pm »
la proprietà Gliph è di tipo TBitmap
o converti le immagini in bitmap oppure puoi provare a fare una conversione a runtime

Codice: [Seleziona]
procedure TForm1.FormCreate(Sender: TObject);
var i, N_Pulsanti: integer;
     MyBytton: TBitBtn;
     s: string;
     xPic: TPicture;
begin
    xPic:=TPicture.Create;
    try
    N_Pulsanti := 3;
    for i:=0 to N_Pulsanti-1 do
         begin
           MyBytton:=TBitBtn.Create(Tabsheet2);
           TBitBtn(MyBytton).Caption:='Pulsante ' + IntToStr(i+1);
           TBitBtn(MyBytton).Top:=(i+1) * 50;
           TBitBtn(MyBytton).Left:=50;
           TBitBtn(MyBytton).Width:=120;
           TBitBtn(MyBytton).Height:=48;
           TBitBtn(MyBytton).Visible:=true;
           TBitBtn(MyBytton).Parent:=Tabsheet2;
           // TButton(MyBytton).OnClick:=@DoClick; //gli dico a quale procedura far riferimento all'evento onclick
           s := 'archive-insert-3.png';
           xPic.LoadFromFile(s);
           TBitBtn(MyBytton).Glyph.Assign( xPic.Bitmap );
         end;

    finally
      xPic.Free;
    end;
end;
Imagination is more important than knowledge (A.Einstein)

sekoto

  • Full Member
  • ***
  • Post: 134
  • Karma: +0/-0
Re:creare un componente timer da codice... altro problema!!!
« Risposta #41 il: Settembre 10, 2014, 08:07:35 pm »
ho convertito le immagini manualmente ma ovviamente hanno perso parecchio in qualità...
Esiste un modo per mantenere la qualità iniziale???

Comunque la mia procedura funziona...
Grazie a tutti quelli che ho rotto le scatole...

P.s: se li converto a runtime cambia qualcosa???

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:creare un componente timer da codice... altro problema!!!
« Risposta #42 il: Settembre 10, 2014, 11:58:08 pm »
In che senso li hai convertiti manualmente?
Credo che GIMP o simili diano la possibilità di scegliere anche i parametri di "conversione" tra un formato e l'altro. ;)

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

sekoto

  • Full Member
  • ***
  • Post: 134
  • Karma: +0/-0
Re:creare un componente timer da codice... altro problema!!!
« Risposta #43 il: Settembre 11, 2014, 09:40:35 am »
Ho aperto le immagini con pinta e li ho semplicemente salvati in bmp

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:creare un componente timer da codice... altro problema!!!
« Risposta #44 il: Settembre 11, 2014, 09:54:50 am »
P.s: se li converto a runtime cambia qualcosa???

non credo cambi molto il tempo di loading più o meno è quello (ma bisognerebbe fare una prova con un migliaio di immagini per esserne certi)
intanto puoi vedere quanto perdi in Kb (sull'HD) nell'avere tutte le immagini come bitmap
Imagination is more important than knowledge (A.Einstein)

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18798
  • Topic in totale: 2238
  • Online Today: 516
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 501
Total: 501

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.