AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Beim Programmstart geht es, im Thread nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

Beim Programmstart geht es, im Thread nicht?

Ein Thema von Mattze · begonnen am 30. Jan 2011 · letzter Beitrag vom 1. Feb 2011
Antwort Antwort
Seite 2 von 2     12   
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#11

AW: Beim Programmstart geht es, im Thread nicht?

  Alt 31. Jan 2011, 15:10
Hallo,

au-weiha! Asche auf mein Haupt!
Ich habe es nicht gelöst und es scheint auch nicht mit mir zusammen zu hängen, aber der Thread war es auch nicht!
Sogar meine benutzte "Fremd-Explorer-Komponente" (TVirtualExplorerEasyListview) macht das so, also nicht richtig.
Eigentlich bin ich mir sicher, dass das früher funktioniert hat, weil ich ja darauf geachtet hatte. Aber nun geht das weder unter XP noch unter 7. Auch nicht mit (viel) älteren Versionen des Programms, bei denen es eigentlich immer geklappt hat!
Wieso kann es der Windows-Explorer richtig?

Das Icon für das Laufwerk steht als .Ico auf dem Stick und ist dort in der Autorun angegeben.
Der Windows Explorer liest es richtig aus, alles (?) andere nicht.
Wie bekommt man das Icon eines Laufwerkes noch raus, außer mit SHGetFileInfo?
Vielleicht (Sicher) muss man das anders machen!

Gruß
Mattze
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#12

AW: Beim Programmstart geht es, im Thread nicht?

  Alt 31. Jan 2011, 15:21
Rufst du im Thread-Context CoInitialize auf?
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#13

AW: Beim Programmstart geht es, im Thread nicht?

  Alt 31. Jan 2011, 15:29
Hallo,

nein, aber vergesst bitte den Thread!
Ich habe das so gemacht, wie es früher war (und es meiner Meinung nach funktionierte), also ohne Thread, sondern direkt im Hauptprogramm kodiert. Geht nicht! Genau das gleiche Problem.
Warum geht das nicht und wie kann man das richtig machen? Der Explorer kann es doch auch. Gehört das zu den geheimsten Geheimnissen von Minimalweich?

Gruß
Mattze
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#14

AW: Beim Programmstart geht es, im Thread nicht?

  Alt 1. Feb 2011, 13:50
Hallo,

ich habe natürlich weiter probiert.
Es scheint tatsächlich am SHGetFileInfo zu liegen?
Mal ein Kurzbeispiel:
{unter M ist das USB-Stick angebaut.}

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, ShellAPI, gesamt;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
    FInfo : TSHFILEINFO;
    ic: TIcon;
    SIL: HWnd;
    il: TImageList;
begin
  il:= TImageList.Create(Self);
  SIL:=SHGetFileInfo(pchar('M:\'),0,Finfo, //name+':\'),0,Finfo,
                     sizeof(TSHFILEINFO),
                     SHGFI_SysIconIndex or SHGFI_Icon or SHGFI_Smallicon or SHGFI_displayname or SHGFI_Typename);
  il.handle:=sil;
  showmessage('Iconnumber: '+inttostr(finfo.iicon)+#13+'Anzahl Iconen in der Liste: '+inttostr(il.Count));
  ic:=TIcon.Create;
  ic.Handle:=finfo.hicon;
  image1.picture.Icon:=ic;
end;
end.
Wie gesagt: Der USB-Stick hat sein Icon in der Wurzel. Dieses wird daselbst in der Autorun.inf aufgeführt.
Im Windows Explorer klappt alles.
Ist der USB-Stick angeschlossen beim Programmstart, klappt das beim Buttonclick auch.
Wird er nach dem Programmstart (in der IDE gemacht) angeschlossen, flackert der "Programmrand" zweimal.
Buttonclick nach dem ersten Mal bringt ein falsches Icon.
Wenn erst das zweite Flackern abgewartet wird (etwa 1 sek. später), dann ist es danach zwar die gleiche Iconnumber, aber das richtige Icon.

FileIconInit8true) ändert auch nichts, vergrößert nur die Iconliste auf die echte Systemimagelist.

Also bleibt das Problem, wo der Fehler ist bzw. wie warte ich ab (in Devicechange), bis das zweite "Flackern" erledigt ist.
Ich nenne es "Flackern", weil man das sieht. Aber was macht der da? Evtl. kopiert er da erst die aktualisierte Systemimagelist zu der dem Programm zugeordneten. Dann müsste es aber eine Möglichkeit geben, um zu prüfen, wann er damit fertig ist, oder?

Gruß
Mattze
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz