Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Delphi]Richiamo di procedure

    salve mi serve un po di aiuto con un'applicazione per la scuola.
    Il programma e costituito da una serie di form.
    Il form principale e costituito da un treeview e una list view(sembra Windows explorer).
    nella treeview ci sono vari elementi che raggrupano gli altri form(ad esempio ho 3 form che si occupano di gestire le periferiche tipo mouse, keyboard,etc nella treeview questi 3 form sono tutti nel sottoalbero "periferiche"),quando viene cliccato un elemento che contiene sottoelementi, nella list view vengono mostrate delle icone con il nome dei vari form dal qualle e composto.
    devo fare in modo che quando clicco su un elemento della list view mi viene aperto il form corispondente al nome del oggetto cliccato, pero l'apertura non puo avvenire attraverso IF ma attraverso un richiamo diretto della procedura che apre il form.
    Il mio problemma e come fare a richiamare una procedura avendo il suo nome sotto forma di string, prendo il nome dell'oggetto dalla list view che e uguale al nome della procedura che mostra il form richiesto.
    Mi rendo conto di aver comlpicato un po le cose per ulteriori spiegazioni, simplificazioni chiedete.

  2. #2
    potresti associare ad ogni nome di procedura un puntatore al metodo corrispondente.
    ciao
    sergio

  3. #3
    Potresti spiegare un po meglio il metodo di associare un puntatore al nome della procedura?

  4. #4
    "Codice .. parla per me"
    codice:
    program test;
    
    type
    
    	// un puntatore a funzione che non vuole argomenti e ritorna una stringa
    	TFunctionPtr = function : string;
    
    	// una struttura in cui memorizzo il nome e la sua funzione associate
    	TFRec = record
    		nome : string;
    		f : TFunctionPtr;
    	end;
    
    // due funzioni
    function f1 : string;
    begin
    	f1 := 'sono la funzione 1';
    end;
    
    function f2 : string;
    begin
    	f2 := 'sono la funzione 2';
    end;
    
    var
    	f : array [1 .. 2] of TFRec ;
    	i : integer;
    begin
    
    	f[1].nome := 'uno';
    	f[1].f := @f1;
    	f[2].nome := 'due';
    	f[2].f := @f2;
    
    	for i := 1 to 2 do
    	begin
    		WriteLn(f[i].nome);
    		WriteLn(f[i].f);
    	end;
    
    end.

  5. #5
    Non funzion mi da un erore di scrittura/lettura al indirizzo.
    codice:
    procedure TForm1.ExecMethod(OnObject: TObject; MethodName: string) ;
    var
       Routine: TMethod;
       Exec: TExec;
    begin
       Routine.Data := Pointer(OnObject) ;
       Routine.Code := @MethodName ;
       if not Assigned(Routine.Code) then Exit;
       Exec := TExec(Routine) ;
       Exec;
    end;
    dove methodname viene ricavato da:
    codice:
    procedure TForm1.ListView1DblClick(Sender: TObject);
    var
    b:string;
    begin
    b:=ListView1.Selected.Caption;
    ExecMethod(Form1,b+'Execute') ;
    end;
    le procedure alle quallio voglio trovare il puntatore sono
    codice:
        procedure CDROMExecute(Sender: TObject);
        procedure AvvioTaskExecute(Sender: TObject);
        procedure onLineExecute(Sender: TObject);
        procedure MouseExecute(Sender: TObject);
        procedure DirEDriveExecute(Sender: TObject);
        procedure MonitorExecute(Sender: TObject);
        procedure AudioExecute(Sender: TObject);
        procedure FileSystemExecute(Sender: TObject);
    gli oggetti dai qualli b prende i nome sono:



    'CDRom'

    'CambiaForm'

    'TaskBar'
    'onLine'
    'Mouse'
    'DirEDrive'
    'Monitor'
    'Audio'

    'FileSystem'

    'Creazione'

    Forse uttilizzare il @ per trovare l'indirizzo di una funzione da risultati pero per le procedure no(suposizione)
    Prima il prof ci aveva dato l'istruzione
    codice:
    OnObject.MethodAdress(methodname);
    per trovare l'indirizzo pero ritorna valore nil

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.